@black-duty/sing-box-schema 1.13.0 → 1.13.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -39,10 +39,11 @@ const CertificateOptions = z.object({
39
39
  store: z.enum([
40
40
  "system",
41
41
  "mozilla",
42
+ "chrome",
42
43
  "none"
43
44
  ]).optional().meta({
44
- description: "The default X509 trusted CA certificate list. Options: `system` (System trusted CA certificates), `mozilla` (Mozilla Included List with China CA certificates removed), `none` (Empty list).",
45
- description_zh: "默认的 X509 受信任 CA 证书列表。可选项:`system`(系统受信任的 CA 证书)、`mozilla`(移除中国 CA 证书的 Mozilla 包含列表)、`none`(空列表)。"
45
+ description: "The default X509 trusted CA certificate list. Options: `system` (System trusted CA certificates), `mozilla` (Mozilla Included List with China CA certificates removed), `chrome` (Chrome Root Store with China CA certificates removed), `none` (Empty list).",
46
+ description_zh: "默认的 X509 受信任 CA 证书列表。可选项:`system`(系统受信任的 CA 证书)、`mozilla`(移除中国 CA 证书的 Mozilla 包含列表)、`chrome`(移除中国 CA 证书的 Chrome Root Store)、`none`(空列表)。"
46
47
  }),
47
48
  certificate: listableString.optional().meta({
48
49
  description: "The certificate line array to trust, in PEM format.",
@@ -100,37 +101,6 @@ const HttpHeader = z.record(z.string(), z.string()).meta({
100
101
  description: "HTTP headers.",
101
102
  description_zh: "HTTP 标头。"
102
103
  });
103
- const InboundOptions = z.object({
104
- sniff: z.boolean().optional().meta({
105
- description: "Enable sniffing. Deprecated in sing-box 1.11.0 and removed in 1.13.0.",
106
- description_zh: "启用协议探测。已在 sing-box 1.11.0 弃用,并将在 1.13.0 移除。",
107
- deprecated: true
108
- }),
109
- sniff_override_destination: z.boolean().optional().meta({
110
- description: "Override the connection destination address with the sniffed domain. Deprecated in sing-box 1.11.0 and removed in 1.13.0.",
111
- description_zh: "用探测出的域名覆盖连接目标地址。已在 sing-box 1.11.0 弃用,并将在 1.13.0 移除。",
112
- deprecated: true
113
- }),
114
- sniff_timeout: z.string().optional().meta({
115
- description: "Timeout for sniffing (default `300ms`). Deprecated in sing-box 1.11.0 and removed in 1.13.0.",
116
- description_zh: "探测超时时间(默认 `300ms`)。已在 sing-box 1.11.0 弃用,并将在 1.13.0 移除。",
117
- deprecated: true
118
- }),
119
- domain_strategy: DomainStrategy.optional().meta({
120
- description: "If set, the requested domain name will be resolved to IP before routing. Deprecated in sing-box 1.11.0 and removed in 1.13.0.",
121
- description_zh: "如果设置,请求的域名将在路由之前解析为 IP。已在 sing-box 1.11.0 弃用,并将在 1.13.0 移除。",
122
- deprecated: true
123
- }),
124
- udp_disable_domain_unmapping: z.boolean().optional().meta({
125
- description: "If enabled, for UDP proxy requests addressed to a domain, the original packet address will be sent in the response instead of the mapped domain. Deprecated in sing-box 1.11.0 and removed in 1.13.0.",
126
- description_zh: "如果启用,对于地址为域的 UDP 代理请求,将在响应中发送原始包地址而不是映射的域。已在 sing-box 1.11.0 弃用,并将在 1.13.0 移除。",
127
- deprecated: true
128
- }),
129
- detour: z.string().optional().meta({
130
- description: "If set, connections will be forwarded to the specified inbound. Requires target inbound support.",
131
- description_zh: "如果设置,连接将被转发到指定的入站。需要目标入站支持。"
132
- })
133
- });
134
104
  const ListenOptions = z.object({
135
105
  listen: z.string().optional().meta({
136
106
  description: "Listen address.",
@@ -184,6 +154,10 @@ const ListenOptions = z.object({
184
154
  description: "UDP NAT expiration time. `5m` will be used by default.",
185
155
  description_zh: "UDP NAT 过期时间。默认使用 `5m`。"
186
156
  }),
157
+ detour: z.string().optional().meta({
158
+ description: "If set, connections will be forwarded to the specified inbound. Requires target inbound support.",
159
+ description_zh: "如果设置,连接将被转发到指定的入站。需要目标入站支持。"
160
+ }),
187
161
  proxy_protocol: z.boolean().optional().meta({
188
162
  description: "Accept proxy protocol.",
189
163
  description_zh: "接受代理协议。",
@@ -193,8 +167,7 @@ const ListenOptions = z.object({
193
167
  description: "Accept connections without proxy protocol header.",
194
168
  description_zh: "接受没有代理协议头的连接。",
195
169
  deprecated: true
196
- }),
197
- ...InboundOptions.shape
170
+ })
198
171
  }).meta({
199
172
  id: "ListenOptions",
200
173
  title: "Listen Options",
@@ -1033,11 +1006,11 @@ const DNSRouteAction = z.object({
1033
1006
  description: "Disable cache and save cache in this query.",
1034
1007
  description_zh: "在此查询中禁用缓存。"
1035
1008
  }),
1036
- rewrite_ttl: z.number().int().optional().meta({
1009
+ rewrite_ttl: z.number().int().optional().nullable().meta({
1037
1010
  description: "Rewrite TTL in DNS responses.",
1038
1011
  description_zh: "重写 DNS 回应中的 TTL。"
1039
1012
  }),
1040
- client_subnet: z.string().optional().meta({
1013
+ client_subnet: z.string().optional().nullable().meta({
1041
1014
  description: "Append a `edns0-subnet` OPT extra record with the specified IP prefix to every query by default. If the value is an IP address instead of a prefix, `/32` or `/128` will be appended automatically. Will override `dns.client_subnet`.",
1042
1015
  description_zh: "默认情况下,将带有指定 IP 前缀的 `edns0-subnet` OPT 附加记录附加到每个查询。如果值是 IP 地址而不是前缀,则会自动附加 `/32` 或 `/128`。将覆盖 `dns.client_subnet`。"
1043
1016
  })
@@ -1077,11 +1050,11 @@ const DNSRouteOptionsAction = z.object({
1077
1050
  description: "Disable cache and save cache in this query.",
1078
1051
  description_zh: "在此查询中禁用缓存。"
1079
1052
  }),
1080
- rewrite_ttl: z.number().int().optional().meta({
1053
+ rewrite_ttl: z.number().int().optional().nullable().meta({
1081
1054
  description: "Rewrite TTL in DNS responses.",
1082
1055
  description_zh: "重写 DNS 回应中的 TTL。"
1083
1056
  }),
1084
- client_subnet: z.string().optional().meta({
1057
+ client_subnet: z.string().optional().nullable().meta({
1085
1058
  description: "Append a `edns0-subnet` OPT extra record with the specified IP prefix to every query by default. If the value is an IP address instead of a prefix, `/32` or `/128` will be appended automatically. Will override `dns.client_subnet`.",
1086
1059
  description_zh: "默认情况下,将带有指定 IP 前缀的 `edns0-subnet` OPT 附加记录附加到每个查询。如果值是 IP 地址而不是前缀,则会自动附加 `/32` 或 `/128`。将覆盖 `dns.client_subnet`。"
1087
1060
  })
@@ -1296,6 +1269,11 @@ const BaseDNSRule = z.object({
1296
1269
  description: "Make `ip_cidr` rule items in rule-sets match the source IP.",
1297
1270
  description_zh: "使规则集中的 `ip_cidr` 规则匹配源 IP。"
1298
1271
  }),
1272
+ rule_set_ipcidr_match_source: z.boolean().optional().meta({
1273
+ description: "Deprecated in sing-box 1.10.0. `rule_set_ipcidr_match_source` is renamed to `rule_set_ip_cidr_match_source` and will be remove in sing-box 1.11.0. Make `ip_cidr` rule items in rule-sets match the source IP.",
1274
+ description_zh: "已在 sing-box 1.10.0 废弃。`rule_set_ipcidr_match_source` 已重命名为 `rule_set_ip_cidr_match_source` 且将在 sing-box 1.11.0 中被移除。使规则集中的 `ip_cidr` 规则匹配源 IP。",
1275
+ deprecated: true
1276
+ }),
1299
1277
  rule_set_ip_cidr_accept_empty: z.boolean().optional().meta({
1300
1278
  description: "Make `ip_cidr` rules in rule-sets accept empty query response. Only takes effect for address requests (A/AAAA/HTTPS).",
1301
1279
  description_zh: "使规则集中的 `ip_cidr` 规则接受空查询响应。仅对地址请求(A/AAAA/HTTPS)生效。"
@@ -1316,7 +1294,7 @@ const DefaultDNSRule = z.union([
1316
1294
  BaseDNSRule.extend(DNSRejectAction.shape),
1317
1295
  BaseDNSRule.extend(DNSRouteActionPredefined.shape)
1318
1296
  ]);
1319
- const LogicalDNSRule = z.object({
1297
+ const BaseLogicalDNSRule = z.object({
1320
1298
  type: z.literal("logical").meta({
1321
1299
  description: "Rule type.",
1322
1300
  description_zh: "规则类型。"
@@ -1335,7 +1313,13 @@ const LogicalDNSRule = z.object({
1335
1313
  description: "Invert match result.",
1336
1314
  description_zh: "反选匹配结果。"
1337
1315
  })
1338
- }).meta({
1316
+ });
1317
+ const LogicalDNSRule = z.union([
1318
+ BaseLogicalDNSRule.extend(DNSRouteAction.shape),
1319
+ BaseLogicalDNSRule.extend(DNSRouteOptionsAction.shape),
1320
+ BaseLogicalDNSRule.extend(DNSRejectAction.shape),
1321
+ BaseLogicalDNSRule.extend(DNSRouteActionPredefined.shape)
1322
+ ]).meta({
1339
1323
  id: "LogicalDNSRule",
1340
1324
  title: "Logical DNS Rule",
1341
1325
  title_zh: "逻辑 DNS 规则"
@@ -1420,6 +1404,10 @@ const LegacyDNSServerAddress = z.union([
1420
1404
  })
1421
1405
  ]);
1422
1406
  const LegacyDNSServerOptions = z.object({
1407
+ type: z.literal("legacy").optional().meta({
1408
+ description: "DNS server type.",
1409
+ description_zh: "DNS 服务器类型。"
1410
+ }),
1423
1411
  tag: z.string().meta({
1424
1412
  description: "The tag of the dns server.",
1425
1413
  description_zh: "DNS 服务器的标签。"
@@ -1614,6 +1602,10 @@ const HTTP3DNSServerOptions = z.object({
1614
1602
  description: "The path of the HTTP3 DNS server. `/dns-query` will be used by default.",
1615
1603
  description_zh: "HTTP3 DNS 服务器的路径。默认使用 `/dns-query`。"
1616
1604
  }),
1605
+ method: z.string().optional().meta({
1606
+ description: "The HTTP method for DNS-over-HTTP/3 requests.",
1607
+ description_zh: "DNS-over-HTTP/3 请求使用的 HTTP 方法。"
1608
+ }),
1617
1609
  headers: HttpHeader.optional().meta({
1618
1610
  description: "Additional headers to be sent to the DNS server.",
1619
1611
  description_zh: "要发送到 DNS 服务器的额外请求头。"
@@ -1689,7 +1681,7 @@ const ResolvedDNSServerOptions = z.object({
1689
1681
  title: "Resolved DNS Server",
1690
1682
  title_zh: "Resolved DNS 服务器"
1691
1683
  });
1692
- const DNSServer = z.discriminatedUnion("type", [
1684
+ const DNSServer = z.union([z.lazy(() => LegacyDNSServerOptions), z.lazy(() => z.discriminatedUnion("type", [
1693
1685
  LocalDNSServerOptions,
1694
1686
  HostsDNSServerOptions,
1695
1687
  TCPDNSServerOptions,
@@ -1701,9 +1693,8 @@ const DNSServer = z.discriminatedUnion("type", [
1701
1693
  DHCPDNSServerOptions,
1702
1694
  FakeIPDNSServerOptions,
1703
1695
  TailscaleDNSServerOptions,
1704
- ResolvedDNSServerOptions,
1705
- LegacyDNSServerOptions
1706
- ]).meta({
1696
+ ResolvedDNSServerOptions
1697
+ ]))]).meta({
1707
1698
  id: "DNSServer",
1708
1699
  title: "DNS Server",
1709
1700
  title_zh: "DNS 服务器"
@@ -1941,84 +1932,6 @@ const WireGuardEndpointOptions = z$1.object({
1941
1932
  title: "WireGuard Endpoint",
1942
1933
  title_zh: "WireGuard 端点"
1943
1934
  });
1944
- const LegacyWireGuardPeer = z$1.object({
1945
- public_key: z$1.string().optional().meta({
1946
- description: "WireGuard peer public key.",
1947
- description_zh: "WireGuard 对等公钥。"
1948
- }),
1949
- pre_shared_key: z$1.string().optional().meta({
1950
- description: "WireGuard pre-shared key.",
1951
- description_zh: "WireGuard 预共享密钥。"
1952
- }),
1953
- allowed_ips: z$1.union([z$1.string(), z$1.array(z$1.string())]).optional().meta({
1954
- description: "WireGuard allowed IPs.",
1955
- description_zh: "WireGuard 允许 IP。"
1956
- }),
1957
- reserved: Reserved.optional().meta({
1958
- description: "WireGuard reserved field bytes.",
1959
- description_zh: "WireGuard 保留字段字节。"
1960
- }),
1961
- ...ServerOptions.shape
1962
- });
1963
- const LegacyWireGuardOutboundOptions = z$1.object({
1964
- type: z$1.literal("wireguard"),
1965
- tag: z$1.string().optional(),
1966
- system_interface: z$1.boolean().optional().meta({
1967
- description: "Use system interface. Requires privilege and cannot conflict with existing system interfaces. Forced if gVisor is not included in the build.",
1968
- description_zh: "使用系统设备。需要特权且不能与已有系统接口冲突。如果未包含 gVisor 构建标签,则强制使用。"
1969
- }),
1970
- gso: z$1.boolean().optional().meta({
1971
- description: "Try to enable generic segmentation offload. Deprecated in sing-box 1.11.0; GSO will be automatically enabled when available. Only supported on Linux.",
1972
- description_zh: "尝试启用通用分段卸载。已在 sing-box 1.11.0 废弃;可用时将自动启用 GSO。仅在 Linux 上支持。",
1973
- deprecated: true
1974
- }),
1975
- interface_name: z$1.string().optional().meta({
1976
- description: "Custom interface name for system interface.",
1977
- description_zh: "为系统接口自定义设备名称。"
1978
- }),
1979
- local_address: z$1.union([z$1.string(), z$1.array(z$1.string())]).meta({
1980
- description: "List of IP (v4 or v6) address prefixes to be assigned to the interface. Required.",
1981
- description_zh: "接口的 IPv4/IPv6 地址或地址段的列表(必填)。"
1982
- }),
1983
- private_key: z$1.string().meta({
1984
- description: "WireGuard requires base64-encoded public and private keys. These can be generated using wg(8) or `sing-box generate wg-keypair`. Required.",
1985
- description_zh: "WireGuard 需要 base64 编码的公钥和私钥。可以使用 wg(8) 或 `sing-box generate wg-keypair` 生成。必填。"
1986
- }),
1987
- peers: z$1.array(LegacyWireGuardPeer).optional().meta({
1988
- description: "Multi-peer support. If enabled, `server`, `server_port`, `peer_public_key`, and `pre_shared_key` will be ignored.",
1989
- description_zh: "多对等支持。启用后将忽略 `server`、`server_port`、`peer_public_key` 和 `pre_shared_key`。"
1990
- }),
1991
- peer_public_key: z$1.string().meta({
1992
- description: "WireGuard peer public key. Required if multi-peer is disabled.",
1993
- description_zh: "WireGuard 对等公钥(未启用多对等支持时必填)。"
1994
- }),
1995
- pre_shared_key: z$1.string().optional().meta({
1996
- description: "WireGuard pre-shared key.",
1997
- description_zh: "WireGuard 预共享密钥。"
1998
- }),
1999
- reserved: Reserved.optional().meta({
2000
- description: "WireGuard reserved field bytes. `$outbound.reserved` will be used if empty.",
2001
- description_zh: "WireGuard 保留字段字节。置空时将使用 `$outbound.reserved`。"
2002
- }),
2003
- workers: z$1.number().int().optional().meta({
2004
- description: "WireGuard worker count. CPU count is used by default.",
2005
- description_zh: "WireGuard worker 数量。默认使用 CPU 数量。"
2006
- }),
2007
- mtu: z$1.number().int().optional().meta({
2008
- description: "WireGuard MTU. `1408` will be used if empty.",
2009
- description_zh: "WireGuard MTU。默认使用 1408。"
2010
- }),
2011
- network: Network.optional().meta({
2012
- description: "Enabled network. One of `tcp` `udp`. Both is enabled by default.",
2013
- description_zh: "启用的网络协议。`tcp` 或 `udp`。默认所有。"
2014
- }),
2015
- ...ServerOptions.shape,
2016
- ...DialerOptions.shape
2017
- }).meta({
2018
- id: "LegacyWireGuardOutboundOptions",
2019
- title: "Legacy WireGuard Outbound",
2020
- title_zh: "旧版 WireGuard 出站"
2021
- });
2022
1935
 
2023
1936
  //#endregion
2024
1937
  //#region src/schema/endpoint.ts
@@ -2152,6 +2065,31 @@ const ClashAPIOptions = z.object({
2152
2065
  access_control_allow_private_network: z.boolean().optional().meta({
2153
2066
  description: "Allow access from private network. To access the Clash API on a private network from a public website, `access_control_allow_private_network` must be enabled.",
2154
2067
  description_zh: "允许从私有网络访问。要从公共网站访问私有网络上的 Clash API,必须启用 `access_control_allow_private_network`。"
2068
+ }),
2069
+ store_mode: z.boolean().optional().meta({
2070
+ description: "Store Clash mode in cache file. Deprecated in sing-box 1.8.0 and migrated to the global cache file.",
2071
+ description_zh: "将 Clash 模式存储在缓存文件中。已在 sing-box 1.8.0 弃用并迁移到全局缓存文件。",
2072
+ deprecated: true
2073
+ }),
2074
+ store_selected: z.boolean().optional().meta({
2075
+ description: "Store selected outbound for the Selector outbound in cache file. Deprecated in sing-box 1.8.0 and migrated to the global cache file.",
2076
+ description_zh: "将 Selector 出站中选定的出站存储在缓存文件中。已在 sing-box 1.8.0 弃用并迁移到全局缓存文件。",
2077
+ deprecated: true
2078
+ }),
2079
+ store_fakeip: z.boolean().optional().meta({
2080
+ description: "Store fakeip in cache file. Deprecated in sing-box 1.8.0 and migrated to `cache_file.store_fakeip`.",
2081
+ description_zh: "将 fakeip 存储在缓存文件中。已在 sing-box 1.8.0 弃用并迁移到 `cache_file.store_fakeip`。",
2082
+ deprecated: true
2083
+ }),
2084
+ cache_file: z.string().optional().meta({
2085
+ description: "Cache file path. Deprecated in sing-box 1.8.0 and migrated to `cache_file.enabled` and `cache_file.path`.",
2086
+ description_zh: "缓存文件路径。已在 sing-box 1.8.0 弃用并迁移到 `cache_file.enabled` 和 `cache_file.path`。",
2087
+ deprecated: true
2088
+ }),
2089
+ cache_id: z.string().optional().meta({
2090
+ description: "Identifier in cache file. Deprecated in sing-box 1.8.0 and migrated to `cache_file.cache_id`.",
2091
+ description_zh: "缓存文件中的标识符。已在 sing-box 1.8.0 弃用并迁移到 `cache_file.cache_id`。",
2092
+ deprecated: true
2155
2093
  })
2156
2094
  }).meta({
2157
2095
  id: "ClashAPIOptions",
@@ -2317,16 +2255,6 @@ const DirectInboundOptions = z.object({
2317
2255
  const DirectOutboundOptions = z.object({
2318
2256
  type: z.literal("direct"),
2319
2257
  tag: z.string().optional(),
2320
- override_address: z.string().optional().meta({
2321
- description: "Override the connection destination address. Deprecated since sing-box 1.11.0 and will be removed in 1.13.0; see [Migration](/migration/#migrate-destination-override-fields-to-route-options).",
2322
- description_zh: "覆盖连接目标地址。自 sing-box 1.11.0 起已废弃,并将于 1.13.0 移除;请参阅 [迁移指南](/zh/migration/#migrate-destination-override-fields-to-route-options)。",
2323
- deprecated: true
2324
- }),
2325
- override_port: z.number().int().optional().meta({
2326
- description: "Override the connection destination port. Deprecated since sing-box 1.11.0 and will be removed in 1.13.0; see [Migration](/migration/#migrate-destination-override-fields-to-route-options).",
2327
- description_zh: "覆盖连接目标端口。自 sing-box 1.11.0 起已废弃,并将于 1.13.0 移除;请参阅 [迁移指南](/zh/migration/#migrate-destination-override-fields-to-route-options)。",
2328
- deprecated: true
2329
- }),
2330
2258
  ...DialerOptions.shape
2331
2259
  }).meta({
2332
2260
  id: "DirectOutboundOptions",
@@ -2726,6 +2654,10 @@ const NaiveInboundOptions = z.object({
2726
2654
  description: "Naive users. Required.",
2727
2655
  description_zh: "Naive 用户。必填。"
2728
2656
  }),
2657
+ quic_congestion_control: z.string().optional().meta({
2658
+ description: "QUIC congestion control algorithm.",
2659
+ description_zh: "QUIC 拥塞控制算法。"
2660
+ }),
2729
2661
  tls: InboundTLSOptions.optional().meta({
2730
2662
  description: "TLS configuration, see [TLS](/configuration/shared/tls/#inbound).",
2731
2663
  description_zh: "TLS 配置,参阅 [TLS](/zh/configuration/shared/tls/#inbound)。"
@@ -2736,6 +2668,56 @@ const NaiveInboundOptions = z.object({
2736
2668
  title: "Naive Inbound",
2737
2669
  title_zh: "Naive 入站"
2738
2670
  });
2671
+ const NaiveOutboundOptions = z.object({
2672
+ type: z.literal("naive"),
2673
+ tag: z.string().optional(),
2674
+ username: z.string().optional().meta({
2675
+ description: "Authentication username.",
2676
+ description_zh: "认证用户名。"
2677
+ }),
2678
+ password: z.string().optional().meta({
2679
+ description: "Authentication password.",
2680
+ description_zh: "认证密码。"
2681
+ }),
2682
+ insecure_concurrency: z.number().int().optional().meta({
2683
+ description: "Number of concurrent tunnel connections. Multiple connections make the tunneling easier to detect through traffic analysis.",
2684
+ description_zh: "并发隧道连接数。多个连接会使隧道更容易通过流量分析被检测到。"
2685
+ }),
2686
+ extra_headers: HttpHeader.optional().meta({
2687
+ description: "Extra headers to send in HTTP requests.",
2688
+ description_zh: "HTTP 请求中发送的额外标头。"
2689
+ }),
2690
+ stream_receive_window: z.string().optional().meta({
2691
+ description: "Stream receive window size.",
2692
+ description_zh: "流接收窗口大小。"
2693
+ }),
2694
+ udp_over_tcp: z.union([z.boolean(), UDPOverTCPOptions]).optional().meta({
2695
+ description: "UDP over TCP protocol settings. See [UDP Over TCP](/configuration/shared/udp-over-tcp/) for details.",
2696
+ description_zh: "UDP over TCP 协议设置。参阅 [UDP Over TCP](/zh/configuration/shared/udp-over-tcp/) 以获取详细信息。"
2697
+ }),
2698
+ quic: z.boolean().optional().meta({
2699
+ description: "Use QUIC instead of HTTP/2.",
2700
+ description_zh: "使用 QUIC 而非 HTTP/2。"
2701
+ }),
2702
+ quic_congestion_control: z.string().optional().meta({
2703
+ description: "QUIC congestion control algorithm.",
2704
+ description_zh: "QUIC 拥塞控制算法。"
2705
+ }),
2706
+ quic_session_receive_window: z.string().optional().meta({
2707
+ description: "QUIC session receive window size.",
2708
+ description_zh: "QUIC 会话接收窗口大小。"
2709
+ }),
2710
+ tls: OutboundTLSOptions.meta({
2711
+ description: "TLS configuration, see [TLS](/configuration/shared/tls/#outbound). Required.",
2712
+ description_zh: "TLS 配置,参阅 [TLS](/zh/configuration/shared/tls/#outbound)。必填。"
2713
+ }),
2714
+ ...ServerOptions.shape,
2715
+ ...DialerOptions.shape
2716
+ }).meta({
2717
+ id: "NaiveOutboundOptions",
2718
+ title: "Naive Outbound",
2719
+ title_zh: "Naive 出站"
2720
+ });
2739
2721
 
2740
2722
  //#endregion
2741
2723
  //#region src/schema/protocols/redirect.ts
@@ -3293,6 +3275,10 @@ const TunInboundOptions = z.object({
3293
3275
  description: "Exclude android packages in route. Android package rules are only supported on Android and require `auto_route`.",
3294
3276
  description_zh: "排除路由的 Android 应用包名。Android 应用规则仅在 Android 下被支持,并且需要 `auto_route`。"
3295
3277
  }),
3278
+ udp_timeout: z.union([z.string(), z.number()]).optional().meta({
3279
+ description: "UDP NAT expiration time. `5m` will be used by default.",
3280
+ description_zh: "UDP NAT 过期时间。默认使用 `5m`。"
3281
+ }),
3296
3282
  stack: z.enum([
3297
3283
  "system",
3298
3284
  "gvisor",
@@ -3304,48 +3290,7 @@ const TunInboundOptions = z.object({
3304
3290
  platform: TunPlatformOptions.optional().meta({
3305
3291
  description: "Platform-specific settings, provided by client applications.",
3306
3292
  description_zh: "平台特定的设置,由客户端应用提供。"
3307
- }),
3308
- gso: z.boolean().optional().meta({
3309
- description: "Enable generic segmentation offload.",
3310
- description_zh: "启用通用分段卸载。",
3311
- deprecated: true
3312
- }),
3313
- inet4_address: listableString.optional().meta({
3314
- description: "IPv4 prefix for the tun interface.",
3315
- description_zh: "tun 接口的 IPv4 前缀。",
3316
- deprecated: true
3317
- }),
3318
- inet6_address: listableString.optional().meta({
3319
- description: "IPv6 prefix for the tun interface.",
3320
- description_zh: "tun 接口的 IPv6 前缀。",
3321
- deprecated: true
3322
- }),
3323
- inet4_route_address: listableString.optional().meta({
3324
- description: "Use custom routes instead of default when `auto_route` is enabled.",
3325
- description_zh: "启用 `auto_route` 时使用自定义路由而不是默认路由。",
3326
- deprecated: true
3327
- }),
3328
- inet6_route_address: listableString.optional().meta({
3329
- description: "Use custom routes instead of default when `auto_route` is enabled.",
3330
- description_zh: "启用 `auto_route` 时使用自定义路由而不是默认路由。",
3331
- deprecated: true
3332
- }),
3333
- inet4_route_exclude_address: listableString.optional().meta({
3334
- description: "Exclude custom routes when `auto_route` is enabled.",
3335
- description_zh: "启用 `auto_route` 时排除自定义路由。",
3336
- deprecated: true
3337
- }),
3338
- inet6_route_exclude_address: listableString.optional().meta({
3339
- description: "Exclude custom routes when `auto_route` is enabled.",
3340
- description_zh: "启用 `auto_route` 时排除自定义路由。",
3341
- deprecated: true
3342
- }),
3343
- endpoint_independent_nat: z.boolean().optional().meta({
3344
- description: "Enable endpoint-independent NAT. This item is only available on the gvisor stack; other stacks are endpoint-independent NAT by default. Performance may degrade slightly, so it is not recommended to enable when it is not needed.",
3345
- description_zh: "启用独立于端点的 NAT。此项仅在 gvisor 栈上可用,其他栈默认启用独立于端点的 NAT。性能可能略有下降,因此不建议在不需要时启用。",
3346
- deprecated: true
3347
- }),
3348
- ...ListenOptions.shape
3293
+ })
3349
3294
  }).meta({
3350
3295
  id: "TunInboundOptions",
3351
3296
  title: "Tun Inbound",
@@ -3662,24 +3607,16 @@ const URLTestOutbound = z.object({
3662
3607
  });
3663
3608
 
3664
3609
  //#endregion
3665
- //#region src/schema/protocols/shadowsocksr.ts
3666
- const ShadowsocksROutboundOptions = z.object({
3667
- type: z.literal("shadowsocksr"),
3668
- tag: z.string().optional(),
3669
- method: z.string(),
3670
- password: z.string(),
3671
- obfs: z.string().optional(),
3672
- obfs_param: z.string().optional(),
3673
- protocol: z.string().optional(),
3674
- protocol_param: z.string().optional(),
3675
- network: Network.optional(),
3676
- ...ServerOptions.shape,
3677
- ...DialerOptions.shape
3610
+ //#region src/schema/protocols/block.ts
3611
+ const BlockOutboundOptions = z.object({
3612
+ type: z.literal("block"),
3613
+ tag: z.string().optional()
3678
3614
  }).meta({
3679
- id: "ShadowsocksROutboundOptions",
3680
- title: "ShadowsocksR Outbound",
3681
- title_zh: "ShadowsocksR 出站",
3682
- deprecated: true
3615
+ id: "BlockOutboundOptions",
3616
+ title: "Block Outbound",
3617
+ title_zh: "Block 出站",
3618
+ description: "Block outbound closes all incoming requests.",
3619
+ description_zh: "Block 出站关闭所有传入请求。"
3683
3620
  });
3684
3621
 
3685
3622
  //#endregion
@@ -3764,14 +3701,14 @@ const Outbound = z.discriminatedUnion("type", [
3764
3701
  ShadowsocksOutboundOptions,
3765
3702
  VMessOutboundOptions,
3766
3703
  TrojanOutboundOptions,
3767
- LegacyWireGuardOutboundOptions,
3704
+ BlockOutboundOptions,
3768
3705
  HysteriaOutboundOptions,
3769
3706
  ShadowTLSOutboundOptions,
3770
3707
  AnyTLSOutboundOptions,
3771
3708
  Hysteria2OutboundOptions,
3772
3709
  TUICOutboundOptions,
3773
3710
  VLESSOutboundOptions,
3774
- ShadowsocksROutboundOptions,
3711
+ NaiveOutboundOptions,
3775
3712
  SSHOutboundOptions,
3776
3713
  TorOutboundOptions,
3777
3714
  SelectorOutbound,
@@ -3804,14 +3741,6 @@ const RuleActionRouteOptions = z.object({
3804
3741
  description: "See Dial Fields (/configuration/shared/dial/#network_strategy) for details. Only take effect if outbound is direct without `outbound.bind_interface`, `outbound.inet4_bind_address` and `outbound.inet6_bind_address` set.",
3805
3742
  description_zh: "详情参阅 [拨号字段](/configuration/shared/dial/#network_strategy)。仅当出站为 direct 且 `outbound.bind_interface`、`outbound.inet4_bind_address` 与 `outbound.inet6_bind_address` 均未设置时生效。"
3806
3743
  }),
3807
- network_type: listable(NetworkType).optional().meta({
3808
- description: "See Dial Fields (/configuration/shared/dial/#network_type) for details.",
3809
- description_zh: "详情参阅 [拨号字段](/configuration/shared/dial/#network_type)。"
3810
- }),
3811
- fallback_network_type: listable(NetworkType).optional().meta({
3812
- description: "See Dial Fields (/configuration/shared/dial/#fallback_network_type) for details.",
3813
- description_zh: "详情参阅 [拨号字段](/configuration/shared/dial/#fallback_network_type)。"
3814
- }),
3815
3744
  fallback_delay: z.string().optional().meta({
3816
3745
  description: "See Dial Fields (/configuration/shared/dial/#fallback_delay) for details.",
3817
3746
  description_zh: "详情参阅 [拨号字段](/configuration/shared/dial/#fallback_delay)。"
@@ -3916,14 +3845,33 @@ const RuleActionRoute = z.object({
3916
3845
  title: "Rule Action Route",
3917
3846
  title_zh: "规则动作路由"
3918
3847
  });
3848
+ const RuleActionBypass = z.object({
3849
+ action: z.literal("bypass").meta({
3850
+ description: "Action type.",
3851
+ description_zh: "动作类型。"
3852
+ }),
3853
+ outbound: z.string().optional().meta({
3854
+ description: "Tag of target outbound.",
3855
+ description_zh: "目标出站的标签。"
3856
+ }),
3857
+ ...RuleActionRouteOptions.shape
3858
+ }).meta({
3859
+ id: "RuleActionBypass",
3860
+ title: "Rule Action Bypass",
3861
+ title_zh: "规则动作绕过"
3862
+ });
3919
3863
  const RuleActionReject = z.object({
3920
3864
  action: z.literal("reject").meta({
3921
3865
  description: "Action type.",
3922
3866
  description_zh: "动作类型。"
3923
3867
  }),
3924
- method: z.enum(["default", "drop"]).optional().meta({
3925
- description: "`default`: Reply with TCP RST for TCP connections, and ICMP port unreachable for UDP packets. `drop`: Drop packets.",
3926
- description_zh: "`default`: 对于 TCP 连接回复 RST,对于 UDP 包回复 ICMP 端口不可达。`drop`: 丢弃数据包。"
3868
+ method: z.enum([
3869
+ "default",
3870
+ "drop",
3871
+ "reply"
3872
+ ]).optional().meta({
3873
+ description: "`default`: Reply with TCP RST for TCP connections, ICMP port unreachable for UDP packets, and ICMP host unreachable for ICMP echo requests. `drop`: Drop packets. `reply`: Reply with ICMP echo reply for ICMP echo requests.",
3874
+ description_zh: "`default`: 对 TCP 连接回复 RST,对 UDP 包回复 ICMP 端口不可达,并对 ICMP 回显请求回复 ICMP 主机不可达。`drop`: 丢弃数据包。`reply`: 对 ICMP 回显请求回复 ICMP 回显响应。"
3927
3875
  }),
3928
3876
  no_drop: z.boolean().optional().meta({
3929
3877
  description: "If not enabled, `method` will be temporarily overwritten to `drop` after 50 triggers in 30s.",
@@ -3934,12 +3882,13 @@ const RuleActionReject = z.object({
3934
3882
  title: "Rule Action Reject",
3935
3883
  title_zh: "规则动作拒绝"
3936
3884
  });
3885
+ const DirectActionDialerOptions = DialerOptions.omit({ detour: true });
3937
3886
  const RuleActionDirect = z.object({
3938
3887
  action: z.literal("direct").meta({
3939
3888
  description: "Action type.",
3940
3889
  description_zh: "动作类型。"
3941
3890
  }),
3942
- ...DialerOptions.shape
3891
+ ...DirectActionDialerOptions.shape
3943
3892
  }).meta({
3944
3893
  id: "RuleActionDirect",
3945
3894
  title: "Rule Action Direct",
@@ -4163,6 +4112,7 @@ const BaseRouteRule = z.object({
4163
4112
  const DefaultRouteRule = z.union([
4164
4113
  BaseRouteRule.extend(RuleActionRouteByDefault.shape),
4165
4114
  BaseRouteRule.extend(RuleActionRoute.shape),
4115
+ BaseRouteRule.extend(RuleActionBypass.shape),
4166
4116
  BaseRouteRule.extend(RuleActionReject.shape),
4167
4117
  BaseRouteRule.extend(RuleActionHijackDNS.shape),
4168
4118
  BaseRouteRule.extend(RuleActionRouteOptionsWithAction.shape),
@@ -4170,7 +4120,7 @@ const DefaultRouteRule = z.union([
4170
4120
  BaseRouteRule.extend(RuleActionResolve.shape),
4171
4121
  BaseRouteRule.extend(RuleActionDirect.shape)
4172
4122
  ]);
4173
- const LogicalRouteRule = z.object({
4123
+ const BaseLogicalRouteRule = z.object({
4174
4124
  type: z.literal("logical").meta({
4175
4125
  description: "Rule type.",
4176
4126
  description_zh: "规则类型。"
@@ -4189,7 +4139,18 @@ const LogicalRouteRule = z.object({
4189
4139
  description: "Invert match result.",
4190
4140
  description_zh: "反选匹配结果。"
4191
4141
  })
4192
- }).meta({
4142
+ });
4143
+ const LogicalRouteRule = z.union([
4144
+ BaseLogicalRouteRule.extend(RuleActionRouteByDefault.shape),
4145
+ BaseLogicalRouteRule.extend(RuleActionRoute.shape),
4146
+ BaseLogicalRouteRule.extend(RuleActionBypass.shape),
4147
+ BaseLogicalRouteRule.extend(RuleActionReject.shape),
4148
+ BaseLogicalRouteRule.extend(RuleActionHijackDNS.shape),
4149
+ BaseLogicalRouteRule.extend(RuleActionRouteOptionsWithAction.shape),
4150
+ BaseLogicalRouteRule.extend(RuleActionSniff.shape),
4151
+ BaseLogicalRouteRule.extend(RuleActionResolve.shape),
4152
+ BaseLogicalRouteRule.extend(RuleActionDirect.shape)
4153
+ ]).meta({
4193
4154
  id: "LogicalRouteRule",
4194
4155
  title: "Logical Route Rule",
4195
4156
  title_zh: "逻辑路由规则"
@@ -4339,7 +4300,7 @@ const HeadlessRule = z.union([DefaultHeadlessRule, LogicalHeadlessRule]).meta({
4339
4300
  title_zh: "无头规则"
4340
4301
  });
4341
4302
  const InlineRuleSetOptions = z.object({
4342
- type: z.literal("inline").meta({
4303
+ type: z.literal("inline").optional().meta({
4343
4304
  description: "Rule set type.",
4344
4305
  description_zh: "规则集类型。"
4345
4306
  }),
@@ -4408,7 +4369,7 @@ const RemoteRuleSetOptions = z.object({
4408
4369
  title: "Remote Rule Set Options",
4409
4370
  title_zh: "远程规则集选项"
4410
4371
  });
4411
- const RuleSet = z.discriminatedUnion("type", [
4372
+ const RuleSet = z.union([
4412
4373
  InlineRuleSetOptions,
4413
4374
  LocalRuleSetOptions,
4414
4375
  RemoteRuleSetOptions
@@ -4561,7 +4522,11 @@ const CCMServiceOptions = z.object({
4561
4522
  description: "TLS configuration, see [TLS](/configuration/shared/tls/#inbound).",
4562
4523
  description_zh: "TLS 配置,参阅 [TLS](/zh/configuration/shared/tls/#inbound)。"
4563
4524
  }),
4564
- ...ListenOptions.shape
4525
+ ...ListenOptions.shape,
4526
+ detour: z.string().optional().meta({
4527
+ description: "Outbound tag for connecting to the Claude API.",
4528
+ description_zh: "用于连接到 Claude API 的出站标签。"
4529
+ })
4565
4530
  }).meta({
4566
4531
  id: "CCMServiceOptions",
4567
4532
  title: "CCM",
@@ -4620,7 +4585,7 @@ const DERPServiceOptions = z.object({
4620
4585
  description: "TLS configuration, see [TLS](/configuration/shared/tls/#inbound).",
4621
4586
  description_zh: "TLS 配置,参阅 [TLS](/zh/configuration/shared/tls/#inbound)。"
4622
4587
  }),
4623
- config_path: z.string().meta({
4588
+ config_path: z.string().optional().meta({
4624
4589
  description: "Derper configuration file path. Example: `derper.key`.",
4625
4590
  description_zh: "Derper 配置文件路径。示例:`derper.key`。"
4626
4591
  }),
@@ -4699,7 +4664,11 @@ const OCMServiceOptions = z.object({
4699
4664
  description: "TLS configuration, see [TLS](/configuration/shared/tls/#inbound).",
4700
4665
  description_zh: "TLS 配置,参阅 [TLS](/zh/configuration/shared/tls/#inbound)。"
4701
4666
  }),
4702
- ...ListenOptions.shape
4667
+ ...ListenOptions.shape,
4668
+ detour: z.string().optional().meta({
4669
+ description: "Outbound tag for connecting to the OpenAI API.",
4670
+ description_zh: "用于连接到 OpenAI API 的出站标签。"
4671
+ })
4703
4672
  }).meta({
4704
4673
  id: "OCMServiceOptions",
4705
4674
  title: "OCM",
@@ -4826,12 +4795,12 @@ const Configuration = z.object({
4826
4795
  experimental: ExperimentalOptions.optional()
4827
4796
  }).meta({
4828
4797
  id: "Configuration",
4829
- title: "Sing-box v1.13.0 Configuration",
4830
- title_zh: "Sing-box v1.13.0 配置文件",
4831
- description: "Sing-box v1.13.0 configuration file schema. Sing-box uses JSON for configuration files with log, dns, ntp, certificate, endpoints, inbounds, outbounds, route, services, and experimental sections.",
4832
- description_zh: "Sing-box v1.13.0 配置文件定义。sing-box 使用 JSON 作为配置文件格式,包含 log、dns、ntp、certificate、endpoints、inbounds、outbounds、route、services 与 experimental 字段。",
4833
- version: "1.13.0"
4798
+ title: "Sing-box v1.13.13 Configuration",
4799
+ title_zh: "Sing-box v1.13.13 配置文件",
4800
+ description: "Sing-box v1.13.13 configuration file schema. Sing-box uses JSON for configuration files with log, dns, ntp, certificate, endpoints, inbounds, outbounds, route, services, and experimental sections.",
4801
+ description_zh: "Sing-box v1.13.13 配置文件定义。sing-box 使用 JSON 作为配置文件格式,包含 log、dns、ntp、certificate、endpoints、inbounds、outbounds、route、services 与 experimental 字段。",
4802
+ version: "1.13.13"
4834
4803
  });
4835
4804
 
4836
4805
  //#endregion
4837
- export { AnyTLSInboundOptions, AnyTLSOutboundOptions, AnyTLSUser, CertificateOptions, Configuration, DHCPDNSServerOptions, DNSClientOptions, DNSOptions, DNSRule, DNSServer, DebugOptions, DialerOptions, DirectInboundOptions, DirectOutboundOptions, DomainResolverOptions, DomainStrategy, Endpoint, ExperimentalOptions, FakeIPDNSServerOptions, FwMark, GeoIPOptions, GeositeOptions, HTTP3DNSServerOptions, HTTPInboundOptions, HTTPOutboundOptions, HTTPProxyOptions, HTTPSDNSServerOptions, HeadlessRule, HostsDNSServerOptions, HttpHeader, Hysteria2InboundOptions, Hysteria2Masquerade, Hysteria2Obfs, Hysteria2OutboundOptions, Hysteria2User, HysteriaInboundOptions, HysteriaOutboundOptions, HysteriaUser, Inbound, InboundMultiplexOptions, InboundOptions, InboundTLSOptions, IpVersion, LegacyDNSFakeIPOptions, LegacyDNSServerOptions, LegacyWireGuardOutboundOptions, LegacyWireGuardPeer, ListenOptions, LocalDNSServerOptions, LogOptions, MixedInboundOptions, NTPOptions, NaiveInboundOptions, Network, NetworkStrategy, NetworkType, Outbound, OutboundMultiplexOptions, OutboundTLSOptions, QUICDNSServerOptions, RedirectInboundOptions, ResolvedDNSServerOptions, RouteOptions, RouteRule, RuleSet, SSHOutboundOptions, SelectorOutbound, ServerOptions, Service, ShadowTLSInboundOptions, ShadowTLSOutboundOptions, ShadowsocksDestination, ShadowsocksInboundOptions, ShadowsocksOutboundOptions, ShadowsocksROutboundOptions, ShadowsocksUser, SocksInboundOptions, SocksOutboundOptions, TCPDNSServerOptions, TLSDNSServerOptions, TProxyInboundOptions, TUICInboundOptions, TUICOutboundOptions, TUICUser, Tag, TailscaleDNSServerOptions, TailscaleEndpointOptions, TorOutboundOptions, TrojanInboundOptions, TrojanOutboundOptions, TrojanUser, TunInboundOptions, TunPlatformOptions, UDPDNSServerOptions, UDPOverTCPOptions, URLTestOutbound, V2RayTransportOptions, VLESSInboundOptions, VLESSOutboundOptions, VLESSUser, VMessInboundOptions, VMessOutboundOptions, VMessUser, WireGuardEndpointOptions, WireGuardPeer };
4806
+ export { AnyTLSInboundOptions, AnyTLSOutboundOptions, AnyTLSUser, BlockOutboundOptions, CertificateOptions, Configuration, DHCPDNSServerOptions, DNSClientOptions, DNSOptions, DNSRule, DNSServer, DebugOptions, DialerOptions, DirectInboundOptions, DirectOutboundOptions, DomainResolverOptions, DomainStrategy, Endpoint, ExperimentalOptions, FakeIPDNSServerOptions, FwMark, GeoIPOptions, GeositeOptions, HTTP3DNSServerOptions, HTTPInboundOptions, HTTPOutboundOptions, HTTPProxyOptions, HTTPSDNSServerOptions, HeadlessRule, HostsDNSServerOptions, HttpHeader, Hysteria2InboundOptions, Hysteria2Masquerade, Hysteria2Obfs, Hysteria2OutboundOptions, Hysteria2User, HysteriaInboundOptions, HysteriaOutboundOptions, HysteriaUser, Inbound, InboundMultiplexOptions, InboundTLSOptions, IpVersion, LegacyDNSFakeIPOptions, LegacyDNSServerOptions, ListenOptions, LocalDNSServerOptions, LogOptions, MixedInboundOptions, NTPOptions, NaiveInboundOptions, NaiveOutboundOptions, Network, NetworkStrategy, NetworkType, Outbound, OutboundMultiplexOptions, OutboundTLSOptions, QUICDNSServerOptions, RedirectInboundOptions, ResolvedDNSServerOptions, RouteOptions, RouteRule, RuleSet, SSHOutboundOptions, SelectorOutbound, ServerOptions, Service, ShadowTLSInboundOptions, ShadowTLSOutboundOptions, ShadowsocksDestination, ShadowsocksInboundOptions, ShadowsocksOutboundOptions, ShadowsocksUser, SocksInboundOptions, SocksOutboundOptions, TCPDNSServerOptions, TLSDNSServerOptions, TProxyInboundOptions, TUICInboundOptions, TUICOutboundOptions, TUICUser, Tag, TailscaleDNSServerOptions, TailscaleEndpointOptions, TorOutboundOptions, TrojanInboundOptions, TrojanOutboundOptions, TrojanUser, TunInboundOptions, TunPlatformOptions, UDPDNSServerOptions, UDPOverTCPOptions, URLTestOutbound, V2RayTransportOptions, VLESSInboundOptions, VLESSOutboundOptions, VLESSUser, VMessInboundOptions, VMessOutboundOptions, VMessUser, WireGuardEndpointOptions, WireGuardPeer };