summary refs log tree commit diff
diff options
context:
space:
mode:
authorPuyodead1 <puyodead@proton.me>2023-09-08 22:21:28 -0400
committerPuyodead1 <puyodead@protonmail.com>2023-12-23 16:38:16 -0500
commit3fed9797d8d72fb145cfbe0696fa6e1f71e31b3a (patch)
tree003aebfe92e98597e850bfb35b7978c3daef088b
parentImplement Pomelo Registration (diff)
downloadserver-3fed9797d8d72fb145cfbe0696fa6e1f71e31b3a.tar.xz
Send experiment required to enable pomelo UI in discord client
-rw-r--r--src/api/routes/experiments.ts18
-rw-r--r--src/util/interfaces/Experiments.ts36
-rw-r--r--src/util/interfaces/index.ts1
3 files changed, 53 insertions, 2 deletions
diff --git a/src/api/routes/experiments.ts b/src/api/routes/experiments.ts
index cd206d79..0cad7342 100644
--- a/src/api/routes/experiments.ts
+++ b/src/api/routes/experiments.ts
@@ -16,14 +16,28 @@
 	along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
 
-import { Router, Response, Request } from "express";
 import { route } from "@spacebar/api";
+import { Config, Experiments } from "@spacebar/util";
+import { Request, Response, Router } from "express";
 
 const router = Router();
 
 router.get("/", route({}), (req: Request, res: Response) => {
 	// TODO:
-	res.send({ fingerprint: "", assignments: [], guild_experiments: [] });
+	const { uniqueUsernames } = Config.get().general;
+
+	const data: Experiments = {
+		fingerprint: "fingerprint",
+		assignments: [],
+		guild_experiments: [],
+	};
+	// this enables the pomelo/unique usernames UI in the official clients
+	if (uniqueUsernames) {
+		// hash, revision, bucket, override, population, hash_result, as_mode
+		// bucket 4 is used by the official client, and enables live checking and suggestions, 3 is only live checking
+		data.assignments.push([2476969328, 0, 3, -1, 0, 9267, 0, 0]);
+	}
+	res.send(data);
 });
 
 export default router;
diff --git a/src/util/interfaces/Experiments.ts b/src/util/interfaces/Experiments.ts
new file mode 100644
index 00000000..48c53276
--- /dev/null
+++ b/src/util/interfaces/Experiments.ts
@@ -0,0 +1,36 @@
+/*
+	Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
+	Copyright (C) 2023 Spacebar and Spacebar Contributors
+	
+	This program is free software: you can redistribute it and/or modify
+	it under the terms of the GNU Affero General Public License as published
+	by the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+	
+	This program is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU Affero General Public License for more details.
+	
+	You should have received a copy of the GNU Affero General Public License
+	along with this program.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+export type GuildExperiment = [
+	number,
+	string | null,
+	number,
+	unknown[],
+	unknown[],
+	unknown[],
+	unknown | null,
+	unknown | null,
+	number,
+	number,
+];
+
+export interface Experiments {
+	fingerprint: string;
+	assignments: number[][];
+	guild_experiments: GuildExperiment[];
+}
diff --git a/src/util/interfaces/index.ts b/src/util/interfaces/index.ts
index 6620ba32..e669e49e 100644
--- a/src/util/interfaces/index.ts
+++ b/src/util/interfaces/index.ts
@@ -19,6 +19,7 @@
 export * from "./Activity";
 export * from "./ConnectedAccount";
 export * from "./Event";
+export * from "./Experiments";
 export * from "./GuildWelcomeScreen";
 export * from "./Interaction";
 export * from "./Presence";