@gozargah/xray-schema 0.0.4 → 0.0.5

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.d.ts CHANGED
@@ -1387,7 +1387,7 @@ declare const xraySchema: z.ZodObject<{
1387
1387
  }>>>;
1388
1388
  }, z.core.$strip>>;
1389
1389
  protocol: z.ZodLiteral<"vless">;
1390
- settings: z.ZodObject<{
1390
+ settings: z.ZodUnion<[z.ZodObject<{
1391
1391
  address: z.ZodString;
1392
1392
  port: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>;
1393
1393
  id: z.ZodString;
@@ -1414,7 +1414,22 @@ declare const xraySchema: z.ZodObject<{
1414
1414
  routeOnly: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
1415
1415
  }, z.core.$strip>>;
1416
1416
  }, z.core.$strip>>;
1417
- }, z.core.$strip>;
1417
+ }, z.core.$strip>, z.ZodObject<{
1418
+ vnext: z.ZodArray<z.ZodObject<{
1419
+ address: z.ZodString;
1420
+ port: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>;
1421
+ users: z.ZodArray<z.ZodObject<{
1422
+ id: z.ZodString;
1423
+ encryption: z.ZodDefault<z.ZodString>;
1424
+ flow: z.ZodOptional<z.ZodEnum<{
1425
+ "": "";
1426
+ "xtls-rprx-vision": "xtls-rprx-vision";
1427
+ "xtls-rprx-vision-udp443": "xtls-rprx-vision-udp443";
1428
+ }>>;
1429
+ level: z.ZodOptional<z.ZodDefault<z.ZodInt>>;
1430
+ }, z.core.$strip>>;
1431
+ }, z.core.$strip>>;
1432
+ }, z.core.$strip>]>;
1418
1433
  }, z.core.$strip>, z.ZodObject<{
1419
1434
  sendThrough: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodEnum<{
1420
1435
  origin: "origin";
package/dist/index.js CHANGED
@@ -1188,11 +1188,26 @@ const trojan = outboundSchemaBase.extend({
1188
1188
  });
1189
1189
  //#endregion
1190
1190
  //#region src/outbounds/vless/vless.ts
1191
- const vless = outboundSchemaBase.extend({
1192
- protocol: z.literal("vless"),
1193
- settings: z.object({
1194
- address: z.string(),
1195
- port: portLikeSchema,
1191
+ const vlessSettings = z.object({
1192
+ address: z.string(),
1193
+ port: portLikeSchema,
1194
+ id: z.string(),
1195
+ encryption: z.string().default("none"),
1196
+ flow: z.enum([
1197
+ "",
1198
+ "xtls-rprx-vision",
1199
+ "xtls-rprx-vision-udp443"
1200
+ ]).optional(),
1201
+ level: z.int().default(0).optional(),
1202
+ reverse: z.object({
1203
+ tag: z.string(),
1204
+ sniffing: sniffingSchema.optional()
1205
+ }).optional()
1206
+ });
1207
+ const vnext = z.object({ vnext: z.array(z.object({
1208
+ address: z.string(),
1209
+ port: portLikeSchema,
1210
+ users: z.array(z.object({
1196
1211
  id: z.string(),
1197
1212
  encryption: z.string().default("none"),
1198
1213
  flow: z.enum([
@@ -1200,12 +1215,12 @@ const vless = outboundSchemaBase.extend({
1200
1215
  "xtls-rprx-vision",
1201
1216
  "xtls-rprx-vision-udp443"
1202
1217
  ]).optional(),
1203
- level: z.int().default(0).optional(),
1204
- reverse: z.object({
1205
- tag: z.string(),
1206
- sniffing: sniffingSchema.optional()
1207
- }).optional()
1208
- })
1218
+ level: z.int().default(0).optional()
1219
+ }))
1220
+ })) });
1221
+ const vless = outboundSchemaBase.extend({
1222
+ protocol: z.literal("vless"),
1223
+ settings: vlessSettings.or(vnext)
1209
1224
  });
1210
1225
  //#endregion
1211
1226
  //#region src/outbounds/vmess/vmess.ts
package/dist/schema.json CHANGED
@@ -2324,62 +2324,129 @@
2324
2324
  "const": "vless"
2325
2325
  },
2326
2326
  "settings": {
2327
- "type": "object",
2328
- "properties": {
2329
- "address": {
2330
- "type": "string"
2331
- },
2332
- "port": {
2333
- "$ref": "#/definitions/__schema7"
2334
- },
2335
- "id": {
2336
- "type": "string"
2337
- },
2338
- "encryption": {
2339
- "default": "none",
2340
- "type": "string"
2341
- },
2342
- "flow": {
2343
- "type": "string",
2344
- "enum": [
2345
- "",
2346
- "xtls-rprx-vision",
2347
- "xtls-rprx-vision-udp443"
2348
- ]
2349
- },
2350
- "level": {
2351
- "default": 0,
2352
- "type": "integer",
2353
- "minimum": -9007199254740991,
2354
- "maximum": 9007199254740991
2355
- },
2356
- "reverse": {
2327
+ "anyOf": [
2328
+ {
2357
2329
  "type": "object",
2358
2330
  "properties": {
2359
- "tag": {
2331
+ "address": {
2360
2332
  "type": "string"
2361
2333
  },
2362
- "sniffing": {
2363
- "allOf": [
2364
- {
2365
- "$ref": "#/definitions/__schema57"
2366
- }
2334
+ "port": {
2335
+ "$ref": "#/definitions/__schema7"
2336
+ },
2337
+ "id": {
2338
+ "type": "string"
2339
+ },
2340
+ "encryption": {
2341
+ "default": "none",
2342
+ "type": "string"
2343
+ },
2344
+ "flow": {
2345
+ "type": "string",
2346
+ "enum": [
2347
+ "",
2348
+ "xtls-rprx-vision",
2349
+ "xtls-rprx-vision-udp443"
2367
2350
  ]
2351
+ },
2352
+ "level": {
2353
+ "default": 0,
2354
+ "type": "integer",
2355
+ "minimum": -9007199254740991,
2356
+ "maximum": 9007199254740991
2357
+ },
2358
+ "reverse": {
2359
+ "type": "object",
2360
+ "properties": {
2361
+ "tag": {
2362
+ "type": "string"
2363
+ },
2364
+ "sniffing": {
2365
+ "allOf": [
2366
+ {
2367
+ "$ref": "#/definitions/__schema57"
2368
+ }
2369
+ ]
2370
+ }
2371
+ },
2372
+ "required": [
2373
+ "tag"
2374
+ ],
2375
+ "additionalProperties": false
2376
+ }
2377
+ },
2378
+ "required": [
2379
+ "address",
2380
+ "port",
2381
+ "id",
2382
+ "encryption"
2383
+ ],
2384
+ "additionalProperties": false
2385
+ },
2386
+ {
2387
+ "type": "object",
2388
+ "properties": {
2389
+ "vnext": {
2390
+ "type": "array",
2391
+ "items": {
2392
+ "type": "object",
2393
+ "properties": {
2394
+ "address": {
2395
+ "type": "string"
2396
+ },
2397
+ "port": {
2398
+ "$ref": "#/definitions/__schema7"
2399
+ },
2400
+ "users": {
2401
+ "type": "array",
2402
+ "items": {
2403
+ "type": "object",
2404
+ "properties": {
2405
+ "id": {
2406
+ "type": "string"
2407
+ },
2408
+ "encryption": {
2409
+ "default": "none",
2410
+ "type": "string"
2411
+ },
2412
+ "flow": {
2413
+ "type": "string",
2414
+ "enum": [
2415
+ "",
2416
+ "xtls-rprx-vision",
2417
+ "xtls-rprx-vision-udp443"
2418
+ ]
2419
+ },
2420
+ "level": {
2421
+ "default": 0,
2422
+ "type": "integer",
2423
+ "minimum": -9007199254740991,
2424
+ "maximum": 9007199254740991
2425
+ }
2426
+ },
2427
+ "required": [
2428
+ "id",
2429
+ "encryption"
2430
+ ],
2431
+ "additionalProperties": false
2432
+ }
2433
+ }
2434
+ },
2435
+ "required": [
2436
+ "address",
2437
+ "port",
2438
+ "users"
2439
+ ],
2440
+ "additionalProperties": false
2441
+ }
2368
2442
  }
2369
2443
  },
2370
2444
  "required": [
2371
- "tag"
2445
+ "vnext"
2372
2446
  ],
2373
2447
  "additionalProperties": false
2374
2448
  }
2375
- },
2376
- "required": [
2377
- "address",
2378
- "port",
2379
- "id",
2380
- "encryption"
2381
- ],
2382
- "additionalProperties": false
2449
+ ]
2383
2450
  }
2384
2451
  },
2385
2452
  "required": [
@@ -1387,7 +1387,7 @@ declare const xraySchema: z.ZodObject<{
1387
1387
  }>>>;
1388
1388
  }, z.core.$strip>>;
1389
1389
  protocol: z.ZodLiteral<"vless">;
1390
- settings: z.ZodObject<{
1390
+ settings: z.ZodUnion<[z.ZodObject<{
1391
1391
  address: z.ZodString;
1392
1392
  port: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>;
1393
1393
  id: z.ZodString;
@@ -1414,7 +1414,22 @@ declare const xraySchema: z.ZodObject<{
1414
1414
  routeOnly: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
1415
1415
  }, z.core.$strip>>;
1416
1416
  }, z.core.$strip>>;
1417
- }, z.core.$strip>;
1417
+ }, z.core.$strip>, z.ZodObject<{
1418
+ vnext: z.ZodArray<z.ZodObject<{
1419
+ address: z.ZodString;
1420
+ port: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodString]>;
1421
+ users: z.ZodArray<z.ZodObject<{
1422
+ id: z.ZodString;
1423
+ encryption: z.ZodDefault<z.ZodString>;
1424
+ flow: z.ZodOptional<z.ZodEnum<{
1425
+ "": "";
1426
+ "xtls-rprx-vision": "xtls-rprx-vision";
1427
+ "xtls-rprx-vision-udp443": "xtls-rprx-vision-udp443";
1428
+ }>>;
1429
+ level: z.ZodOptional<z.ZodDefault<z.ZodInt>>;
1430
+ }, z.core.$strip>>;
1431
+ }, z.core.$strip>>;
1432
+ }, z.core.$strip>]>;
1418
1433
  }, z.core.$strip>, z.ZodObject<{
1419
1434
  sendThrough: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodEnum<{
1420
1435
  origin: "origin";
@@ -2256,26 +2256,65 @@ const trojan = outboundSchemaBase.extend({
2256
2256
  settings: trojanServerSettings.or(z.object({ servers: z.array(trojanServerSettings).meta({ markdownDescription: trojanServers_default }) })).meta({ markdownDescription: trojanSettings_default })
2257
2257
  }).meta({ markdownDescription: trojan_default });
2258
2258
  //#endregion
2259
+ //#region src/outbounds/vless/vless.md?raw
2260
+ var vless_default = "VLESS is a stateless lightweight transport protocol. It consists of inbound and outbound parts and can serve as a bridge between the Xray client and server.\n\nUnlike [VMess](https://xtls.github.io/en/config/outbounds/vmess.html), VLESS does not depend on system time. The authentication method is also UUID.\n\n[Documentation ↗](https://xtls.github.io/en/config/outbounds/vless.html)\n";
2261
+ //#endregion
2262
+ //#region src/outbounds/vless/vlessSettings.md?raw
2263
+ var vlessSettings_default = "`OutboundConfigurationObject` corresponds to the `settings` item in [`OutboundObject`](https://xtls.github.io/en/config/outbound.html).\n";
2264
+ //#endregion
2265
+ //#region src/outbounds/vless/vlessAddress.md?raw
2266
+ var vlessAddress_default = "Server address, points to the server. Supports domain names, IPv4, and IPv6.\n";
2267
+ //#endregion
2268
+ //#region src/outbounds/vless/vlessPort.md?raw
2269
+ var vlessPort_default = "Server port, usually the same as the port the server is listening on.\n";
2270
+ //#endregion
2271
+ //#region src/outbounds/vless/vlessId.md?raw
2272
+ var vlessId_default = "User ID for VLESS. It can be any string less than 30 bytes, or a valid UUID. A custom string and its mapped UUID are equivalent.\n\nThe mapping standard is described in [VLESS UUID Mapping Standard: Mapping Custom Strings to UUIDv5](https://github.com/XTLS/Xray-core/issues/158).\n\nYou can use the command `xray uuid -i \"custom string\"` to generate the UUID mapped from a custom string, or use the command `xray uuid` to generate a random UUID.\n";
2273
+ //#endregion
2274
+ //#region src/outbounds/vless/vlessEncryption.md?raw
2275
+ var vlessEncryption_default = "[VLESS Encryption](https://github.com/XTLS/Xray-core/pull/5067) settings. Cannot be left empty; to disable, explicitly set to `\"none\"`.\n\nIt is recommended for most users to use the `xray vlessenc` command to automatically generate this field to avoid configuration mistakes. The detailed configuration below is recommended only for advanced users.\n\nIts format is a detailed configuration string of fields connected by `.`. For example: `mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U`. This document will refer to the separate parts separated by dots as \"blocks\".\n\n- **The 1st block** is the handshake method. Currently, there is only `mlkem768x25519plus`. Requires consistency between server and client.\n- **The 2nd block** is the encryption method. Options are `native`/`xorpub`/`random`, corresponding to: raw format packet / raw format + obfuscated public key part / fully random numbers (similar to VMESS/Shadowsocks). Requires consistency between server and client.\n- **The 3rd block** is session resumption. Choosing `0rtt` will follow the server settings to attempt to use previously generated tickets to skip the handshake for fast connection (can be manually disabled by the server). Choosing `1rtt` will force a 1-RTT handshake process. The meaning here differs from the server setting; see VLESS Inbound `decryption` settings for details.\n\nFollowing blocks are **padding**. After the connection is established, the client sends some garbage data to obfuscate length characteristics. It does not need to be the same as the server (the corresponding part in the inbound is the padding sent from the server to the client). It is a variable-length part with the format `padding.delay.padding` + `(.delay.padding)` x n (multiple padding blocks can be inserted, requiring a delay block between two padding blocks).\n\n- `padding` format is `probability-min-max`. E.g., `100-111-1111` means 100% probability to send a padding of length 111~1111.\n- `delay` format is also `probability-min-max`. E.g., `75-0-111` means 75% probability to wait 0~111 milliseconds.\n\nThe first padding block has special requirements: probability must be 100% and minimum length greater than 0. If no padding exists, the core automatically uses `100-111-1111.75-0-111.50-0-3333` as the padding setting.\n\n**The last block** will be recognized by the core as the parameter used to authenticate the server. It can be generated by `./xray x25519` (using the Password part) or `./xray mlkem768` (using the Client part). It must correspond to the server. `mlkem768` belongs to post-quantum algorithms, preventing (future) client parameter leaks from allowing quantum computers to crack the private key and impersonate the server. This parameter is only used for verification; the handshake process is post-quantum secure regardless, and existing encrypted data cannot be decrypted by future quantum computers.\n";
2276
+ //#endregion
2277
+ //#region src/outbounds/vless/vlessFlow.md?raw
2278
+ var vlessFlow_default = "Flow control mode, used to select the XTLS algorithm.\n\nCurrently, the following flow control modes are available in the outbound protocol:\n\n- **No `flow` or empty string**: Use standard TLS proxy.\n- **`xtls-rprx-vision`**: Use XTLS, including inner handshake random padding. Will intercept UDP traffic targeting port 443 (QUIC) to force browsers to use standard HTTPS, increasing traffic that can be Spliced.\n- **`xtls-rprx-vision-udp443`**: Same as `xtls-rprx-vision`, but does not intercept UDP 443. Used when a program forces the use of QUIC and would fail to work if intercepted.\n\nXTLS is available only in the following combinations:\n\n- **TCP+TLS/REALITY**: In this case, if transmitting TLS 1.3, the core will attempt to Splice encrypted data at the bottom layer. If successful, it saves all core IO overhead.\n- **VLESS Encryption**: No underlying transport restrictions. If the underlying transport is not TCP, it only attempts to penetrate Encryption, saving Encryption overhead. If it is TCP, it will still attempt to perform Splice.\n\n### TIP\n\nSplice is a function provided by the Linux Kernel. The system kernel forwards TCP directly, no longer passing through Xray's memory, greatly reducing data copying and CPU context switching.\n\nWhen using Vision mode, Splice is automatically enabled if the following conditions are met:\n\n- Linux environment.\n- Inbound protocol is a pure TCP connection like `Dokodemo door`, `Socks`, `HTTP`, or other inbound protocols using XTLS.\n- Outbound protocol is VLESS + XTLS.\n\nWhen using Splice, the network speed display will lag and will only be counted after the connection is disconnected because the core cannot know the traffic situation while the kernel takes over the connection.\n";
2279
+ //#endregion
2280
+ //#region src/outbounds/vless/vlessLevel.md?raw
2281
+ var vlessLevel_default = "User level. The connection will use the [Local Policy](https://xtls.github.io/en/config/policy.html#levelpolicyobject) corresponding to this user level.\n\nThe value of `level` corresponds to the value of `level` in [policy](https://xtls.github.io/en/config/policy.html#policyobject). If not specified, it defaults to 0.\n";
2282
+ //#endregion
2259
2283
  //#region src/outbounds/vless/vless.ts
2260
- const vless = outboundSchemaBase.extend({
2261
- protocol: z.literal("vless"),
2262
- settings: z.object({
2263
- address: z.string().meta({ markdownDescription: "Server address, points to the server. Supports domain names, IPv4, and IPv6.\n" }),
2264
- port: portLikeSchema.meta({ markdownDescription: "Server port, usually the same as the port the server is listening on.\n" }),
2265
- id: z.string().meta({ markdownDescription: "User ID for VLESS. It can be any string less than 30 bytes, or a valid UUID. A custom string and its mapped UUID are equivalent.\n\nThe mapping standard is described in [VLESS UUID Mapping Standard: Mapping Custom Strings to UUIDv5](https://github.com/XTLS/Xray-core/issues/158).\n\nYou can use the command `xray uuid -i \"custom string\"` to generate the UUID mapped from a custom string, or use the command `xray uuid` to generate a random UUID.\n" }),
2266
- encryption: z.string().default("none").meta({ markdownDescription: "[VLESS Encryption](https://github.com/XTLS/Xray-core/pull/5067) settings. Cannot be left empty; to disable, explicitly set to `\"none\"`.\n\nIt is recommended for most users to use the `xray vlessenc` command to automatically generate this field to avoid configuration mistakes. The detailed configuration below is recommended only for advanced users.\n\nIts format is a detailed configuration string of fields connected by `.`. For example: `mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U`. This document will refer to the separate parts separated by dots as \"blocks\".\n\n- **The 1st block** is the handshake method. Currently, there is only `mlkem768x25519plus`. Requires consistency between server and client.\n- **The 2nd block** is the encryption method. Options are `native`/`xorpub`/`random`, corresponding to: raw format packet / raw format + obfuscated public key part / fully random numbers (similar to VMESS/Shadowsocks). Requires consistency between server and client.\n- **The 3rd block** is session resumption. Choosing `0rtt` will follow the server settings to attempt to use previously generated tickets to skip the handshake for fast connection (can be manually disabled by the server). Choosing `1rtt` will force a 1-RTT handshake process. The meaning here differs from the server setting; see VLESS Inbound `decryption` settings for details.\n\nFollowing blocks are **padding**. After the connection is established, the client sends some garbage data to obfuscate length characteristics. It does not need to be the same as the server (the corresponding part in the inbound is the padding sent from the server to the client). It is a variable-length part with the format `padding.delay.padding` + `(.delay.padding)` x n (multiple padding blocks can be inserted, requiring a delay block between two padding blocks).\n\n- `padding` format is `probability-min-max`. E.g., `100-111-1111` means 100% probability to send a padding of length 111~1111.\n- `delay` format is also `probability-min-max`. E.g., `75-0-111` means 75% probability to wait 0~111 milliseconds.\n\nThe first padding block has special requirements: probability must be 100% and minimum length greater than 0. If no padding exists, the core automatically uses `100-111-1111.75-0-111.50-0-3333` as the padding setting.\n\n**The last block** will be recognized by the core as the parameter used to authenticate the server. It can be generated by `./xray x25519` (using the Password part) or `./xray mlkem768` (using the Client part). It must correspond to the server. `mlkem768` belongs to post-quantum algorithms, preventing (future) client parameter leaks from allowing quantum computers to crack the private key and impersonate the server. This parameter is only used for verification; the handshake process is post-quantum secure regardless, and existing encrypted data cannot be decrypted by future quantum computers.\n" }),
2284
+ const vlessSettings = z.object({
2285
+ address: z.string().meta({ markdownDescription: vlessAddress_default }),
2286
+ port: portLikeSchema.meta({ markdownDescription: vlessPort_default }),
2287
+ id: z.string().meta({ markdownDescription: vlessId_default }),
2288
+ encryption: z.string().default("none").meta({ markdownDescription: vlessEncryption_default }),
2289
+ flow: z.enum([
2290
+ "",
2291
+ "xtls-rprx-vision",
2292
+ "xtls-rprx-vision-udp443"
2293
+ ]).optional().meta({ markdownDescription: vlessFlow_default }),
2294
+ level: z.int().default(0).optional().meta({ markdownDescription: vlessLevel_default }),
2295
+ reverse: z.object({
2296
+ tag: z.string().meta({ markdownDescription: "The inbound proxy tag for this reverse proxy. When the server dispatches a reverse proxy request, it enters the routing system from the inbound using this tag, and the routing system routes it to the outbound you need.\n" }),
2297
+ sniffing: sniffingSchema.optional()
2298
+ }).optional().meta({ markdownDescription: "VLESS minimalist reverse proxy configuration. It preserves the real source IP information from the public-facing side.\n\nThe existence of this item indicates that this outbound can be used as a VLESS reverse proxy outbound, and it will automatically establish a connection to the server to register the reverse proxy tunnel.\n\n`tag` is the inbound proxy tag for this reverse proxy. When the server dispatches a reverse proxy request, it enters the routing system from the inbound using this tag, and the routing system routes it to the outbound you need.\n\nThe UUID used must be one that is also configured with `reverse` on the server side (see VLESS Inbound for details).\n\n`sniffing` see [SniffingObject](https://xtls.github.io/en/config/inbound.html#sniffingobject), performs sniffing on requests entering through this reverse proxy.\n\n### TIP\n\nFull tutorial: [VLESS Reverse Proxy Examples](https://xtls.github.io/en/document/level-2/vless_reverse.html)\n" })
2299
+ }).meta({ markdownDescription: vlessSettings_default });
2300
+ const vnext = z.object({ vnext: z.array(z.object({
2301
+ address: z.string().meta({ markdownDescription: vlessAddress_default }),
2302
+ port: portLikeSchema.meta({ markdownDescription: vlessPort_default }),
2303
+ users: z.array(z.object({
2304
+ id: z.string().meta({ markdownDescription: vlessId_default }),
2305
+ encryption: z.string().default("none").meta({ markdownDescription: vlessEncryption_default }),
2267
2306
  flow: z.enum([
2268
2307
  "",
2269
2308
  "xtls-rprx-vision",
2270
2309
  "xtls-rprx-vision-udp443"
2271
- ]).optional().meta({ markdownDescription: "Flow control mode, used to select the XTLS algorithm.\n\nCurrently, the following flow control modes are available in the outbound protocol:\n\n- **No `flow` or empty string**: Use standard TLS proxy.\n- **`xtls-rprx-vision`**: Use XTLS, including inner handshake random padding. Will intercept UDP traffic targeting port 443 (QUIC) to force browsers to use standard HTTPS, increasing traffic that can be Spliced.\n- **`xtls-rprx-vision-udp443`**: Same as `xtls-rprx-vision`, but does not intercept UDP 443. Used when a program forces the use of QUIC and would fail to work if intercepted.\n\nXTLS is available only in the following combinations:\n\n- **TCP+TLS/REALITY**: In this case, if transmitting TLS 1.3, the core will attempt to Splice encrypted data at the bottom layer. If successful, it saves all core IO overhead.\n- **VLESS Encryption**: No underlying transport restrictions. If the underlying transport is not TCP, it only attempts to penetrate Encryption, saving Encryption overhead. If it is TCP, it will still attempt to perform Splice.\n\n### TIP\n\nSplice is a function provided by the Linux Kernel. The system kernel forwards TCP directly, no longer passing through Xray's memory, greatly reducing data copying and CPU context switching.\n\nWhen using Vision mode, Splice is automatically enabled if the following conditions are met:\n\n- Linux environment.\n- Inbound protocol is a pure TCP connection like `Dokodemo door`, `Socks`, `HTTP`, or other inbound protocols using XTLS.\n- Outbound protocol is VLESS + XTLS.\n\nWhen using Splice, the network speed display will lag and will only be counted after the connection is disconnected because the core cannot know the traffic situation while the kernel takes over the connection.\n" }),
2272
- level: z.int().default(0).optional().meta({ markdownDescription: "User level. The connection will use the [Local Policy](https://xtls.github.io/en/config/policy.html#levelpolicyobject) corresponding to this user level.\n\nThe value of `level` corresponds to the value of `level` in [policy](https://xtls.github.io/en/config/policy.html#policyobject). If not specified, it defaults to 0.\n" }),
2273
- reverse: z.object({
2274
- tag: z.string().meta({ markdownDescription: "The inbound proxy tag for this reverse proxy. When the server dispatches a reverse proxy request, it enters the routing system from the inbound using this tag, and the routing system routes it to the outbound you need.\n" }),
2275
- sniffing: sniffingSchema.optional()
2276
- }).optional().meta({ markdownDescription: "VLESS minimalist reverse proxy configuration. It preserves the real source IP information from the public-facing side.\n\nThe existence of this item indicates that this outbound can be used as a VLESS reverse proxy outbound, and it will automatically establish a connection to the server to register the reverse proxy tunnel.\n\n`tag` is the inbound proxy tag for this reverse proxy. When the server dispatches a reverse proxy request, it enters the routing system from the inbound using this tag, and the routing system routes it to the outbound you need.\n\nThe UUID used must be one that is also configured with `reverse` on the server side (see VLESS Inbound for details).\n\n`sniffing` see [SniffingObject](https://xtls.github.io/en/config/inbound.html#sniffingobject), performs sniffing on requests entering through this reverse proxy.\n\n### TIP\n\nFull tutorial: [VLESS Reverse Proxy Examples](https://xtls.github.io/en/document/level-2/vless_reverse.html)\n" })
2277
- }).meta({ markdownDescription: "`OutboundConfigurationObject` corresponds to the `settings` item in [`OutboundObject`](https://xtls.github.io/en/config/outbound.html).\n" })
2278
- }).meta({ markdownDescription: "VLESS is a stateless lightweight transport protocol. It consists of inbound and outbound parts and can serve as a bridge between the Xray client and server.\n\nUnlike [VMess](https://xtls.github.io/en/config/outbounds/vmess.html), VLESS does not depend on system time. The authentication method is also UUID.\n\n[Documentation ↗](https://xtls.github.io/en/config/outbounds/vless.html)\n" });
2310
+ ]).optional().meta({ markdownDescription: vlessFlow_default }),
2311
+ level: z.int().default(0).optional().meta({ markdownDescription: vlessLevel_default })
2312
+ }))
2313
+ })) });
2314
+ const vless = outboundSchemaBase.extend({
2315
+ protocol: z.literal("vless"),
2316
+ settings: vlessSettings.or(vnext).meta({ markdownDescription: vlessSettings_default })
2317
+ }).meta({ markdownDescription: vless_default });
2279
2318
  //#endregion
2280
2319
  //#region src/outbounds/vmess/vmess.ts
2281
2320
  const vmess = outboundSchemaBase.extend({