feat(virtual-printer): add Tailscale opt-out toggle (closes #701 point 3) (#1070)

* feat(virtual-printer): add Tailscale certificate provisioning
This commit is contained in:
lietschaend
2026-04-24 09:59:09 +02:00
committed by GitHub
parent 1b284a9e39
commit 91a3d391ff
25 changed files with 10445 additions and 51 deletions
+19 -1
View File
@@ -5335,6 +5335,7 @@ export interface VirtualPrinterStatus {
pending_files: number;
target_printer_ip?: string; // For proxy mode
proxy?: VirtualPrinterProxyStatus; // For proxy mode
tailscale_fqdn?: string; // Set when Tailscale cert is active
}
export interface VirtualPrinterSettings {
@@ -5344,6 +5345,7 @@ export interface VirtualPrinterSettings {
model: string;
target_printer_id: number | null; // For proxy mode
remote_interface_ip: string | null; // For SSDP proxy across networks
tailscale_disabled: boolean;
status: VirtualPrinterStatus;
}
@@ -5386,6 +5388,7 @@ export const virtualPrinterApi = {
model?: string;
target_printer_id?: number;
remote_interface_ip?: string;
tailscale_disabled?: boolean;
}) => {
const params = new URLSearchParams();
if (data.enabled !== undefined) params.set('enabled', String(data.enabled));
@@ -5394,6 +5397,7 @@ export const virtualPrinterApi = {
if (data.model !== undefined) params.set('model', data.model);
if (data.target_printer_id !== undefined) params.set('target_printer_id', String(data.target_printer_id));
if (data.remote_interface_ip !== undefined) params.set('remote_interface_ip', data.remote_interface_ip);
if (data.tailscale_disabled !== undefined) params.set('tailscale_disabled', String(data.tailscale_disabled));
return request<VirtualPrinterSettings>(`/settings/virtual-printer?${params.toString()}`, {
method: 'PUT',
@@ -5413,10 +5417,11 @@ export interface VirtualPrinterConfig {
serial: string;
target_printer_id: number | null;
auto_dispatch: boolean;
tailscale_disabled: boolean;
bind_ip: string | null;
remote_interface_ip: string | null;
position: number;
status: { running: boolean; pending_files: number; proxy?: VirtualPrinterProxyStatus };
status: { running: boolean; pending_files: number; proxy?: VirtualPrinterProxyStatus; tailscale_fqdn?: string };
}
export interface VirtualPrinterListResponse {
@@ -5453,6 +5458,7 @@ export const multiVirtualPrinterApi = {
access_code?: string;
target_printer_id?: number;
auto_dispatch?: boolean;
tailscale_disabled?: boolean;
bind_ip?: string;
remote_interface_ip?: string;
}) =>
@@ -5465,8 +5471,20 @@ export const multiVirtualPrinterApi = {
request<{ detail: string; id: number }>(`/virtual-printers/${id}`, {
method: 'DELETE',
}),
getTailscaleStatus: () =>
request<TailscaleStatusResponse>('/virtual-printers/tailscale-status'),
};
export interface TailscaleStatusResponse {
available: boolean;
fqdn: string;
hostname: string;
tailnet_name: string;
tailscale_ips: string[];
error: string | null;
}
// Pending Uploads API
export const pendingUploadsApi = {
list: () => request<PendingUpload[]>('/pending-uploads/'),