moons-ta-client 1.1.2 → 1.1.4

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.
@@ -1,4 +1,4 @@
1
1
  export declare const masterAddress = "server.tournamentassistant.net";
2
2
  export declare const masterPort = "8676";
3
- export declare const version = "1.1.2";
4
- export declare const versionCode = 112;
3
+ export declare const version = "1.1.4";
4
+ export declare const versionCode = 114;
package/dist/constants.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export const masterAddress = "server.tournamentassistant.net";
2
2
  export const masterPort = "8676";
3
- export const version = "1.1.2";
4
- export const versionCode = 112;
3
+ export const version = "1.1.4";
4
+ export const versionCode = 114;
package/dist/index.d.ts CHANGED
@@ -347,37 +347,57 @@ declare enum QualifierEvent_LeaderboardSort {
347
347
  */
348
348
  ModifiedScoreAscending = 1,
349
349
  /**
350
- * @generated from protobuf enum value: NotesMissed = 2;
350
+ * @generated from protobuf enum value: ModifiedScoreTarget = 2;
351
351
  */
352
- NotesMissed = 2,
352
+ ModifiedScoreTarget = 2,
353
353
  /**
354
- * @generated from protobuf enum value: NotesMissedAscending = 3;
354
+ * @generated from protobuf enum value: NotesMissed = 3;
355
355
  */
356
- NotesMissedAscending = 3,
356
+ NotesMissed = 3,
357
357
  /**
358
- * @generated from protobuf enum value: BadCuts = 4;
358
+ * @generated from protobuf enum value: NotesMissedAscending = 4;
359
359
  */
360
- BadCuts = 4,
360
+ NotesMissedAscending = 4,
361
361
  /**
362
- * @generated from protobuf enum value: BadCutsAscending = 5;
362
+ * @generated from protobuf enum value: NotesMissedTarget = 5;
363
363
  */
364
- BadCutsAscending = 5,
364
+ NotesMissedTarget = 5,
365
365
  /**
366
- * @generated from protobuf enum value: MaxCombo = 6;
366
+ * @generated from protobuf enum value: BadCuts = 6;
367
367
  */
368
- MaxCombo = 6,
368
+ BadCuts = 6,
369
369
  /**
370
- * @generated from protobuf enum value: MaxComboAscending = 7;
370
+ * @generated from protobuf enum value: BadCutsAscending = 7;
371
371
  */
372
- MaxComboAscending = 7,
372
+ BadCutsAscending = 7,
373
373
  /**
374
- * @generated from protobuf enum value: GoodCuts = 8;
374
+ * @generated from protobuf enum value: BadCutsTarget = 8;
375
375
  */
376
- GoodCuts = 8,
376
+ BadCutsTarget = 8,
377
377
  /**
378
- * @generated from protobuf enum value: GoodCutsAscending = 9;
378
+ * @generated from protobuf enum value: MaxCombo = 9;
379
379
  */
380
- GoodCutsAscending = 9
380
+ MaxCombo = 9,
381
+ /**
382
+ * @generated from protobuf enum value: MaxComboAscending = 10;
383
+ */
384
+ MaxComboAscending = 10,
385
+ /**
386
+ * @generated from protobuf enum value: MaxComboTarget = 11;
387
+ */
388
+ MaxComboTarget = 11,
389
+ /**
390
+ * @generated from protobuf enum value: GoodCuts = 12;
391
+ */
392
+ GoodCuts = 12,
393
+ /**
394
+ * @generated from protobuf enum value: GoodCutsAscending = 13;
395
+ */
396
+ GoodCutsAscending = 13,
397
+ /**
398
+ * @generated from protobuf enum value: GoodCutsTarget = 14;
399
+ */
400
+ GoodCutsTarget = 14
381
401
  }
382
402
  /**
383
403
  * @generated from protobuf enum proto.models.Permissions
@@ -566,6 +586,10 @@ interface GameplayParameters {
566
586
  * @generated from protobuf field: bool use_sync = 10;
567
587
  */
568
588
  useSync: boolean;
589
+ /**
590
+ * @generated from protobuf field: int32 target = 11;
591
+ */
592
+ target: number;
569
593
  }
570
594
  /**
571
595
  * @generated MessageType for protobuf message proto.models.GameplayParameters
@@ -4534,7 +4558,7 @@ declare class TAClient extends CustomEventEmitter<TAClientEvents> {
4534
4558
  delayTestFinished: (userIds: string[]) => void;
4535
4559
  joinTournament: (tournamentId: string) => Promise<Response>;
4536
4560
  getLeaderboard: (tournamentId: string, qualifierId: string, mapId: string) => Promise<Response>;
4537
- loadSong: (levelId: string, userIds: string[]) => Promise<ResponseFromUser[]>;
4561
+ loadSong: (levelId: string, userIds: string[], timeout?: number) => Promise<ResponseFromUser[]>;
4538
4562
  loadImage: (bitmap: Uint8Array, userIds: string[]) => Promise<ResponseFromUser[]>;
4539
4563
  private handlePacket;
4540
4564
  updateUser: (tournamentId: string, user: User) => Promise<Response>;
@@ -4584,7 +4608,7 @@ declare class TAClient extends CustomEventEmitter<TAClientEvents> {
4584
4608
 
4585
4609
  declare const masterAddress = "server.tournamentassistant.net";
4586
4610
  declare const masterPort = "8676";
4587
- declare const version = "1.1.2";
4588
- declare const versionCode = 112;
4611
+ declare const version = "1.1.4";
4612
+ declare const versionCode = 114;
4589
4613
 
4590
4614
  export { Acknowledgement, Acknowledgement_AcknowledgementType, Beatmap, Channel, Characteristic, Command, Command_PlaySong, Command_SendBotMessage, CoreServer, CustomEventEmitter, DiscordUser, Event, Event_MatchCreated, Event_MatchDeleted, Event_MatchUpdated, Event_QualifierCreated, Event_QualifierDeleted, Event_QualifierUpdated, Event_ServerAdded, Event_ServerDeleted, Event_TournamentCreated, Event_TournamentDeleted, Event_TournamentUpdated, Event_UserAdded, Event_UserLeft, Event_UserUpdated, ForwardingPacket, GameplayModifiers, GameplayModifiers_GameOptions, GameplayParameters, Guild, LeaderboardEntry, Map, Match, ModalOption, Packet, Permissions, PlayerSpecificSettings, PlayerSpecificSettings_ArcVisibilityType, PlayerSpecificSettings_NoteJumpDurationTypeSettings, PlayerSpecificSettings_PlayerOptions, Push, Push_SongFinished, Push_SongFinished_CompletionType, QualifierEvent, QualifierEvent_EventSettings, QualifierEvent_LeaderboardSort, RealtimeScore, Request, Request_AddAuthorizedUser, Request_AddAuthorizedUserPermission, Request_AddQualifierMaps, Request_AddServer, Request_AddTournamentPool, Request_AddTournamentPoolMaps, Request_AddTournamentTeam, Request_AddUserToMatch, Request_Connect, Request_CreateMatch, Request_CreateQualifierEvent, Request_CreateTournament, Request_DeleteMatch, Request_DeleteQualifierEvent, Request_DeleteTournament, Request_GetAuthorizedUsers, Request_GetDiscordInfo, Request_Join, Request_LoadSong, Request_PreloadImageForStreamSync, Request_QualifierScores, Request_RemainingAttempts, Request_RemoveAuthorizedUser, Request_RemoveAuthorizedUserPermission, Request_RemoveQualifierMap, Request_RemoveTournamentPool, Request_RemoveTournamentPoolMap, Request_RemoveTournamentTeam, Request_RemoveUserFromMatch, Request_SetMatchLeader, Request_SetMatchMap, Request_SetQualifierFlags, Request_SetQualifierImage, Request_SetQualifierInfoChannel, Request_SetQualifierLeaderboardSort, Request_SetQualifierName, Request_SetTournamentAllowUnauthorizedView, Request_SetTournamentBannedMods, Request_SetTournamentEnablePools, Request_SetTournamentEnableTeams, Request_SetTournamentImage, Request_SetTournamentName, Request_SetTournamentPoolName, Request_SetTournamentScoreUpdateFrequency, Request_SetTournamentShowQualifierButton, Request_SetTournamentShowTournamentButton, Request_SetTournamentTeamImage, Request_SetTournamentTeamName, Request_ShowModal, Request_SubmitQualifierScore, Request_UpdateQualifierMap, Request_UpdateTournamentPoolMap, Request_UpdateUser, Response, type ResponseFromUser, Response_AddAuthorizedUser, Response_AddServer, Response_Connect, Response_Connect_ConnectFailReason, Response_CreateMatch, Response_CreateQualifierEvent, Response_CreateTournament, Response_DeleteMatch, Response_DeleteQualifierEvent, Response_DeleteTournament, Response_GetAuthorizedUsers, Response_GetAuthorizedUsers_AuthroizedUser, Response_GetDiscordInfo, Response_Join, Response_Join_JoinFailReason, Response_LeaderboardEntries, Response_LoadSong, Response_PreloadImageForStreamSync, Response_RemainingAttempts, Response_RemoveAuthorizedUser, Response_ResponseType, Response_ShowModal, Response_UpdateAuthorizedUser, Response_UpdateMatch, Response_UpdateQualifierEvent, Response_UpdateTournament, Response_UpdateUser, ScoreTrackerHand, State, TAClient, Tournament, Tournament_TournamentSettings, Tournament_TournamentSettings_Pool, Tournament_TournamentSettings_Team, User, User_ClientTypes, User_DiscordInfo, User_DownloadStates, User_PlayStates, User_Point, getTournaments, masterAddress, masterPort, version, versionCode };
package/dist/index.esm.js CHANGED
@@ -5067,14 +5067,19 @@ var QualifierEvent_EventSettings = /* @__PURE__ */ ((QualifierEvent_EventSetting
5067
5067
  var QualifierEvent_LeaderboardSort = /* @__PURE__ */ ((QualifierEvent_LeaderboardSort2) => {
5068
5068
  QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["ModifiedScore"] = 0] = "ModifiedScore";
5069
5069
  QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["ModifiedScoreAscending"] = 1] = "ModifiedScoreAscending";
5070
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["NotesMissed"] = 2] = "NotesMissed";
5071
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["NotesMissedAscending"] = 3] = "NotesMissedAscending";
5072
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["BadCuts"] = 4] = "BadCuts";
5073
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["BadCutsAscending"] = 5] = "BadCutsAscending";
5074
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["MaxCombo"] = 6] = "MaxCombo";
5075
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["MaxComboAscending"] = 7] = "MaxComboAscending";
5076
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["GoodCuts"] = 8] = "GoodCuts";
5077
- QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["GoodCutsAscending"] = 9] = "GoodCutsAscending";
5070
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["ModifiedScoreTarget"] = 2] = "ModifiedScoreTarget";
5071
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["NotesMissed"] = 3] = "NotesMissed";
5072
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["NotesMissedAscending"] = 4] = "NotesMissedAscending";
5073
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["NotesMissedTarget"] = 5] = "NotesMissedTarget";
5074
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["BadCuts"] = 6] = "BadCuts";
5075
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["BadCutsAscending"] = 7] = "BadCutsAscending";
5076
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["BadCutsTarget"] = 8] = "BadCutsTarget";
5077
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["MaxCombo"] = 9] = "MaxCombo";
5078
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["MaxComboAscending"] = 10] = "MaxComboAscending";
5079
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["MaxComboTarget"] = 11] = "MaxComboTarget";
5080
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["GoodCuts"] = 12] = "GoodCuts";
5081
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["GoodCutsAscending"] = 13] = "GoodCutsAscending";
5082
+ QualifierEvent_LeaderboardSort2[QualifierEvent_LeaderboardSort2["GoodCutsTarget"] = 14] = "GoodCutsTarget";
5078
5083
  return QualifierEvent_LeaderboardSort2;
5079
5084
  })(QualifierEvent_LeaderboardSort || {});
5080
5085
  var Permissions = /* @__PURE__ */ ((Permissions2) => {
@@ -5455,11 +5460,18 @@ var GameplayParameters$Type = class extends MessageType {
5455
5460
  kind: "scalar",
5456
5461
  T: 8
5457
5462
  /*ScalarType.BOOL*/
5463
+ },
5464
+ {
5465
+ no: 11,
5466
+ name: "target",
5467
+ kind: "scalar",
5468
+ T: 5
5469
+ /*ScalarType.INT32*/
5458
5470
  }
5459
5471
  ]);
5460
5472
  }
5461
5473
  create(value) {
5462
- const message = { attempts: 0, showScoreboard: false, disablePause: false, disableFail: false, disableScoresaberSubmission: false, disableCustomNotesOnStream: false, useSync: false };
5474
+ const message = { attempts: 0, showScoreboard: false, disablePause: false, disableFail: false, disableScoresaberSubmission: false, disableCustomNotesOnStream: false, useSync: false, target: 0 };
5463
5475
  globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
5464
5476
  if (value !== void 0)
5465
5477
  reflectionMergePartial(this, message, value);
@@ -5510,6 +5522,10 @@ var GameplayParameters$Type = class extends MessageType {
5510
5522
  10:
5511
5523
  message.useSync = reader.bool();
5512
5524
  break;
5525
+ case /* int32 target */
5526
+ 11:
5527
+ message.target = reader.int32();
5528
+ break;
5513
5529
  default:
5514
5530
  let u2 = options.readUnknownField;
5515
5531
  if (u2 === "throw")
@@ -5542,6 +5558,8 @@ var GameplayParameters$Type = class extends MessageType {
5542
5558
  writer.tag(9, WireType.Varint).bool(message.disableCustomNotesOnStream);
5543
5559
  if (message.useSync !== false)
5544
5560
  writer.tag(10, WireType.Varint).bool(message.useSync);
5561
+ if (message.target !== 0)
5562
+ writer.tag(11, WireType.Varint).int32(message.target);
5545
5563
  let u2 = options.writeUnknownFields;
5546
5564
  if (u2 !== false)
5547
5565
  (u2 == true ? UnknownFieldHandler.onWrite : u2)(this.typeName, message, writer);
@@ -15125,8 +15143,8 @@ init_buffer2();
15125
15143
  init_process2();
15126
15144
  var masterAddress = "server.tournamentassistant.net";
15127
15145
  var masterPort = "8676";
15128
- var version = "1.1.2";
15129
- var versionCode = 112;
15146
+ var version = "1.1.4";
15147
+ var versionCode = 114;
15130
15148
 
15131
15149
  // src/tournament-assistant-client.ts
15132
15150
  var import_ws2 = __toESM(require_ws(), 1);
@@ -15348,7 +15366,7 @@ var TAClient = class extends CustomEventEmitter {
15348
15366
  };
15349
15367
  this.forwardToUsers(packet, to);
15350
15368
  }
15351
- async sendRequest(request, to) {
15369
+ async sendRequest(request, to, timeout = 3e4) {
15352
15370
  const packet = {
15353
15371
  token: "",
15354
15372
  // Overridden in this.send()
@@ -15372,22 +15390,29 @@ var TAClient = class extends CustomEventEmitter {
15372
15390
  onAuthorizationRequested
15373
15391
  );
15374
15392
  };
15375
- const checkResponses = () => {
15393
+ const getUnrespondedUsers = () => {
15376
15394
  const responseUsers = responseDictionary.map((x) => x.userId);
15377
15395
  const expectedUsers = to ?? ["00000000-0000-0000-0000-000000000000"];
15378
- if (responseUsers.length !== expectedUsers.length) {
15379
- return;
15396
+ if (responseUsers.length === expectedUsers.length) {
15397
+ return [];
15380
15398
  }
15381
15399
  const sortedArr1 = responseUsers.slice().sort();
15382
15400
  const sortedArr2 = expectedUsers.slice().sort();
15383
- for (let i2 = 0; i2 < sortedArr1.length; i2++) {
15384
- if (sortedArr1[i2] !== sortedArr2[i2]) {
15385
- return;
15401
+ let waitingForUsers = [];
15402
+ for (let i2 = 0; i2 < sortedArr2.length; i2++) {
15403
+ if (i2 > sortedArr1.length || sortedArr2[i2] !== sortedArr1[i2]) {
15404
+ waitingForUsers.push(sortedArr2[i2]);
15386
15405
  }
15387
15406
  }
15388
- removeListeners();
15389
- clearTimeout(timeout);
15390
- resolve(responseDictionary);
15407
+ return waitingForUsers;
15408
+ };
15409
+ const checkResponses = () => {
15410
+ const waitingForUsers = getUnrespondedUsers();
15411
+ if (waitingForUsers.length === 0) {
15412
+ removeListeners();
15413
+ clearTimeout(timeoutTimer);
15414
+ resolve(responseDictionary);
15415
+ }
15391
15416
  };
15392
15417
  const onResponseReceived = (response) => {
15393
15418
  const expectedUsers = to ?? ["00000000-0000-0000-0000-000000000000"];
@@ -15401,13 +15426,26 @@ var TAClient = class extends CustomEventEmitter {
15401
15426
  };
15402
15427
  const createTimeout = (time) => {
15403
15428
  return setTimeout(() => {
15429
+ const unrespondedUsers = getUnrespondedUsers();
15430
+ for (let user of unrespondedUsers) {
15431
+ responseDictionary.push({
15432
+ userId: user,
15433
+ response: {
15434
+ type: 0 /* Fail */,
15435
+ respondingToPacketId: packet.id,
15436
+ details: {
15437
+ oneofKind: void 0
15438
+ }
15439
+ }
15440
+ });
15441
+ }
15404
15442
  removeListeners();
15405
15443
  resolve(responseDictionary);
15406
15444
  }, time);
15407
15445
  };
15408
- const timeout = createTimeout(3e4);
15446
+ const timeoutTimer = createTimeout(timeout);
15409
15447
  const onAuthorizationRequested = () => {
15410
- clearTimeout(timeout);
15448
+ clearTimeout(timeoutTimer);
15411
15449
  throw "Authorization token invalid or not provided";
15412
15450
  };
15413
15451
  addListeners();
@@ -15507,7 +15545,7 @@ var TAClient = class extends CustomEventEmitter {
15507
15545
  }
15508
15546
  return response[0].response;
15509
15547
  };
15510
- loadSong = async (levelId, userIds) => {
15548
+ loadSong = async (levelId, userIds, timeout) => {
15511
15549
  const response = await this.sendRequest({
15512
15550
  type: {
15513
15551
  oneofKind: "loadSong",
@@ -15516,7 +15554,7 @@ var TAClient = class extends CustomEventEmitter {
15516
15554
  customHostUrl: ""
15517
15555
  }
15518
15556
  }
15519
- }, userIds);
15557
+ }, userIds, timeout);
15520
15558
  if (response.length <= 0) {
15521
15559
  throw new Error("Server timed out, or no users responded");
15522
15560
  }
@@ -309,6 +309,10 @@ export interface GameplayParameters {
309
309
  * @generated from protobuf field: bool use_sync = 10;
310
310
  */
311
311
  useSync: boolean;
312
+ /**
313
+ * @generated from protobuf field: int32 target = 11;
314
+ */
315
+ target: number;
312
316
  }
313
317
  /**
314
318
  * @generated from protobuf message proto.models.Map
@@ -557,37 +561,57 @@ export declare enum QualifierEvent_LeaderboardSort {
557
561
  */
558
562
  ModifiedScoreAscending = 1,
559
563
  /**
560
- * @generated from protobuf enum value: NotesMissed = 2;
564
+ * @generated from protobuf enum value: ModifiedScoreTarget = 2;
565
+ */
566
+ ModifiedScoreTarget = 2,
567
+ /**
568
+ * @generated from protobuf enum value: NotesMissed = 3;
569
+ */
570
+ NotesMissed = 3,
571
+ /**
572
+ * @generated from protobuf enum value: NotesMissedAscending = 4;
573
+ */
574
+ NotesMissedAscending = 4,
575
+ /**
576
+ * @generated from protobuf enum value: NotesMissedTarget = 5;
577
+ */
578
+ NotesMissedTarget = 5,
579
+ /**
580
+ * @generated from protobuf enum value: BadCuts = 6;
581
+ */
582
+ BadCuts = 6,
583
+ /**
584
+ * @generated from protobuf enum value: BadCutsAscending = 7;
561
585
  */
562
- NotesMissed = 2,
586
+ BadCutsAscending = 7,
563
587
  /**
564
- * @generated from protobuf enum value: NotesMissedAscending = 3;
588
+ * @generated from protobuf enum value: BadCutsTarget = 8;
565
589
  */
566
- NotesMissedAscending = 3,
590
+ BadCutsTarget = 8,
567
591
  /**
568
- * @generated from protobuf enum value: BadCuts = 4;
592
+ * @generated from protobuf enum value: MaxCombo = 9;
569
593
  */
570
- BadCuts = 4,
594
+ MaxCombo = 9,
571
595
  /**
572
- * @generated from protobuf enum value: BadCutsAscending = 5;
596
+ * @generated from protobuf enum value: MaxComboAscending = 10;
573
597
  */
574
- BadCutsAscending = 5,
598
+ MaxComboAscending = 10,
575
599
  /**
576
- * @generated from protobuf enum value: MaxCombo = 6;
600
+ * @generated from protobuf enum value: MaxComboTarget = 11;
577
601
  */
578
- MaxCombo = 6,
602
+ MaxComboTarget = 11,
579
603
  /**
580
- * @generated from protobuf enum value: MaxComboAscending = 7;
604
+ * @generated from protobuf enum value: GoodCuts = 12;
581
605
  */
582
- MaxComboAscending = 7,
606
+ GoodCuts = 12,
583
607
  /**
584
- * @generated from protobuf enum value: GoodCuts = 8;
608
+ * @generated from protobuf enum value: GoodCutsAscending = 13;
585
609
  */
586
- GoodCuts = 8,
610
+ GoodCutsAscending = 13,
587
611
  /**
588
- * @generated from protobuf enum value: GoodCutsAscending = 9;
612
+ * @generated from protobuf enum value: GoodCutsTarget = 14;
589
613
  */
590
- GoodCutsAscending = 9
614
+ GoodCutsTarget = 14
591
615
  }
592
616
  /**
593
617
  * @generated from protobuf message proto.models.CoreServer
@@ -282,37 +282,57 @@ export var QualifierEvent_LeaderboardSort;
282
282
  */
283
283
  QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["ModifiedScoreAscending"] = 1] = "ModifiedScoreAscending";
284
284
  /**
285
- * @generated from protobuf enum value: NotesMissed = 2;
285
+ * @generated from protobuf enum value: ModifiedScoreTarget = 2;
286
286
  */
287
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["NotesMissed"] = 2] = "NotesMissed";
287
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["ModifiedScoreTarget"] = 2] = "ModifiedScoreTarget";
288
288
  /**
289
- * @generated from protobuf enum value: NotesMissedAscending = 3;
289
+ * @generated from protobuf enum value: NotesMissed = 3;
290
290
  */
291
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["NotesMissedAscending"] = 3] = "NotesMissedAscending";
291
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["NotesMissed"] = 3] = "NotesMissed";
292
292
  /**
293
- * @generated from protobuf enum value: BadCuts = 4;
293
+ * @generated from protobuf enum value: NotesMissedAscending = 4;
294
294
  */
295
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["BadCuts"] = 4] = "BadCuts";
295
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["NotesMissedAscending"] = 4] = "NotesMissedAscending";
296
296
  /**
297
- * @generated from protobuf enum value: BadCutsAscending = 5;
297
+ * @generated from protobuf enum value: NotesMissedTarget = 5;
298
298
  */
299
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["BadCutsAscending"] = 5] = "BadCutsAscending";
299
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["NotesMissedTarget"] = 5] = "NotesMissedTarget";
300
300
  /**
301
- * @generated from protobuf enum value: MaxCombo = 6;
301
+ * @generated from protobuf enum value: BadCuts = 6;
302
302
  */
303
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["MaxCombo"] = 6] = "MaxCombo";
303
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["BadCuts"] = 6] = "BadCuts";
304
304
  /**
305
- * @generated from protobuf enum value: MaxComboAscending = 7;
305
+ * @generated from protobuf enum value: BadCutsAscending = 7;
306
306
  */
307
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["MaxComboAscending"] = 7] = "MaxComboAscending";
307
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["BadCutsAscending"] = 7] = "BadCutsAscending";
308
308
  /**
309
- * @generated from protobuf enum value: GoodCuts = 8;
309
+ * @generated from protobuf enum value: BadCutsTarget = 8;
310
310
  */
311
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["GoodCuts"] = 8] = "GoodCuts";
311
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["BadCutsTarget"] = 8] = "BadCutsTarget";
312
312
  /**
313
- * @generated from protobuf enum value: GoodCutsAscending = 9;
313
+ * @generated from protobuf enum value: MaxCombo = 9;
314
314
  */
315
- QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["GoodCutsAscending"] = 9] = "GoodCutsAscending";
315
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["MaxCombo"] = 9] = "MaxCombo";
316
+ /**
317
+ * @generated from protobuf enum value: MaxComboAscending = 10;
318
+ */
319
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["MaxComboAscending"] = 10] = "MaxComboAscending";
320
+ /**
321
+ * @generated from protobuf enum value: MaxComboTarget = 11;
322
+ */
323
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["MaxComboTarget"] = 11] = "MaxComboTarget";
324
+ /**
325
+ * @generated from protobuf enum value: GoodCuts = 12;
326
+ */
327
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["GoodCuts"] = 12] = "GoodCuts";
328
+ /**
329
+ * @generated from protobuf enum value: GoodCutsAscending = 13;
330
+ */
331
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["GoodCutsAscending"] = 13] = "GoodCutsAscending";
332
+ /**
333
+ * @generated from protobuf enum value: GoodCutsTarget = 14;
334
+ */
335
+ QualifierEvent_LeaderboardSort[QualifierEvent_LeaderboardSort["GoodCutsTarget"] = 14] = "GoodCutsTarget";
316
336
  })(QualifierEvent_LeaderboardSort = QualifierEvent_LeaderboardSort || (QualifierEvent_LeaderboardSort = {}));
317
337
  /**
318
338
  * @generated from protobuf enum proto.models.Permissions
@@ -618,11 +638,12 @@ class GameplayParameters$Type extends MessageType {
618
638
  { no: 7, name: "disable_fail", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
619
639
  { no: 8, name: "disable_scoresaber_submission", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
620
640
  { no: 9, name: "disable_custom_notes_on_stream", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
621
- { no: 10, name: "use_sync", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
641
+ { no: 10, name: "use_sync", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
642
+ { no: 11, name: "target", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
622
643
  ]);
623
644
  }
624
645
  create(value) {
625
- const message = { attempts: 0, showScoreboard: false, disablePause: false, disableFail: false, disableScoresaberSubmission: false, disableCustomNotesOnStream: false, useSync: false };
646
+ const message = { attempts: 0, showScoreboard: false, disablePause: false, disableFail: false, disableScoresaberSubmission: false, disableCustomNotesOnStream: false, useSync: false, target: 0 };
626
647
  globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
627
648
  if (value !== undefined)
628
649
  reflectionMergePartial(this, message, value);
@@ -663,6 +684,9 @@ class GameplayParameters$Type extends MessageType {
663
684
  case /* bool use_sync */ 10:
664
685
  message.useSync = reader.bool();
665
686
  break;
687
+ case /* int32 target */ 11:
688
+ message.target = reader.int32();
689
+ break;
666
690
  default:
667
691
  let u = options.readUnknownField;
668
692
  if (u === "throw")
@@ -705,6 +729,9 @@ class GameplayParameters$Type extends MessageType {
705
729
  /* bool use_sync = 10; */
706
730
  if (message.useSync !== false)
707
731
  writer.tag(10, WireType.Varint).bool(message.useSync);
732
+ /* int32 target = 11; */
733
+ if (message.target !== 0)
734
+ writer.tag(11, WireType.Varint).int32(message.target);
708
735
  let u = options.writeUnknownFields;
709
736
  if (u !== false)
710
737
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -64,7 +64,7 @@ export declare class TAClient extends CustomEventEmitter<TAClientEvents> {
64
64
  delayTestFinished: (userIds: string[]) => void;
65
65
  joinTournament: (tournamentId: string) => Promise<Response>;
66
66
  getLeaderboard: (tournamentId: string, qualifierId: string, mapId: string) => Promise<Response>;
67
- loadSong: (levelId: string, userIds: string[]) => Promise<ResponseFromUser[]>;
67
+ loadSong: (levelId: string, userIds: string[], timeout?: number) => Promise<ResponseFromUser[]>;
68
68
  loadImage: (bitmap: Uint8Array, userIds: string[]) => Promise<ResponseFromUser[]>;
69
69
  private handlePacket;
70
70
  updateUser: (tournamentId: string, user: User) => Promise<Response>;
@@ -129,7 +129,7 @@ export class TAClient extends CustomEventEmitter {
129
129
  };
130
130
  this.forwardToUsers(packet, to);
131
131
  }
132
- async sendRequest(request, to) {
132
+ async sendRequest(request, to, timeout = 30000) {
133
133
  const packet = {
134
134
  token: "",
135
135
  from: this.stateManager.getSelfGuid(),
@@ -150,24 +150,31 @@ export class TAClient extends CustomEventEmitter {
150
150
  this.removeListener("responseReceived", onResponseReceived);
151
151
  this.removeListener("authorizationRequestedFromServer", onAuthorizationRequested);
152
152
  };
153
- // Check that we got responses from all expected users
154
- const checkResponses = () => {
153
+ const getUnrespondedUsers = () => {
155
154
  const responseUsers = responseDictionary.map((x) => x.userId);
156
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
157
- if (responseUsers.length !== expectedUsers.length) {
158
- return;
156
+ if (responseUsers.length === expectedUsers.length) {
157
+ return [];
159
158
  }
160
159
  const sortedArr1 = responseUsers.slice().sort();
161
160
  const sortedArr2 = expectedUsers.slice().sort();
162
- for (let i = 0; i < sortedArr1.length; i++) {
163
- if (sortedArr1[i] !== sortedArr2[i]) {
164
- return;
161
+ let waitingForUsers = [];
162
+ for (let i = 0; i < sortedArr2.length; i++) {
163
+ if (i > sortedArr1.length || sortedArr2[i] !== sortedArr1[i]) {
164
+ waitingForUsers.push(sortedArr2[i]);
165
165
  }
166
166
  }
167
- // All responses are received, clean up and resolve
168
- removeListeners();
169
- clearTimeout(timeout);
170
- resolve(responseDictionary);
167
+ return waitingForUsers;
168
+ };
169
+ // Check that we got responses from all expected users
170
+ const checkResponses = () => {
171
+ const waitingForUsers = getUnrespondedUsers();
172
+ if (waitingForUsers.length === 0) {
173
+ // All responses are received, clean up and resolve
174
+ removeListeners();
175
+ clearTimeout(timeoutTimer);
176
+ resolve(responseDictionary);
177
+ }
171
178
  };
172
179
  // Add to the dictionary when the response is to this packet, and from an expected user
173
180
  const onResponseReceived = (response) => {
@@ -181,18 +188,31 @@ export class TAClient extends CustomEventEmitter {
181
188
  checkResponses();
182
189
  }
183
190
  };
184
- // Return what we have after 5 seconds
191
+ // Return what we have after 30 seconds, inject errors for users that haven't responded yet
185
192
  const createTimeout = (time) => {
186
193
  return setTimeout(() => {
194
+ const unrespondedUsers = getUnrespondedUsers();
195
+ for (let user of unrespondedUsers) {
196
+ responseDictionary.push({
197
+ userId: user,
198
+ response: {
199
+ type: Response_ResponseType.Fail,
200
+ respondingToPacketId: packet.id,
201
+ details: {
202
+ oneofKind: undefined
203
+ }
204
+ },
205
+ });
206
+ }
187
207
  removeListeners();
188
208
  resolve(responseDictionary);
189
209
  }, time);
190
210
  };
191
- const timeout = createTimeout(30000);
211
+ const timeoutTimer = createTimeout(timeout);
192
212
  // If authorization is requested, we're assuming an external application failed
193
213
  // to provide a valid token, so we will combust
194
214
  const onAuthorizationRequested = () => {
195
- clearTimeout(timeout);
215
+ clearTimeout(timeoutTimer);
196
216
  throw "Authorization token invalid or not provided";
197
217
  };
198
218
  addListeners();
@@ -293,7 +313,7 @@ export class TAClient extends CustomEventEmitter {
293
313
  }
294
314
  return response[0].response;
295
315
  };
296
- loadSong = async (levelId, userIds) => {
316
+ loadSong = async (levelId, userIds, timeout) => {
297
317
  const response = await this.sendRequest({
298
318
  type: {
299
319
  oneofKind: "loadSong",
@@ -302,7 +322,7 @@ export class TAClient extends CustomEventEmitter {
302
322
  customHostUrl: ""
303
323
  },
304
324
  },
305
- }, userIds);
325
+ }, userIds, timeout);
306
326
  if (response.length <= 0) {
307
327
  throw new Error("Server timed out, or no users responded");
308
328
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moons-ta-client",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "type": "module",
5
5
  "main": "./dist/index.esm.js",
6
6
  "types": "./dist/index.d.ts",