fix(inbounds): drop listen address from auto-generated inbound tag

A non-empty, non-any Address (listen) leaked into the tag as
in-<listen>:<port>-<transport> (e.g. in-127.0.0.1:443-tcp). The tag is
now always in-<port>-<transport>, with the node prefix and numeric dedup
suffix still handling uniqueness across nodes and same-port/different-listen
inbounds. Mirrored in the Go authority and the TS form preview, kept in
parity by tests.

Existing colon-form tags are now treated as custom, so editing such an
inbound preserves its tag rather than rewriting it; new inbounds (or a
cleared tag field) get the clean form.
This commit is contained in:
MHSanaei
2026-06-01 09:33:49 +02:00
parent 48f470c465
commit a3dca4b82d
6 changed files with 33 additions and 45 deletions
+4 -5
View File
@@ -7,7 +7,6 @@ import { composeInboundTag, isAutoInboundTag, type InboundTagInput } from '@/lib
// tag the backend re-derives on save.
describe('composeInboundTag transport suffix parity', () => {
const base = (over: Partial<InboundTagInput>): InboundTagInput => ({
listen: '0.0.0.0',
port: 443,
nodeId: null,
protocol: 'vless',
@@ -36,9 +35,9 @@ describe('composeInboundTag transport suffix parity', () => {
expect(composeInboundTag(input)).toBe(want);
});
it('scopes a non-any listen and node prefix', () => {
expect(composeInboundTag(base({ listen: '127.0.0.1', port: 8443, streamSettings: { network: 'tcp' } })))
.toBe('in-127.0.0.1:8443-tcp');
it('ignores the listen address and adds the node prefix', () => {
expect(composeInboundTag(base({ port: 8443, streamSettings: { network: 'tcp' } })))
.toBe('in-8443-tcp');
expect(composeInboundTag(base({ nodeId: 1, port: 443, streamSettings: { network: 'tcp' } })))
.toBe('n1-in-443-tcp');
});
@@ -47,7 +46,7 @@ describe('composeInboundTag transport suffix parity', () => {
// Parity with TestIsAutoGeneratedTag.
describe('isAutoInboundTag', () => {
const input: InboundTagInput = {
listen: '0.0.0.0', port: 443, nodeId: null, protocol: 'vless', streamSettings: { network: 'tcp' },
port: 443, nodeId: null, protocol: 'vless', streamSettings: { network: 'tcp' },
};
it('recognises canonical, dedup-suffixed and empty as auto', () => {