From 2b635e84196be818b8f913b39480475a48d0b766 Mon Sep 17 00:00:00 2001
From: Saya <davexdme@gmail.com>
Date: Sun, 22 Dec 2024 17:11:20 +0800
Subject: [PATCH] fix: query string parsing

---
 src/Indomitable.ts                   |  2 +-
 src/concurrency/ConcurrencyServer.ts | 11 +++++------
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/Indomitable.ts b/src/Indomitable.ts
index 595bd12..d2c0e2e 100644
--- a/src/Indomitable.ts
+++ b/src/Indomitable.ts
@@ -234,7 +234,7 @@ export class Indomitable extends EventEmitter {
             const sessions = await this.fetchSessions();
             this.concurrencyServer = new ConcurrencyServer(this, sessions.session_start_limit.max_concurrency);
             const info = await this.concurrencyServer.start();
-            this.emit(LibraryEvents.DEBUG, `Handle concurrency is currently enabled! =>\nServer is currently bound to:\n  Address: ${info.address}:${info.port}\n  Concurrency: ${sessions.session_start_limit.max_concurrency}`);
+            this.emit(LibraryEvents.DEBUG, `Handle concurrency is currently enabled! =>\n  Server is currently bound to:\n    Address: ${info.address}:${info.port}\n    Concurrency: ${sessions.session_start_limit.max_concurrency}`);
         }
         if (typeof this.clusterCount !== 'number')
             this.clusterCount = Os.cpus().length;
diff --git a/src/concurrency/ConcurrencyServer.ts b/src/concurrency/ConcurrencyServer.ts
index 74f486d..60aa761 100644
--- a/src/concurrency/ConcurrencyServer.ts
+++ b/src/concurrency/ConcurrencyServer.ts
@@ -1,8 +1,9 @@
 import { AddressInfo } from 'node:net';
 import { ConcurrencyManager } from './ConcurrencyManager';
 import { Indomitable } from '../Indomitable';
+import { LibraryEvents } from '../Util';
 import Http from 'node:http';
-import {LibraryEvents} from "../Util";
+import QueryString from 'node:querystring';
 
 /**
  * Server that handles identify locks
@@ -10,7 +11,7 @@ import {LibraryEvents} from "../Util";
 export class ConcurrencyServer {
     private readonly manager: Indomitable;
     /**
-     * Fastify instance of this server
+     * Http server of this instance
      * @private
      */
     private readonly server: Http.Server;
@@ -64,15 +65,13 @@ export class ConcurrencyServer {
             return void response.end();
         }
 
-        // @ts-expect-error: this is ok
-        if (!request.query.hasOwnProperty('shardId')) {
+        if (!request.url.includes('?shardId=')) {
             response.statusCode = 400;
             response.statusMessage = 'Bad Request';
             return void response.end('Missing shardId query string');
         }
 
-        // @ts-expect-error: this is ok
-        const shardId = Number(request.query['shardId']);
+        const shardId = Number(request.url.split('?shardId=')[1]);
 
         if (isNaN(shardId)) {
             response.statusCode = 400;