summary refs log tree commit diff
path: root/api/src/util/RandomInviteID.ts
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/util/RandomInviteID.ts')
-rw-r--r--api/src/util/RandomInviteID.ts19
1 files changed, 19 insertions, 0 deletions
diff --git a/api/src/util/RandomInviteID.ts b/api/src/util/RandomInviteID.ts
index b37994d8..45450b0d 100644
--- a/api/src/util/RandomInviteID.ts
+++ b/api/src/util/RandomInviteID.ts
@@ -1,3 +1,5 @@
+import { Snowflake } from "@fosscord/util";
+
 export function random(length = 6) {
 	// Declare all characters
 	let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
@@ -10,3 +12,20 @@ export function random(length = 6) {
 
 	return str;
 }
+
+export function snowflakeBasedInvite() {
+	// Declare all characters
+	let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+	
+	let snowflake = Snowflake.generateWorkerProcess();
+	
+	// snowflakes hold ~10.75 characters worth of entropy;
+	// safe to generate a 8-char invite out of them
+	let str = "";
+	for (let i=0; i < 10; i++) {
+		str += chars.charAt((snowflake % chars.length));
+		snowflake /= chars.length;
+	}
+	
+	return str.substr(3,8).reverse(); // little-endianise for entropy
+}