Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
4e93fff
Add layer 4 proto support
lixmal Mar 6, 2026
bd5b805
Fix initialResource fallback and UDP session_idle_timeout
lixmal Mar 6, 2026
cb4a919
Fix tlsResourceId init for resource-driven create flows, UDP timeout …
lixmal Mar 6, 2026
3768959
Address PR review: ServiceMode enum, resource init fix, modal title, …
lixmal Mar 7, 2026
65d1949
Add L4 protocol values to ReverseProxyTargetProtocol, remove unsafe d…
lixmal Mar 7, 2026
a3f380e
Add aria-labels to L4 port/host inputs
lixmal Mar 7, 2026
30c2b6b
Unify domain input for all service modes including L4
lixmal Mar 9, 2026
fbe7ff6
Merge branch 'main' into feature/reverse-proxy
lixmal Mar 9, 2026
5033cae
Support L4 proxy events
lixmal Mar 11, 2026
b41936d
Merge branch 'main' into feature/reverse-proxy
lixmal Mar 11, 2026
a4a70a6
Fix custom port reset on edit and show port in L4 service link
lixmal Mar 12, 2026
7a7507b
Remove redundant listen port from L4 target cell
lixmal Mar 12, 2026
fb5f205
Show link only for HTTP/TLS services, copy-on-click for TCP/UDP
lixmal Mar 12, 2026
a7790da
Move mode badge before domain and use fixed width for alignment
lixmal Mar 12, 2026
e02c507
Fix HTTP services to open as link instead of copy
lixmal Mar 12, 2026
8ab27c5
Hide old proxy clusters from L4 domain selector
lixmal Mar 13, 2026
4a2014a
Move service type inside modal
heisbrot Mar 16, 2026
bd715cf
Update auth cell
heisbrot Mar 16, 2026
53c5025
Add target selector component
heisbrot Mar 16, 2026
c74e755
Extract into separate components
heisbrot Mar 16, 2026
081238c
hide services types for not supported clusters
heisbrot Mar 16, 2026
85de2c6
Merge branch 'main' into feature/reverse-proxy
heisbrot Mar 16, 2026
ad7c072
Remove advanced settings tab in http targetmodal and use accordion in…
heisbrot Mar 16, 2026
4f1d881
Update advanced settings
heisbrot Mar 16, 2026
1f8d6f6
Update target device row
heisbrot Mar 17, 2026
45184a8
Update text
heisbrot Mar 17, 2026
0290819
Add type cell
heisbrot Mar 17, 2026
8013a89
Fix flat target name cell
heisbrot Mar 17, 2026
b4f4e47
Update modal title
heisbrot Mar 17, 2026
bcd1429
Fix edit target in flat table
heisbrot Mar 17, 2026
2295391
Remove unused proxycluster interface
heisbrot Mar 17, 2026
911b43f
Move proxy type icon into type component
heisbrot Mar 17, 2026
5e1cea8
sync cloud
heisbrot Mar 17, 2026
bc50e50
use emptyrow
heisbrot Mar 17, 2026
88133bd
fix l4 type
heisbrot Mar 17, 2026
beccada
fix duplicate error notification
heisbrot Mar 17, 2026
8da4ef2
Set the correct target type
lixmal Mar 17, 2026
d759af1
Merge remote-tracking branch 'origin/feature/reverse-proxy' into feat…
heisbrot Mar 17, 2026
f8bd0bb
Fix subnet host editable
heisbrot Mar 17, 2026
a261dc9
Fix subnet host editable
heisbrot Mar 17, 2026
618ef98
hide selector when initial resource or peer
heisbrot Mar 17, 2026
f92eee7
Rename dropdown
heisbrot Mar 17, 2026
92003b4
Update text
heisbrot Mar 17, 2026
4df036e
update status cell
heisbrot Mar 17, 2026
5ba9620
merge cloud
heisbrot Mar 18, 2026
aadd083
Update tooltips
heisbrot Mar 18, 2026
2b6e2c9
Address coderabbit comments
heisbrot Mar 18, 2026
160a7fb
Fix skeleton device card
heisbrot Mar 18, 2026
bebe78b
Update listen port tooltip
heisbrot Mar 18, 2026
69159cd
Adjust padding
heisbrot Mar 18, 2026
52586e2
update package-lock.json
heisbrot Mar 18, 2026
19c0a98
bump next to 16.1.7
heisbrot Mar 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/contexts/ReverseProxiesProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ type ReverseProxiesContextValue = {
type OpenModalOptions = {
proxy?: ReverseProxy;
initialTab?: string;
initialEndpointMode?: "http" | "tls" | "tcp" | "udp";
initialPeer?: Peer;
initialNetwork?: Network;
initialResource?: NetworkResource;
Expand Down Expand Up @@ -146,11 +147,15 @@ export default function ReverseProxiesProvider({
const [modalInitialResource, setModalInitialResource] = useState<
NetworkResource | undefined
>();
const [modalInitialEndpointMode, setModalInitialEndpointMode] = useState<
"http" | "tls" | "tcp" | "udp" | undefined
>();
const onSuccessRef = React.useRef<(() => void) | undefined>(undefined);
const openModal = useCallback(
(options?: OpenModalOptions) => {
setCurrentProxy(options?.proxy);
setInitialTab(options?.initialTab);
setModalInitialEndpointMode(options?.initialEndpointMode);
setModalInitialPeer(options?.initialPeer ?? initialPeer);
setModalInitialNetwork(options?.initialNetwork ?? initialNetwork);
setModalInitialResource(options?.initialResource);
Expand All @@ -164,6 +169,7 @@ export default function ReverseProxiesProvider({
setModalOpen(false);
setCurrentProxy(undefined);
setInitialTab(undefined);
setModalInitialEndpointMode(undefined);
setModalInitialPeer(undefined);
setModalInitialNetwork(undefined);
setModalInitialResource(undefined);
Expand Down Expand Up @@ -491,6 +497,7 @@ export default function ReverseProxiesProvider({
reverseProxy={currentProxy}
domains={domains}
initialTab={initialTab}
initialEndpointMode={modalInitialEndpointMode}
initialPeer={modalInitialPeer}
initialNetwork={modalInitialNetwork}
initialResource={modalInitialResource}
Expand Down
27 changes: 27 additions & 0 deletions src/interfaces/ReverseProxy.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
export enum ServiceMode {
HTTP = "http",
TCP = "tcp",
UDP = "udp",
TLS = "tls",
}

export interface ReverseProxy {
id?: string;
name: string;
domain: string;
mode?: ServiceMode;
listen_port?: number;
port_auto_assigned?: boolean;
proxy_cluster?: string;
targets: ReverseProxyTarget[];
enabled: boolean;
Expand All @@ -11,6 +21,12 @@ export interface ReverseProxy {
meta?: ReverseProxyMeta;
}

export interface ProxyCluster {
address: string;
connected_proxies: number;
supports_custom_ports: boolean;
}

export interface ReverseProxyMeta {
created_at: string;
status: ReverseProxyStatus;
Expand All @@ -31,8 +47,10 @@ export type ServiceTargetOptionsPathRewrite = "preserve";
export interface ServiceTargetOptions {
skip_tls_verify?: boolean;
request_timeout?: string;
session_idle_timeout?: string;
path_rewrite?: ServiceTargetOptionsPathRewrite;
custom_headers?: Record<string, string>;
proxy_protocol?: boolean;
}

export interface ReverseProxyTarget {
Expand Down Expand Up @@ -73,6 +91,7 @@ export interface ReverseProxyDomain {
validated: boolean;
type: ReverseProxyDomainType;
target_cluster?: string;
supports_custom_ports?: boolean;
}

export enum ReverseProxyDomainType {
Expand Down Expand Up @@ -113,6 +132,14 @@ export interface ReverseProxyFlatTarget extends ReverseProxyTarget {
proxy: ReverseProxy;
}

export function isL4Mode(mode?: ServiceMode): boolean {
return (
mode === ServiceMode.TCP ||
mode === ServiceMode.UDP ||
mode === ServiceMode.TLS
);
}

export const REVERSE_PROXY_DOCS_LINK =
"https://docs.netbird.io/manage/reverse-proxy";

Expand Down
Loading