summary refs log tree commit diff
path: root/api/src/util/Voice.ts
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/util/Voice.ts')
-rw-r--r--api/src/util/Voice.ts32
1 files changed, 32 insertions, 0 deletions
diff --git a/api/src/util/Voice.ts b/api/src/util/Voice.ts
new file mode 100644
index 00000000..087bdfa8
--- /dev/null
+++ b/api/src/util/Voice.ts
@@ -0,0 +1,32 @@
+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
+    }))
+}
\ No newline at end of file