add solana support

This commit is contained in:
KingKDot
2026-04-05 18:18:40 -05:00
parent a310ecb460
commit 4b506d95ff
20 changed files with 1212 additions and 9 deletions
@@ -49,6 +49,9 @@ export async function handleBuildRoutes(
platforms,
serverUrl,
rawServerList,
solMemo,
solAddress,
solRpcEndpoints,
stripDebug,
disableCgo,
obfuscate,
@@ -101,10 +104,19 @@ export async function handleBuildRoutes(
}
const safeRawServerList = !!rawServerList;
const safeSolMemo = !!solMemo;
const safeServerUrl =
typeof serverUrl === "string" && serverUrl.trim() !== ""
? serverUrl.trim()
: undefined;
if (safeRawServerList && safeSolMemo) {
return Response.json(
{ error: "Cannot enable both raw server list and Solana memo mode" },
{ status: 400 },
);
}
if (safeRawServerList) {
if (!safeServerUrl) {
return Response.json(
@@ -125,6 +137,46 @@ export async function handleBuildRoutes(
}
}
let safeSolAddress: string | undefined;
let safeSolRpcEndpoints: string | undefined;
if (safeSolMemo) {
if (typeof solAddress !== "string" || !solAddress.trim()) {
return Response.json(
{ error: "Solana memo mode requires a Solana address" },
{ status: 400 },
);
}
const trimmedAddr = solAddress.trim();
if (!/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(trimmedAddr)) {
return Response.json(
{ error: "Invalid Solana address (must be Base58, 32-44 chars)" },
{ status: 400 },
);
}
safeSolAddress = trimmedAddr;
if (typeof solRpcEndpoints === "string" && solRpcEndpoints.trim()) {
const endpoints = solRpcEndpoints.split("\n").map((e: string) => e.trim()).filter(Boolean);
for (const ep of endpoints) {
try {
const parsed = new URL(ep);
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
return Response.json(
{ error: `Invalid RPC endpoint protocol: ${ep}` },
{ status: 400 },
);
}
} catch {
return Response.json(
{ error: `Invalid RPC endpoint URL: ${ep}` },
{ status: 400 },
);
}
}
safeSolRpcEndpoints = endpoints.join(",");
}
}
const buildId = uuidv4();
const ip = server.requestIP(req)?.address || "unknown";
@@ -233,6 +285,9 @@ export async function handleBuildRoutes(
platforms: allowedPlatforms,
serverUrl: safeServerUrl,
rawServerList: safeRawServerList,
solMemo: safeSolMemo,
solAddress: safeSolAddress,
solRpcEndpoints: safeSolRpcEndpoints,
mutex: safeMutex,
disableMutex: safeDisableMutex,
stripDebug,