mirror of
https://github.com/fosrl/pangolin.git
synced 2026-07-05 19:59:43 +00:00
Add back the sync with semver
This commit is contained in:
@@ -5,8 +5,21 @@ import { Newt } from "@server/db";
|
||||
import { eq } from "drizzle-orm";
|
||||
import logger from "@server/logger";
|
||||
import { sendNewtSyncMessage } from "./sync";
|
||||
import semver from "semver";
|
||||
import { recordSitePing } from "./pingAccumulator";
|
||||
|
||||
const NEWT_SUPPORTS_SYNC_VERSION = ">=1.14.0";
|
||||
const PONG = {
|
||||
message: {
|
||||
type: "pong",
|
||||
data: {
|
||||
timestamp: new Date().toISOString()
|
||||
}
|
||||
},
|
||||
broadcast: false,
|
||||
excludeSender: false
|
||||
};
|
||||
|
||||
/**
|
||||
* Handles ping messages from newt clients.
|
||||
*
|
||||
@@ -37,6 +50,14 @@ export const handleNewtPingMessage: MessageHandler = async (context) => {
|
||||
// cross-region latency to the database.
|
||||
recordSitePing(newt.siteId);
|
||||
|
||||
if (
|
||||
newt.version &&
|
||||
!semver.satisfies(newt.version, NEWT_SUPPORTS_SYNC_VERSION)
|
||||
) {
|
||||
// Newt does not support the sync message so not checking - stop here -
|
||||
return PONG;
|
||||
}
|
||||
|
||||
// Check config version and sync if stale.
|
||||
const configVersion = await getClientConfigVersion(newt.newtId);
|
||||
|
||||
@@ -65,14 +86,5 @@ export const handleNewtPingMessage: MessageHandler = async (context) => {
|
||||
await sendNewtSyncMessage(newt, site);
|
||||
}
|
||||
|
||||
return {
|
||||
message: {
|
||||
type: "pong",
|
||||
data: {
|
||||
timestamp: new Date().toISOString()
|
||||
}
|
||||
},
|
||||
broadcast: false,
|
||||
excludeSender: false
|
||||
};
|
||||
return PONG;
|
||||
};
|
||||
|
||||
@@ -9,45 +9,45 @@ import {
|
||||
import { canCompress } from "@server/lib/clientVersionChecks";
|
||||
|
||||
export async function sendNewtSyncMessage(newt: Newt, site: Site) {
|
||||
// const {
|
||||
// tcpTargets,
|
||||
// udpTargets,
|
||||
// validHealthCheckTargets,
|
||||
// browserGatewayTargets,
|
||||
// remoteExitNodeSubnets
|
||||
// } = 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,
|
||||
// browserGatewayTargets: browserGatewayTargets,
|
||||
// remoteExitNodeSubnets: remoteExitNodeSubnets
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// compress: canCompress(newt.version, "newt")
|
||||
// }
|
||||
// ).catch((error) => {
|
||||
// logger.warn(`Error sending newt sync message:`, error);
|
||||
// });
|
||||
const {
|
||||
tcpTargets,
|
||||
udpTargets,
|
||||
validHealthCheckTargets,
|
||||
browserGatewayTargets,
|
||||
remoteExitNodeSubnets
|
||||
} = 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,
|
||||
browserGatewayTargets: browserGatewayTargets,
|
||||
remoteExitNodeSubnets: remoteExitNodeSubnets
|
||||
}
|
||||
},
|
||||
{
|
||||
compress: canCompress(newt.version, "newt")
|
||||
}
|
||||
).catch((error) => {
|
||||
logger.warn(`Error sending newt sync message:`, error);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user