diff --git a/src/api/routes/experiments.ts b/src/api/routes/experiments.ts
index cd206d79f..0cad7342c 100644
--- a/src/api/routes/experiments.ts
+++ b/src/api/routes/experiments.ts
@@ -16,14 +16,28 @@
along with this program. If not, see .
*/
-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 000000000..48c53276a
--- /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 .
+*/
+
+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 6620ba32d..e669e49ec 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";