Add inference resource type

This commit is contained in:
Owen
2026-07-30 17:34:13 -04:00
parent d68f123e13
commit 45623ce36b
3 changed files with 30 additions and 9 deletions
+5 -2
View File
@@ -195,7 +195,10 @@ export const resources = pgTable(
postAuthPath: text("postAuthPath"), postAuthPath: text("postAuthPath"),
health: varchar("health").default("unknown"), // "healthy", "unhealthy", "unknown" health: varchar("health").default("unknown"), // "healthy", "unhealthy", "unknown"
wildcard: boolean("wildcard").notNull().default(false), wildcard: boolean("wildcard").notNull().default(false),
mode: text("mode").default("http").notNull(), // rdp, ssh, http, vnc mode: text("mode")
.default("http")
.$type<"rdp" | "ssh" | "http" | "vnc" | "inference">()
.notNull(),
pamMode: varchar("pamMode", { length: 32 }) pamMode: varchar("pamMode", { length: 32 })
.$type<"passthrough" | "push">() .$type<"passthrough" | "push">()
.default("passthrough"), .default("passthrough"),
@@ -429,7 +432,7 @@ export const siteResources = pgTable(
name: varchar("name").notNull(), name: varchar("name").notNull(),
ssl: boolean("ssl").notNull().default(false), ssl: boolean("ssl").notNull().default(false),
mode: varchar("mode") mode: varchar("mode")
.$type<"host" | "cidr" | "http" | "ssh">() .$type<"host" | "cidr" | "http" | "ssh" | "inference">()
.notNull(), // "host" | "cidr" | "http" .notNull(), // "host" | "cidr" | "http"
scheme: varchar("scheme").$type<"http" | "https">(), // only for when we are doing https or http mode scheme: varchar("scheme").$type<"http" | "https">(), // only for when we are doing https or http mode
proxyPort: integer("proxyPort"), // only for port mode proxyPort: integer("proxyPort"), // only for port mode
+7 -2
View File
@@ -203,7 +203,10 @@ export const resources = sqliteTable("resources", {
postAuthPath: text("postAuthPath"), postAuthPath: text("postAuthPath"),
health: text("health").default("unknown"), // "healthy", "unhealthy", "unknown" health: text("health").default("unknown"), // "healthy", "unhealthy", "unknown"
wildcard: integer("wildcard", { mode: "boolean" }).notNull().default(false), wildcard: integer("wildcard", { mode: "boolean" }).notNull().default(false),
mode: text("mode").default("http").notNull(), // rdp, ssh, http, vnc mode: text("mode")
.default("http")
.$type<"rdp" | "ssh" | "http" | "vnc" | "inference">()
.notNull(), // rdp, ssh, http, vnc, inference
pamMode: text("pamMode") pamMode: text("pamMode")
.$type<"passthrough" | "push">() .$type<"passthrough" | "push">()
.default("passthrough"), .default("passthrough"),
@@ -425,7 +428,9 @@ export const siteResources = sqliteTable("siteResources", {
niceId: text("niceId").notNull(), niceId: text("niceId").notNull(),
name: text("name").notNull(), name: text("name").notNull(),
ssl: integer("ssl", { mode: "boolean" }).notNull().default(false), ssl: integer("ssl", { mode: "boolean" }).notNull().default(false),
mode: text("mode").$type<"host" | "cidr" | "http" | "ssh">().notNull(), // "host" | "cidr" | "http" mode: text("mode")
.$type<"host" | "cidr" | "http" | "ssh" | "inference">()
.notNull(), // "host" | "cidr" | "http"
scheme: text("scheme").$type<"http" | "https">(), // only for when we are doing https or http mode scheme: text("scheme").$type<"http" | "https">(), // only for when we are doing https or http mode
proxyPort: integer("proxyPort"), // only for port mode proxyPort: integer("proxyPort"), // only for port mode
destinationPort: integer("destinationPort"), // only for port mode destinationPort: integer("destinationPort"), // only for port mode
+18 -5
View File
@@ -1,4 +1,4 @@
import { db, orgs, primaryDb } from "@server/db"; import { db, ExitNode, orgs, primaryDb } from "@server/db";
import { MessageHandler } from "@server/routers/ws"; import { MessageHandler } from "@server/routers/ws";
import { import {
clients, clients,
@@ -311,14 +311,15 @@ export const handleOlmRegisterMessage: MessageHandler = async (context) => {
} }
let clientSubnet = client.exitNodeSubnet; let clientSubnet = client.exitNodeSubnet;
let exitNode: ExitNode | null = null;
if ( if (
exitNodeId && exitNodeId &&
(client.exitNodeId !== exitNodeId || !client.exitNodeSubnet) (client.exitNodeId !== exitNodeId || !client.exitNodeSubnet)
) { ) {
const { exitNode, hasAccess } = await verifyExitNodeOrgAccess( const { exitNode: exitNodeResult, hasAccess } =
exitNodeId, await verifyExitNodeOrgAccess(exitNodeId, client.orgId);
client.orgId
); exitNode = exitNodeResult;
if (!exitNode) { if (!exitNode) {
logger.warn("[handleOlmRegisterMessage] Exit node not found", { logger.warn("[handleOlmRegisterMessage] Exit node not found", {
@@ -466,6 +467,18 @@ export const handleOlmRegisterMessage: MessageHandler = async (context) => {
sites: siteConfigurations, sites: siteConfigurations,
tunnelIP: client.subnet, tunnelIP: client.subnet,
utilitySubnet: org.utilitySubnet, utilitySubnet: org.utilitySubnet,
exitNode:
exitNode && client.exitNodeSubnet
? {
endpoint: `${exitNode.endpoint}:${exitNode.listenPort}`,
relayPort:
config.getRawConfig().gerbil
.clients_start_port,
publicKey: exitNode.publicKey,
serverIP: exitNode.address.split("/")[0],
tunnelIP: client.exitNodeSubnet.split("/")[0]
}
: undefined,
chainId: chainId chainId: chainId
} }
}, },