moons-ta-client 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/client.d.ts +22 -0
  2. package/dist/client.js +77 -0
  3. package/dist/constants.d.ts +4 -0
  4. package/{src/constants.ts → dist/constants.js} +1 -1
  5. package/dist/custom-event-emitter.d.ts +7 -0
  6. package/dist/custom-event-emitter.js +16 -0
  7. package/dist/index.d.ts +4591 -0
  8. package/dist/index.esm.js +16500 -0
  9. package/{src/index.ts → dist/index.js} +1 -1
  10. package/dist/models/commands.d.ts +116 -0
  11. package/{src/models/commands.ts → dist/models/commands.js} +17 -102
  12. package/dist/models/discord.d.ts +76 -0
  13. package/{src/models/discord.ts → dist/models/discord.js} +15 -62
  14. package/dist/models/events.d.ts +419 -0
  15. package/{src/models/events.ts → dist/models/events.js} +89 -354
  16. package/dist/models/index.js +8 -0
  17. package/dist/models/models.d.ts +1137 -0
  18. package/{src/models/models.ts → dist/models/models.js} +200 -799
  19. package/dist/models/packets.d.ts +144 -0
  20. package/{src/models/packets.ts → dist/models/packets.js} +26 -126
  21. package/dist/models/pushes.d.ts +122 -0
  22. package/{src/models/pushes.ts → dist/models/pushes.js} +24 -96
  23. package/dist/models/requests.d.ts +1694 -0
  24. package/{src/models/requests.ts → dist/models/requests.js} +323 -1469
  25. package/dist/models/responses.d.ts +799 -0
  26. package/{src/models/responses.ts → dist/models/responses.js} +161 -669
  27. package/dist/scraper.d.ts +2 -0
  28. package/dist/scraper.js +87 -0
  29. package/dist/state-manager.d.ts +50 -0
  30. package/dist/state-manager.js +196 -0
  31. package/dist/tournament-assistant-client.d.ts +113 -0
  32. package/dist/tournament-assistant-client.js +1167 -0
  33. package/package.json +8 -2
  34. package/rollup.config.mjs +0 -16
  35. package/scripts/esbuild.mjs +0 -24
  36. package/scripts/fixImports.mjs +0 -44
  37. package/src/client.ts +0 -101
  38. package/src/custom-event-emitter.ts +0 -21
  39. package/src/scraper.ts +0 -137
  40. package/src/state-manager.ts +0 -308
  41. package/src/tournament-assistant-client.ts +0 -1553
  42. package/tsconfig.json +0 -27
  43. /package/{src/models/index.ts → dist/models/index.d.ts} +0 -0
@@ -0,0 +1,1167 @@
1
+ import { Client } from "./client.js";
2
+ import { CustomEventEmitter } from "./custom-event-emitter.js";
3
+ import { v4 as uuidv4 } from "uuid";
4
+ import { StateManager } from "./state-manager.js";
5
+ import { Response_ResponseType, } from "./models/responses.js";
6
+ import { versionCode } from "./constants.js";
7
+ import WebSocket from "ws";
8
+ // Created by Moon on 6/12/2022
9
+ export * from "./scraper.js";
10
+ export * from "./models/models.js";
11
+ export class TAClient extends CustomEventEmitter {
12
+ stateManager;
13
+ client;
14
+ token = "";
15
+ shouldHeartbeat = false;
16
+ heartbeatInterval;
17
+ constructor() {
18
+ super();
19
+ this.stateManager = new StateManager();
20
+ }
21
+ // --- State helpers --- //
22
+ get isConnected() {
23
+ return this.client?.isConnected ?? false;
24
+ }
25
+ get isConnecting() {
26
+ return this.client?.readyState === WebSocket.CONNECTING;
27
+ }
28
+ // --- Actions --- //
29
+ async connect(serverAddress, port) {
30
+ this.shouldHeartbeat = true;
31
+ this.client = new Client(serverAddress, port, this.token);
32
+ this.client.on("packetReceived", this.handlePacket);
33
+ this.client.on("disconnectedFromServer", () => {
34
+ clearInterval(this.heartbeatInterval);
35
+ console.info("Disconnected from server!");
36
+ this.emit("disconnectedFromServer", {});
37
+ });
38
+ this.client.on("failedToConnectToServer", () => {
39
+ console.error("Failed to connect to server!");
40
+ this.emit("failedToConnectToServer", {});
41
+ });
42
+ this.emit("connectingToServer", {});
43
+ // Create a promise that resolves when connected to the server
44
+ const connectPromise = new Promise((resolve, reject) => {
45
+ const onConnectedToServer = async () => {
46
+ const response = await this.sendRequest({
47
+ type: {
48
+ oneofKind: "connect",
49
+ connect: {
50
+ clientVersion: versionCode,
51
+ },
52
+ },
53
+ });
54
+ if (this.shouldHeartbeat) {
55
+ this.heartbeatInterval = setInterval(() => {
56
+ this.client?.send({
57
+ token: this.token,
58
+ from: this.stateManager.getSelfGuid(),
59
+ id: uuidv4(),
60
+ packet: {
61
+ oneofKind: "command",
62
+ command: {
63
+ type: {
64
+ oneofKind: "heartbeat",
65
+ heartbeat: true,
66
+ },
67
+ },
68
+ },
69
+ });
70
+ }, 10000);
71
+ }
72
+ this.client?.removeListener("connectedToServer", onConnectedToServer);
73
+ clearTimeout(timeout);
74
+ if (response.length <= 0) {
75
+ reject("Server timed out");
76
+ }
77
+ else {
78
+ resolve(response[0].response);
79
+ }
80
+ };
81
+ // Return what we have after 5 seconds
82
+ const createTimeout = (time) => {
83
+ return setTimeout(() => {
84
+ this.client?.removeListener("connectedToServer", onConnectedToServer);
85
+ reject("Server timed out");
86
+ }, time);
87
+ };
88
+ const timeout = createTimeout(30000);
89
+ this.client?.on("connectedToServer", onConnectedToServer);
90
+ });
91
+ this.client.connect();
92
+ return connectPromise;
93
+ }
94
+ disconnect() {
95
+ this.shouldHeartbeat = false;
96
+ console.info(`Disconnecting from server!`);
97
+ this.client?.disconnect();
98
+ }
99
+ setAuthToken(token) {
100
+ this.token = token;
101
+ this.client?.setToken(token);
102
+ }
103
+ forwardToUsers(packet, to) {
104
+ this.client?.send({
105
+ token: "",
106
+ from: packet.from,
107
+ id: packet.id,
108
+ packet: {
109
+ oneofKind: "forwardingPacket",
110
+ forwardingPacket: {
111
+ forwardTo: to,
112
+ packet,
113
+ },
114
+ },
115
+ });
116
+ }
117
+ sendCommand(command, to) {
118
+ const packet = {
119
+ token: this.token,
120
+ from: this.stateManager.getSelfGuid(),
121
+ id: uuidv4(),
122
+ packet: {
123
+ oneofKind: "command",
124
+ command,
125
+ },
126
+ };
127
+ this.forwardToUsers(packet, to);
128
+ }
129
+ async sendRequest(request, to) {
130
+ const packet = {
131
+ token: "",
132
+ from: this.stateManager.getSelfGuid(),
133
+ id: uuidv4(),
134
+ packet: {
135
+ oneofKind: "request",
136
+ request,
137
+ },
138
+ };
139
+ const responseDictionary = [];
140
+ // Create a promise that resolves when all responses are received
141
+ const responsesPromise = new Promise((resolve) => {
142
+ const addListeners = () => {
143
+ this.on("responseReceived", onResponseReceived);
144
+ this.on("authorizationRequestedFromServer", onAuthorizationRequested);
145
+ this.on("authorizedWithServer", onAuthroizedWithServer);
146
+ };
147
+ const removeListeners = () => {
148
+ this.removeListener("responseReceived", onResponseReceived);
149
+ this.removeListener("authorizationRequestedFromServer", onAuthorizationRequested);
150
+ this.removeListener("authorizedWithServer", onAuthroizedWithServer);
151
+ };
152
+ // Check that we got responses from all expected users
153
+ const checkResponses = () => {
154
+ const responseUsers = responseDictionary.map((x) => x.userId);
155
+ const expectedUsers = to ?? ["00000000-0000-0000-0000-000000000000"]; // If we didn't forward this to any users, we should expect a response from the server
156
+ if (responseUsers.length !== expectedUsers.length) {
157
+ return;
158
+ }
159
+ const sortedArr1 = responseUsers.slice().sort();
160
+ const sortedArr2 = expectedUsers.slice().sort();
161
+ for (let i = 0; i < sortedArr1.length; i++) {
162
+ if (sortedArr1[i] !== sortedArr2[i]) {
163
+ return;
164
+ }
165
+ }
166
+ // All responses are received, clean up and resolve
167
+ removeListeners();
168
+ clearTimeout(timeout);
169
+ resolve(responseDictionary);
170
+ };
171
+ // Add to the dictionary when the response is to this packet, and from an expected user
172
+ const onResponseReceived = (response) => {
173
+ const expectedUsers = to ?? ["00000000-0000-0000-0000-000000000000"]; // If we didn't forward this to any users, we should expect a response from the server
174
+ if (response.response.respondingToPacketId === packet.id &&
175
+ expectedUsers.includes(response.userId)) {
176
+ responseDictionary.push({
177
+ userId: response.userId,
178
+ response: response.response,
179
+ });
180
+ checkResponses();
181
+ }
182
+ };
183
+ // Return what we have after 5 seconds
184
+ const createTimeout = (time) => {
185
+ return setTimeout(() => {
186
+ removeListeners();
187
+ resolve(responseDictionary);
188
+ }, time);
189
+ };
190
+ const timeout = createTimeout(30000);
191
+ // If authorization is requested, we're assuming an external application will handle
192
+ // resetting the auth token, so we'll extend the timeout by 30 seconds and try again
193
+ // if a successful auth is noticed
194
+ const onAuthorizationRequested = () => {
195
+ clearTimeout(timeout);
196
+ createTimeout(30000);
197
+ };
198
+ // Retry on successful authorization
199
+ const onAuthroizedWithServer = () => {
200
+ sendRequest();
201
+ };
202
+ addListeners();
203
+ });
204
+ // Assume forwardToUsers emits the 'responseReceived' event asynchronously
205
+ const sendRequest = () => {
206
+ if (to) {
207
+ this.forwardToUsers(packet, to);
208
+ }
209
+ else {
210
+ this.client?.send(packet, to);
211
+ }
212
+ };
213
+ sendRequest();
214
+ return responsesPromise;
215
+ }
216
+ async sendResponse(response, to) {
217
+ const packet = {
218
+ token: this.token,
219
+ from: this.stateManager.getSelfGuid(),
220
+ id: uuidv4(),
221
+ packet: {
222
+ oneofKind: "response",
223
+ response,
224
+ },
225
+ };
226
+ if (to) {
227
+ this.forwardToUsers(packet, to);
228
+ }
229
+ else {
230
+ this.client?.send(packet, to);
231
+ }
232
+ }
233
+ // --- Commands --- //
234
+ playSong = (gameplayParameters, userIds) => {
235
+ this.sendCommand({
236
+ type: {
237
+ oneofKind: "playSong",
238
+ playSong: {
239
+ gameplayParameters,
240
+ },
241
+ },
242
+ }, userIds);
243
+ };
244
+ returnToMenu = (userIds) => {
245
+ this.sendCommand({
246
+ type: {
247
+ oneofKind: "returnToMenu",
248
+ returnToMenu: true,
249
+ },
250
+ }, userIds);
251
+ };
252
+ showLoadedImage = (userIds) => {
253
+ this.sendCommand({
254
+ type: {
255
+ oneofKind: "streamSyncShowImage",
256
+ streamSyncShowImage: true,
257
+ },
258
+ }, userIds);
259
+ };
260
+ delayTestFinished = (userIds) => {
261
+ this.sendCommand({
262
+ type: {
263
+ oneofKind: "delayTestFinish",
264
+ delayTestFinish: true,
265
+ },
266
+ }, userIds);
267
+ };
268
+ // --- Requests --- //
269
+ joinTournament = async (tournamentId) => {
270
+ const response = await this.sendRequest({
271
+ type: {
272
+ oneofKind: "join",
273
+ join: {
274
+ tournamentId,
275
+ password: "",
276
+ },
277
+ },
278
+ });
279
+ if (response.length <= 0) {
280
+ throw new Error("Server timed out");
281
+ }
282
+ return response[0].response;
283
+ };
284
+ getLeaderboard = async (tournamentId, qualifierId, mapId) => {
285
+ const response = await this.sendRequest({
286
+ type: {
287
+ oneofKind: "qualifierScores",
288
+ qualifierScores: {
289
+ tournamentId: tournamentId,
290
+ eventId: qualifierId,
291
+ mapId,
292
+ },
293
+ },
294
+ });
295
+ if (response.length <= 0) {
296
+ throw new Error("Server timed out");
297
+ }
298
+ return response[0].response;
299
+ };
300
+ loadSong = async (levelId, userIds) => {
301
+ const response = await this.sendRequest({
302
+ type: {
303
+ oneofKind: "loadSong",
304
+ loadSong: {
305
+ levelId,
306
+ customHostUrl: ""
307
+ },
308
+ },
309
+ }, userIds);
310
+ if (response.length <= 0) {
311
+ throw new Error("Server timed out, or no users responded");
312
+ }
313
+ return response;
314
+ };
315
+ loadImage = async (bitmap, userIds) => {
316
+ const response = await this.sendRequest({
317
+ type: {
318
+ oneofKind: "preloadImageForStreamSync",
319
+ preloadImageForStreamSync: {
320
+ fileId: uuidv4(),
321
+ data: bitmap,
322
+ compressed: false
323
+ },
324
+ },
325
+ }, userIds);
326
+ if (response.length <= 0) {
327
+ throw new Error("Server timed out, or no users responded");
328
+ }
329
+ return response;
330
+ };
331
+ // --- Packet Handler --- //
332
+ handlePacket = (packet) => {
333
+ this.stateManager.handlePacket(packet);
334
+ // if (packet.packet.oneofKind !== "acknowledgement") {
335
+ // const send: Packet = {
336
+ // token: this.token,
337
+ // from: this.stateManager.getSelfGuid(),
338
+ // id: uuidv4(),
339
+ // packet: {
340
+ // oneofKind: "acknowledgement",
341
+ // acknowledgement: {
342
+ // packetId: packet.id,
343
+ // type: Acknowledgement_AcknowledgementType.MessageReceived,
344
+ // },
345
+ // },
346
+ // };
347
+ // this.client?.send(send);
348
+ // }
349
+ if (packet.packet.oneofKind === "command") {
350
+ const command = packet.packet.command;
351
+ if (command.type.oneofKind === 'discordAuthorize') {
352
+ this.emit("authorizationRequestedFromServer", command.type.discordAuthorize);
353
+ }
354
+ }
355
+ else if (packet.packet.oneofKind === 'request') {
356
+ const request = packet.packet.request;
357
+ if (request.type.oneofKind === 'loadSong') {
358
+ this.emit("loadSongRequested", [packet.id, packet.from, request.type.loadSong]);
359
+ }
360
+ }
361
+ else if (packet.packet.oneofKind === "response") {
362
+ const response = packet.packet.response;
363
+ this.emit("responseReceived", {
364
+ userId: packet.from,
365
+ response: response,
366
+ });
367
+ if (response.details.oneofKind === "connect") {
368
+ const connect = response.details.connect;
369
+ if (response.type === Response_ResponseType.Success) {
370
+ console.info(`Successfully connected to server!`);
371
+ this.emit("connectedToServer", connect);
372
+ }
373
+ else {
374
+ console.error(`Failed to connect to server. Message: ${connect.message}`);
375
+ this.emit("failedToConnectToServer", {});
376
+ }
377
+ }
378
+ else if (response.details.oneofKind === "join") {
379
+ const join = response.details.join;
380
+ if (response.type === Response_ResponseType.Success) {
381
+ console.info(`Successfully joined tournament!`);
382
+ this.emit("joinedTournament", {});
383
+ }
384
+ else {
385
+ console.error(`Failed to join server. Message: ${join.message}`);
386
+ this.emit("failedToJoinTournament", {});
387
+ }
388
+ }
389
+ else if (response.details.oneofKind === "createTournament") {
390
+ const createTournament = response.details.createTournament;
391
+ if (response.type === Response_ResponseType.Success) {
392
+ console.info(`Successfully created tournament!`);
393
+ this.emit("createdTournament", {});
394
+ }
395
+ else {
396
+ console.error(`Failed to create tournament. Message: ${createTournament.message}`);
397
+ this.emit("failedToCreateTournament", {});
398
+ }
399
+ }
400
+ else if (response.details.oneofKind === "updateTournament") {
401
+ const updateTournament = response.details.updateTournament;
402
+ if (response.type === Response_ResponseType.Success) {
403
+ console.info(`Successfully modified tournament!`);
404
+ this.emit("updatedTournament", {});
405
+ }
406
+ else {
407
+ console.error(`Failed update tournament. Message: ${updateTournament.message}`);
408
+ this.emit("failedToUpdateTournament", {});
409
+ }
410
+ }
411
+ else if (response.details.oneofKind === "deleteTournament") {
412
+ const deleteTournament = response.details.deleteTournament;
413
+ if (response.type === Response_ResponseType.Success) {
414
+ console.info(`Successfully deleted tournament!`);
415
+ this.emit("deletedTournament", {});
416
+ }
417
+ else {
418
+ console.error(`Failed to delete tournament. Message: ${deleteTournament.message}`);
419
+ this.emit("failedToDeleteTournament", {});
420
+ }
421
+ }
422
+ else if (response.details.oneofKind === "createMatch") {
423
+ const createMatch = response.details.createMatch;
424
+ if (response.type === Response_ResponseType.Success) {
425
+ console.info(`Successfully created match!`);
426
+ this.emit("createdMatch", {});
427
+ }
428
+ else {
429
+ console.error(`Failed to create Match. Message: ${createMatch.message}`);
430
+ this.emit("failedToCreateMatch", {});
431
+ }
432
+ }
433
+ else if (response.details.oneofKind === "updateMatch") {
434
+ const updateMatch = response.details.updateMatch;
435
+ if (response.type === Response_ResponseType.Success) {
436
+ console.info(`Successfully modified match!`);
437
+ this.emit("updatedMatch", {});
438
+ }
439
+ else {
440
+ console.error(`Failed update Match. Message: ${updateMatch.message}`);
441
+ this.emit("failedToUpdateMatch", {});
442
+ }
443
+ }
444
+ else if (response.details.oneofKind === "deleteMatch") {
445
+ const deleteMatch = response.details.deleteMatch;
446
+ if (response.type === Response_ResponseType.Success) {
447
+ console.info(`Successfully deleted match!`);
448
+ this.emit("deletedMatch", {});
449
+ }
450
+ else {
451
+ console.error(`Failed to delete Match. Message: ${deleteMatch.message}`);
452
+ this.emit("failedToDeleteMatch", {});
453
+ }
454
+ }
455
+ else if (response.details.oneofKind === "createQualifierEvent") {
456
+ const createQualifierEvent = response.details.createQualifierEvent;
457
+ if (response.type === Response_ResponseType.Success) {
458
+ console.info(`Successfully created qualifier!`);
459
+ this.emit("createdQualifier", {});
460
+ }
461
+ else {
462
+ console.error(`Failed to create qualifier. Message: ${createQualifierEvent.message}`);
463
+ this.emit("failedToCreateQualifier", {});
464
+ }
465
+ }
466
+ else if (response.details.oneofKind === "updateQualifierEvent") {
467
+ const modifyQualifier = response.details.updateQualifierEvent;
468
+ if (response.type === Response_ResponseType.Success) {
469
+ console.info(`Successfully modified qualifier!`);
470
+ this.emit("updatedQualifier", {});
471
+ }
472
+ else {
473
+ console.error(`Failed to update qualifier. Message: ${modifyQualifier.message}`);
474
+ this.emit("failedToUpdateQualifier", {});
475
+ }
476
+ }
477
+ else if (response.details.oneofKind === "deleteQualifierEvent") {
478
+ const deleteQualifierEvent = response.details.deleteQualifierEvent;
479
+ if (response.type === Response_ResponseType.Success) {
480
+ console.info(`Successfully deleted qualifier!`);
481
+ this.emit("deletedQualifier", {});
482
+ }
483
+ else {
484
+ console.error(`Failed to delete qualifier. Message: ${deleteQualifierEvent.message}`);
485
+ this.emit("failedToDeleteQualifier", {});
486
+ }
487
+ }
488
+ }
489
+ else if (packet.packet.oneofKind === "push") {
490
+ const push = packet.packet.push;
491
+ if (push.data.oneofKind === "discordAuthorized") {
492
+ if (push.data.discordAuthorized.success) {
493
+ this.emit("authorizedWithServer", push.data.discordAuthorized.token);
494
+ }
495
+ else {
496
+ this.emit("failedToAuthorizeWithServer", {});
497
+ }
498
+ }
499
+ else if (push.data.oneofKind === "songFinished") {
500
+ this.emit("songFinished", push.data.songFinished);
501
+ }
502
+ }
503
+ };
504
+ // --- State Actions --- //
505
+ updateUser = async (tournamentId, user) => {
506
+ const response = await this.sendRequest({
507
+ type: {
508
+ oneofKind: "updateUser",
509
+ updateUser: {
510
+ tournamentId,
511
+ user,
512
+ },
513
+ },
514
+ });
515
+ if (response.length <= 0) {
516
+ throw new Error("Server timed out");
517
+ }
518
+ return response[0].response;
519
+ };
520
+ createMatch = async (tournamentId, match) => {
521
+ const response = await this.sendRequest({
522
+ type: {
523
+ oneofKind: "createMatch",
524
+ createMatch: {
525
+ tournamentId,
526
+ match,
527
+ },
528
+ },
529
+ });
530
+ // Checking oneOfKind here helps typescript identify what type of response it is
531
+ if (response.length <= 0) {
532
+ throw new Error("Server timed out");
533
+ }
534
+ return response[0].response;
535
+ };
536
+ addUserToMatch = async (tournamentId, matchId, userId) => {
537
+ const response = await this.sendRequest({
538
+ type: {
539
+ oneofKind: "addUserToMatch",
540
+ addUserToMatch: {
541
+ tournamentId,
542
+ matchId,
543
+ userId
544
+ },
545
+ },
546
+ });
547
+ if (response.length <= 0) {
548
+ throw new Error("Server timed out");
549
+ }
550
+ return response[0].response;
551
+ };
552
+ removeUserFromMatch = async (tournamentId, matchId, userId) => {
553
+ const response = await this.sendRequest({
554
+ type: {
555
+ oneofKind: "removeUserFromMatch",
556
+ removeUserFromMatch: {
557
+ tournamentId,
558
+ matchId,
559
+ userId
560
+ },
561
+ },
562
+ });
563
+ if (response.length <= 0) {
564
+ throw new Error("Server timed out");
565
+ }
566
+ return response[0].response;
567
+ };
568
+ setMatchLeader = async (tournamentId, matchId, userId) => {
569
+ const response = await this.sendRequest({
570
+ type: {
571
+ oneofKind: "setMatchLeader",
572
+ setMatchLeader: {
573
+ tournamentId,
574
+ matchId,
575
+ userId
576
+ },
577
+ },
578
+ });
579
+ if (response.length <= 0) {
580
+ throw new Error("Server timed out");
581
+ }
582
+ return response[0].response;
583
+ };
584
+ setMatchMap = async (tournamentId, matchId, map) => {
585
+ const response = await this.sendRequest({
586
+ type: {
587
+ oneofKind: "setMatchMap",
588
+ setMatchMap: {
589
+ tournamentId,
590
+ matchId,
591
+ map
592
+ },
593
+ },
594
+ });
595
+ if (response.length <= 0) {
596
+ throw new Error("Server timed out");
597
+ }
598
+ return response[0].response;
599
+ };
600
+ deleteMatch = async (tournamentId, matchId) => {
601
+ const response = await this.sendRequest({
602
+ type: {
603
+ oneofKind: "deleteMatch",
604
+ deleteMatch: {
605
+ tournamentId,
606
+ matchId,
607
+ },
608
+ },
609
+ });
610
+ if (response.length <= 0) {
611
+ throw new Error("Server timed out");
612
+ }
613
+ return response[0].response;
614
+ };
615
+ createQualifierEvent = async (tournamentId, event) => {
616
+ const response = await this.sendRequest({
617
+ type: {
618
+ oneofKind: "createQualifierEvent",
619
+ createQualifierEvent: {
620
+ tournamentId,
621
+ event,
622
+ },
623
+ },
624
+ });
625
+ if (response.length <= 0) {
626
+ throw new Error("Server timed out");
627
+ }
628
+ return response[0].response;
629
+ };
630
+ setQualifierName = async (tournamentId, qualifierId, qualifierName) => {
631
+ const response = await this.sendRequest({
632
+ type: {
633
+ oneofKind: "setQualifierName",
634
+ setQualifierName: {
635
+ tournamentId,
636
+ qualifierId,
637
+ qualifierName
638
+ },
639
+ },
640
+ });
641
+ if (response.length <= 0) {
642
+ throw new Error("Server timed out");
643
+ }
644
+ return response[0].response;
645
+ };
646
+ setQualifierImage = async (tournamentId, qualifierId, qualifierImage) => {
647
+ const response = await this.sendRequest({
648
+ type: {
649
+ oneofKind: "setQualifierImage",
650
+ setQualifierImage: {
651
+ tournamentId,
652
+ qualifierId,
653
+ qualifierImage
654
+ },
655
+ },
656
+ });
657
+ if (response.length <= 0) {
658
+ throw new Error("Server timed out");
659
+ }
660
+ return response[0].response;
661
+ };
662
+ setQualifierInfoChannel = async (tournamentId, qualifierId, infoChannel) => {
663
+ const response = await this.sendRequest({
664
+ type: {
665
+ oneofKind: "setQualifierInfoChannel",
666
+ setQualifierInfoChannel: {
667
+ tournamentId,
668
+ qualifierId,
669
+ infoChannel
670
+ },
671
+ },
672
+ });
673
+ if (response.length <= 0) {
674
+ throw new Error("Server timed out");
675
+ }
676
+ return response[0].response;
677
+ };
678
+ setQualifierFlags = async (tournamentId, qualifierId, qualifierFlags) => {
679
+ const response = await this.sendRequest({
680
+ type: {
681
+ oneofKind: "setQualifierFlags",
682
+ setQualifierFlags: {
683
+ tournamentId,
684
+ qualifierId,
685
+ qualifierFlags
686
+ },
687
+ },
688
+ });
689
+ if (response.length <= 0) {
690
+ throw new Error("Server timed out");
691
+ }
692
+ return response[0].response;
693
+ };
694
+ setQualifierLeaderboardSort = async (tournamentId, qualifierId, qualifierLeaderboardSort) => {
695
+ const response = await this.sendRequest({
696
+ type: {
697
+ oneofKind: "setQualifierLeaderboardSort",
698
+ setQualifierLeaderboardSort: {
699
+ tournamentId,
700
+ qualifierId,
701
+ qualifierLeaderboardSort
702
+ },
703
+ },
704
+ });
705
+ if (response.length <= 0) {
706
+ throw new Error("Server timed out");
707
+ }
708
+ return response[0].response;
709
+ };
710
+ addQualifierMap = async (tournamentId, qualifierId, map) => {
711
+ const response = await this.sendRequest({
712
+ type: {
713
+ oneofKind: "addQualifierMap",
714
+ addQualifierMap: {
715
+ tournamentId,
716
+ qualifierId,
717
+ map
718
+ },
719
+ },
720
+ });
721
+ if (response.length <= 0) {
722
+ throw new Error("Server timed out");
723
+ }
724
+ return response[0].response;
725
+ };
726
+ updateQualifierMap = async (tournamentId, qualifierId, map) => {
727
+ const response = await this.sendRequest({
728
+ type: {
729
+ oneofKind: "updateQualifierMap",
730
+ updateQualifierMap: {
731
+ tournamentId,
732
+ qualifierId,
733
+ map
734
+ },
735
+ },
736
+ });
737
+ if (response.length <= 0) {
738
+ throw new Error("Server timed out");
739
+ }
740
+ return response[0].response;
741
+ };
742
+ removeQualifierMap = async (tournamentId, qualifierId, mapId) => {
743
+ const response = await this.sendRequest({
744
+ type: {
745
+ oneofKind: "removeQualifierMap",
746
+ removeQualifierMap: {
747
+ tournamentId,
748
+ qualifierId,
749
+ mapId
750
+ },
751
+ },
752
+ });
753
+ if (response.length <= 0) {
754
+ throw new Error("Server timed out");
755
+ }
756
+ return response[0].response;
757
+ };
758
+ deleteQualifierEvent = async (tournamentId, qualifierId) => {
759
+ const response = await this.sendRequest({
760
+ type: {
761
+ oneofKind: "deleteQualifierEvent",
762
+ deleteQualifierEvent: {
763
+ tournamentId,
764
+ qualifierId,
765
+ },
766
+ },
767
+ });
768
+ if (response.length <= 0) {
769
+ throw new Error("Server timed out");
770
+ }
771
+ return response[0].response;
772
+ };
773
+ addAuthorizedUser = async (tournamentId, discordId, permissionFlags) => {
774
+ const response = await this.sendRequest({
775
+ type: {
776
+ oneofKind: "addAuthorizedUser",
777
+ addAuthorizedUser: {
778
+ tournamentId,
779
+ discordId,
780
+ permissionFlags
781
+ },
782
+ },
783
+ });
784
+ if (response.length <= 0) {
785
+ throw new Error("Server timed out");
786
+ }
787
+ return response[0].response;
788
+ };
789
+ removeAuthorizedUser = async (tournamentId, discordId) => {
790
+ const response = await this.sendRequest({
791
+ type: {
792
+ oneofKind: "removeAuthorizedUser",
793
+ removeAuthorizedUser: {
794
+ tournamentId,
795
+ discordId
796
+ },
797
+ },
798
+ });
799
+ if (response.length <= 0) {
800
+ throw new Error("Server timed out");
801
+ }
802
+ return response[0].response;
803
+ };
804
+ getAuthorizedUsers = async (tournamentId) => {
805
+ const response = await this.sendRequest({
806
+ type: {
807
+ oneofKind: "getAuthorizedUsers",
808
+ getAuthorizedUsers: {
809
+ tournamentId,
810
+ },
811
+ },
812
+ });
813
+ if (response.length <= 0) {
814
+ throw new Error("Server timed out");
815
+ }
816
+ return response[0].response;
817
+ };
818
+ getDiscordInfo = async (tournamentId, discordId) => {
819
+ const response = await this.sendRequest({
820
+ type: {
821
+ oneofKind: "getDiscordInfo",
822
+ getDiscordInfo: {
823
+ tournamentId,
824
+ discordId
825
+ },
826
+ },
827
+ });
828
+ if (response.length <= 0) {
829
+ throw new Error("Server timed out");
830
+ }
831
+ return response[0].response;
832
+ };
833
+ createTournament = async (tournament) => {
834
+ const response = await this.sendRequest({
835
+ type: {
836
+ oneofKind: "createTournament",
837
+ createTournament: {
838
+ tournament,
839
+ },
840
+ },
841
+ });
842
+ if (response.length <= 0) {
843
+ throw new Error("Server timed out");
844
+ }
845
+ return response[0].response;
846
+ };
847
+ setTournamentName = async (tournamentId, tournamentName) => {
848
+ const response = await this.sendRequest({
849
+ type: {
850
+ oneofKind: "setTournamentName",
851
+ setTournamentName: {
852
+ tournamentId,
853
+ tournamentName
854
+ },
855
+ },
856
+ });
857
+ if (response.length <= 0) {
858
+ throw new Error("Server timed out");
859
+ }
860
+ return response[0].response;
861
+ };
862
+ setTournamentImage = async (tournamentId, tournamentImage) => {
863
+ const response = await this.sendRequest({
864
+ type: {
865
+ oneofKind: "setTournamentImage",
866
+ setTournamentImage: {
867
+ tournamentId,
868
+ tournamentImage
869
+ },
870
+ },
871
+ });
872
+ if (response.length <= 0) {
873
+ throw new Error("Server timed out");
874
+ }
875
+ return response[0].response;
876
+ };
877
+ setTournamentEnableTeams = async (tournamentId, enableTeams) => {
878
+ const response = await this.sendRequest({
879
+ type: {
880
+ oneofKind: "setTournamentEnableTeams",
881
+ setTournamentEnableTeams: {
882
+ tournamentId,
883
+ enableTeams
884
+ },
885
+ },
886
+ });
887
+ if (response.length <= 0) {
888
+ throw new Error("Server timed out");
889
+ }
890
+ return response[0].response;
891
+ };
892
+ setTournamentEnablePools = async (tournamentId, enablePools) => {
893
+ const response = await this.sendRequest({
894
+ type: {
895
+ oneofKind: "setTournamentEnablePools",
896
+ setTournamentEnablePools: {
897
+ tournamentId,
898
+ enablePools
899
+ },
900
+ },
901
+ });
902
+ if (response.length <= 0) {
903
+ throw new Error("Server timed out");
904
+ }
905
+ return response[0].response;
906
+ };
907
+ setTournamentShowTournamentButton = async (tournamentId, showTournamentButton) => {
908
+ const response = await this.sendRequest({
909
+ type: {
910
+ oneofKind: "setTournamentShowTournamentButton",
911
+ setTournamentShowTournamentButton: {
912
+ tournamentId,
913
+ showTournamentButton
914
+ },
915
+ },
916
+ });
917
+ if (response.length <= 0) {
918
+ throw new Error("Server timed out");
919
+ }
920
+ return response[0].response;
921
+ };
922
+ setTournamentShowQualifierButton = async (tournamentId, showQualifierButton) => {
923
+ const response = await this.sendRequest({
924
+ type: {
925
+ oneofKind: "setTournamentShowQualifierButton",
926
+ setTournamentShowQualifierButton: {
927
+ tournamentId,
928
+ showQualifierButton
929
+ },
930
+ },
931
+ });
932
+ if (response.length <= 0) {
933
+ throw new Error("Server timed out");
934
+ }
935
+ return response[0].response;
936
+ };
937
+ setTournamentAllowUnauthorizedView = async (tournamentId, allowUnauthorizedView) => {
938
+ const response = await this.sendRequest({
939
+ type: {
940
+ oneofKind: "setTournamentAllowUnauthorizedView",
941
+ setTournamentAllowUnauthorizedView: {
942
+ tournamentId,
943
+ allowUnauthorizedView
944
+ },
945
+ },
946
+ });
947
+ if (response.length <= 0) {
948
+ throw new Error("Server timed out");
949
+ }
950
+ return response[0].response;
951
+ };
952
+ setTournamentScoreUpdateFrequency = async (tournamentId, scoreUpdateFrequency) => {
953
+ const response = await this.sendRequest({
954
+ type: {
955
+ oneofKind: "setTournamentScoreUpdateFrequency",
956
+ setTournamentScoreUpdateFrequency: {
957
+ tournamentId,
958
+ scoreUpdateFrequency
959
+ },
960
+ },
961
+ });
962
+ if (response.length <= 0) {
963
+ throw new Error("Server timed out");
964
+ }
965
+ return response[0].response;
966
+ };
967
+ setTournamentBannedMods = async (tournamentId, bannedMods) => {
968
+ const response = await this.sendRequest({
969
+ type: {
970
+ oneofKind: 'setTournamentBannedMods',
971
+ setTournamentBannedMods: {
972
+ tournamentId,
973
+ bannedMods
974
+ },
975
+ },
976
+ });
977
+ if (response.length <= 0) {
978
+ throw new Error("Server timed out");
979
+ }
980
+ return response[0].response;
981
+ };
982
+ addTournamentTeam = async (tournamentId, team) => {
983
+ const response = await this.sendRequest({
984
+ type: {
985
+ oneofKind: "addTournamentTeam",
986
+ addTournamentTeam: {
987
+ tournamentId,
988
+ team
989
+ },
990
+ },
991
+ });
992
+ if (response.length <= 0) {
993
+ throw new Error("Server timed out");
994
+ }
995
+ return response[0].response;
996
+ };
997
+ setTournamentTeamName = async (tournamentId, teamId, teamName) => {
998
+ const response = await this.sendRequest({
999
+ type: {
1000
+ oneofKind: "setTournamentTeamName",
1001
+ setTournamentTeamName: {
1002
+ tournamentId,
1003
+ teamId,
1004
+ teamName
1005
+ },
1006
+ },
1007
+ });
1008
+ if (response.length <= 0) {
1009
+ throw new Error("Server timed out");
1010
+ }
1011
+ return response[0].response;
1012
+ };
1013
+ setTournamentTeamImage = async (tournamentId, teamId, teamImage) => {
1014
+ const response = await this.sendRequest({
1015
+ type: {
1016
+ oneofKind: "setTournamentTeamImage",
1017
+ setTournamentTeamImage: {
1018
+ tournamentId,
1019
+ teamId,
1020
+ teamImage
1021
+ },
1022
+ },
1023
+ });
1024
+ if (response.length <= 0) {
1025
+ throw new Error("Server timed out");
1026
+ }
1027
+ return response[0].response;
1028
+ };
1029
+ removeTournamentTeam = async (tournamentId, teamId) => {
1030
+ const response = await this.sendRequest({
1031
+ type: {
1032
+ oneofKind: "removeTournamentTeam",
1033
+ removeTournamentTeam: {
1034
+ tournamentId,
1035
+ teamId
1036
+ },
1037
+ },
1038
+ });
1039
+ if (response.length <= 0) {
1040
+ throw new Error("Server timed out");
1041
+ }
1042
+ return response[0].response;
1043
+ };
1044
+ addTournamentPool = async (tournamentId, pool) => {
1045
+ const response = await this.sendRequest({
1046
+ type: {
1047
+ oneofKind: "addTournamentPool",
1048
+ addTournamentPool: {
1049
+ tournamentId,
1050
+ pool
1051
+ },
1052
+ },
1053
+ });
1054
+ if (response.length <= 0) {
1055
+ throw new Error("Server timed out");
1056
+ }
1057
+ return response[0].response;
1058
+ };
1059
+ setTournamentPoolName = async (tournamentId, poolId, poolName) => {
1060
+ const response = await this.sendRequest({
1061
+ type: {
1062
+ oneofKind: "setTournamentPoolName",
1063
+ setTournamentPoolName: {
1064
+ tournamentId,
1065
+ poolId,
1066
+ poolName
1067
+ },
1068
+ },
1069
+ });
1070
+ if (response.length <= 0) {
1071
+ throw new Error("Server timed out");
1072
+ }
1073
+ return response[0].response;
1074
+ };
1075
+ addTournamentPoolMap = async (tournamentId, poolId, map) => {
1076
+ const response = await this.sendRequest({
1077
+ type: {
1078
+ oneofKind: "addTournamentPoolMap",
1079
+ addTournamentPoolMap: {
1080
+ tournamentId,
1081
+ poolId,
1082
+ map
1083
+ },
1084
+ },
1085
+ });
1086
+ if (response.length <= 0) {
1087
+ throw new Error("Server timed out");
1088
+ }
1089
+ return response[0].response;
1090
+ };
1091
+ updateTournamentPoolMap = async (tournamentId, poolId, map) => {
1092
+ const response = await this.sendRequest({
1093
+ type: {
1094
+ oneofKind: "updateTournamentPoolMap",
1095
+ updateTournamentPoolMap: {
1096
+ tournamentId,
1097
+ poolId,
1098
+ map
1099
+ },
1100
+ },
1101
+ });
1102
+ if (response.length <= 0) {
1103
+ throw new Error("Server timed out");
1104
+ }
1105
+ return response[0].response;
1106
+ };
1107
+ removeTournamentPoolMap = async (tournamentId, poolId, mapId) => {
1108
+ const response = await this.sendRequest({
1109
+ type: {
1110
+ oneofKind: "removeTournamentPoolMap",
1111
+ removeTournamentPoolMap: {
1112
+ tournamentId,
1113
+ poolId,
1114
+ mapId
1115
+ },
1116
+ },
1117
+ });
1118
+ if (response.length <= 0) {
1119
+ throw new Error("Server timed out");
1120
+ }
1121
+ return response[0].response;
1122
+ };
1123
+ removeTournamentPool = async (tournamentId, poolId) => {
1124
+ const response = await this.sendRequest({
1125
+ type: {
1126
+ oneofKind: "removeTournamentPool",
1127
+ removeTournamentPool: {
1128
+ tournamentId,
1129
+ poolId
1130
+ },
1131
+ },
1132
+ });
1133
+ if (response.length <= 0) {
1134
+ throw new Error("Server timed out");
1135
+ }
1136
+ return response[0].response;
1137
+ };
1138
+ deleteTournament = async (tournamentId) => {
1139
+ const response = await this.sendRequest({
1140
+ type: {
1141
+ oneofKind: "deleteTournament",
1142
+ deleteTournament: {
1143
+ tournamentId,
1144
+ },
1145
+ },
1146
+ });
1147
+ if (response.length <= 0) {
1148
+ throw new Error("Server timed out");
1149
+ }
1150
+ return response[0].response;
1151
+ };
1152
+ addServer = async (server, authToken) => {
1153
+ const response = await this.sendRequest({
1154
+ type: {
1155
+ oneofKind: "addServer",
1156
+ addServer: {
1157
+ server,
1158
+ authToken: authToken ?? "",
1159
+ },
1160
+ },
1161
+ });
1162
+ if (response.length <= 0) {
1163
+ throw new Error("Server timed out");
1164
+ }
1165
+ return response[0].response;
1166
+ };
1167
+ }