33 lines
966 B
TypeScript
33 lines
966 B
TypeScript
import { Config } from "@fosscord/util";
|
|
import { distanceBetweenLocations, IPAnalysis } from "./ipAddress";
|
|
|
|
export async function getVoiceRegions(ipAddress: string, vip: boolean) {
|
|
const regions = Config.get().regions;
|
|
const availableRegions = regions.available.filter((ar) => (vip ? true : !ar.vip));
|
|
let optimalId = regions.default;
|
|
|
|
if (!regions.useDefaultAsOptimal) {
|
|
const clientIpAnalysis = await IPAnalysis(ipAddress);
|
|
|
|
let min = Number.POSITIVE_INFINITY;
|
|
|
|
for (let ar of availableRegions) {
|
|
//TODO the endpoint location should be saved in the database if not already present to prevent IPAnalysis call
|
|
const dist = distanceBetweenLocations(clientIpAnalysis, ar.location || (await IPAnalysis(ar.endpoint)));
|
|
|
|
if (dist < min) {
|
|
min = dist;
|
|
optimalId = ar.id;
|
|
}
|
|
}
|
|
}
|
|
|
|
return availableRegions.map((ar) => ({
|
|
id: ar.id,
|
|
name: ar.name,
|
|
custom: ar.custom,
|
|
deprecated: ar.deprecated,
|
|
optimal: ar.id === optimalId
|
|
}));
|
|
}
|