mirror of
https://github.com/fosrl/pangolin.git
synced 2026-03-16 15:46:38 +00:00
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { ExitNode, exitNodes, Newt, Site, db } from "@server/db";
|
|
import { eq } from "drizzle-orm";
|
|
import { sendToClient } from "#dynamic/routers/ws";
|
|
import logger from "@server/logger";
|
|
import {
|
|
buildClientConfigurationForNewtClient,
|
|
buildTargetConfigurationForNewtClient
|
|
} from "./buildConfiguration";
|
|
import { canCompress } from "@server/lib/clientVersionChecks";
|
|
|
|
export async function sendNewtSyncMessage(newt: Newt, site: Site) {
|
|
const { tcpTargets, udpTargets, validHealthCheckTargets } =
|
|
await buildTargetConfigurationForNewtClient(site.siteId);
|
|
|
|
let exitNode: ExitNode | undefined;
|
|
if (site.exitNodeId) {
|
|
[exitNode] = await db
|
|
.select()
|
|
.from(exitNodes)
|
|
.where(eq(exitNodes.exitNodeId, site.exitNodeId))
|
|
.limit(1);
|
|
}
|
|
const { peers, targets } = await buildClientConfigurationForNewtClient(
|
|
site,
|
|
exitNode
|
|
);
|
|
|
|
await sendToClient(
|
|
newt.newtId,
|
|
{
|
|
type: "newt/sync",
|
|
data: {
|
|
proxyTargets: {
|
|
udp: udpTargets,
|
|
tcp: tcpTargets
|
|
},
|
|
healthCheckTargets: validHealthCheckTargets,
|
|
peers: peers,
|
|
clientTargets: targets
|
|
}
|
|
},
|
|
{
|
|
compress: canCompress(newt.version, "newt")
|
|
}
|
|
).catch((error) => {
|
|
logger.warn(`Error sending newt sync message:`, error);
|
|
});
|
|
}
|