@honeybbq/teamspeak-client 0.3.0 → 0.3.1

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 (64) hide show
  1. package/dist/address-BR-5unVo.cjs.map +1 -1
  2. package/dist/address-BfmovVpp.js.map +1 -1
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/command-BLe-C2L2.js.map +1 -1
  5. package/dist/command-DAK4pUBP.cjs.map +1 -1
  6. package/dist/commands.d.ts.map +1 -1
  7. package/dist/crypt-handshake-CQkQreLx.cjs.map +1 -1
  8. package/dist/crypt-handshake-DziOY4Lq.js.map +1 -1
  9. package/dist/crypt-init2-D70ha4LB.js.map +1 -1
  10. package/dist/crypt-init2-DparLekm.cjs.map +1 -1
  11. package/dist/crypto/crypt.d.ts.map +1 -1
  12. package/dist/crypto/eax.d.ts.map +1 -1
  13. package/dist/crypto/identity.d.ts.map +1 -1
  14. package/dist/crypto-Bg02m4ZE.js.map +1 -1
  15. package/dist/crypto-CDlweUL3.cjs.map +1 -1
  16. package/dist/discovery/resolver.d.ts.map +1 -1
  17. package/dist/errors.d.ts.map +1 -1
  18. package/dist/handler-DI_abe9c.js.map +1 -1
  19. package/dist/handler-DuwoO5RC.cjs.map +1 -1
  20. package/dist/handshake/license.d.ts.map +1 -1
  21. package/dist/index.cjs +2 -2
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.mjs +96 -65
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/parser-CL33R9tr.cjs.map +1 -1
  26. package/dist/parser-DZMv3Jm-.js.map +1 -1
  27. package/dist/primitives-cNNAeFCo.cjs.map +1 -1
  28. package/dist/primitives-xIr6Tjk4.js.map +1 -1
  29. package/dist/resolver-6B8dI9gr.js.map +1 -1
  30. package/dist/resolver-DCcmyWSK.cjs.map +1 -1
  31. package/dist/throttle.d.ts.map +1 -1
  32. package/dist/transfer.d.ts.map +1 -1
  33. package/dist/transport/generation-window.d.ts.map +1 -1
  34. package/dist/transport/handler.d.ts.map +1 -1
  35. package/dist/transport/quicklz.d.ts.map +1 -1
  36. package/package.json +4 -5
  37. package/dist/address.test.d.ts +0 -2
  38. package/dist/address.test.d.ts.map +0 -1
  39. package/dist/api.test.d.ts +0 -2
  40. package/dist/api.test.d.ts.map +0 -1
  41. package/dist/command/command.test.d.ts +0 -2
  42. package/dist/command/command.test.d.ts.map +0 -1
  43. package/dist/crypto/eax.test.d.ts +0 -2
  44. package/dist/crypto/eax.test.d.ts.map +0 -1
  45. package/dist/crypto/identity.test.d.ts +0 -2
  46. package/dist/crypto/identity.test.d.ts.map +0 -1
  47. package/dist/handshake.test.d.ts +0 -2
  48. package/dist/handshake.test.d.ts.map +0 -1
  49. package/dist/helpers.test.d.ts +0 -2
  50. package/dist/helpers.test.d.ts.map +0 -1
  51. package/dist/integration.test.d.ts +0 -12
  52. package/dist/integration.test.d.ts.map +0 -1
  53. package/dist/notifications.test.d.ts +0 -2
  54. package/dist/notifications.test.d.ts.map +0 -1
  55. package/dist/throttle.test.d.ts +0 -2
  56. package/dist/throttle.test.d.ts.map +0 -1
  57. package/dist/transport/generation-window.test.d.ts +0 -2
  58. package/dist/transport/generation-window.test.d.ts.map +0 -1
  59. package/dist/transport/packet.test.d.ts +0 -2
  60. package/dist/transport/packet.test.d.ts.map +0 -1
  61. package/dist/transport/quicklz.test.d.ts +0 -2
  62. package/dist/transport/quicklz.test.d.ts.map +0 -1
  63. package/dist/transport/whisper.test.d.ts +0 -2
  64. package/dist/transport/whisper.test.d.ts.map +0 -1
package/dist/index.mjs CHANGED
@@ -426,7 +426,7 @@ var $ = class {
426
426
  #s = new j();
427
427
  #c = /* @__PURE__ */ new Map();
428
428
  #l = [];
429
- #u = [];
429
+ #u = null;
430
430
  #d = [];
431
431
  #f = [];
432
432
  #p = [];
@@ -437,10 +437,11 @@ var $ = class {
437
437
  #v = [];
438
438
  #y = [];
439
439
  #b = [];
440
- #x;
440
+ #x = [];
441
441
  #S;
442
+ #C;
442
443
  constructor(t, n, r, i = {}) {
443
- this.#e = t, this.#t = n, this.nickname = r, this.logger = i.logger ?? e, this.#n = i.resolver ?? new y(this.logger), this.#r = pe(i), this.crypt = new v(t), this.handler = new x(this.crypt, this.logger), this.handler.onPacket = (e) => this.#T(e), this.handler.onClosed = (e) => this.#P(e), i.commandMiddleware && this.#y.push(...i.commandMiddleware), i.eventMiddleware && this.#b.push(...i.eventMiddleware), this.#x = this.#F(), this.#S = this.#I();
444
+ this.#e = t, this.#t = n, this.nickname = r, this.logger = i.logger ?? e, this.#n = i.resolver ?? new y(this.logger), this.#r = pe(i), this.crypt = new v(t), this.handler = new x(this.crypt, this.logger), this.handler.onPacket = (e) => this.#E(e), this.handler.onClosed = (e) => this.#F(e), i.commandMiddleware && this.#b.push(...i.commandMiddleware), i.eventMiddleware && this.#x.push(...i.eventMiddleware), this.#S = this.#L(), this.#C = this.#R();
444
445
  }
445
446
  get status() {
446
447
  return this.#i;
@@ -450,8 +451,8 @@ var $ = class {
450
451
  }
451
452
  async connect() {
452
453
  if (this.#i !== t.Disconnected) throw new l();
453
- this.#C(), this.#i = t.Connecting;
454
- let e = await this.#w();
454
+ this.#w(), this.#i = t.Connecting;
455
+ let e = await this.#T();
455
456
  this.logger.info("connecting to server", { address: e }), await this.handler.connect(e);
456
457
  }
457
458
  async disconnect() {
@@ -461,16 +462,29 @@ var $ = class {
461
462
  await this.execCommand("clientdisconnect reasonmsg=Shutdown", 1e3);
462
463
  } catch {}
463
464
  this.handler.close();
464
- let n = this.#_.slice();
465
+ let n = this.#v.slice();
465
466
  for (let e of n) setImmediate(() => e(void 0));
466
467
  }
467
468
  waitConnected(e) {
468
- return this.#i === t.Connected ? Promise.resolve() : new Promise((t, n) => {
469
- this.#l.push(t), e && e.addEventListener("abort", () => n(e.reason), { once: !0 });
469
+ return this.#i === t.Connected ? Promise.resolve() : this.#u ? Promise.reject(this.#u) : new Promise((t, n) => {
470
+ let r = {
471
+ resolve: () => {
472
+ e?.removeEventListener("abort", i), t();
473
+ },
474
+ reject: (t) => {
475
+ e?.removeEventListener("abort", i), n(t);
476
+ }
477
+ }, i = () => {
478
+ let t = this.#l.indexOf(r);
479
+ t >= 0 && this.#l.splice(t, 1);
480
+ let n = e?.reason;
481
+ r.reject(n instanceof Error ? n : Error(String(n ?? "Connection wait aborted")));
482
+ };
483
+ this.#l.push(r), e?.aborted ? i() : e?.addEventListener("abort", i, { once: !0 });
470
484
  });
471
485
  }
472
486
  async sendCommandNoWait(e) {
473
- await this.#a.wait(), await this.#x(e);
487
+ await this.#a.wait(), await this.#S(e);
474
488
  }
475
489
  async execCommand(e, t = 1e4) {
476
490
  await this.execCommandWithResponse(e, t);
@@ -478,7 +492,7 @@ var $ = class {
478
492
  async execCommandWithResponse(e, t = 1e4) {
479
493
  let [n, r] = this.#o.register(), i = A(e, n);
480
494
  try {
481
- await this.#a.wait(), await this.#x(i);
495
+ await this.#a.wait(), await this.#S(i);
482
496
  } catch (e) {
483
497
  throw this.#o.unregister(n), e;
484
498
  }
@@ -489,38 +503,38 @@ var $ = class {
489
503
  on(e, t) {
490
504
  switch (e) {
491
505
  case "textMessage":
492
- this.#u.push(t);
506
+ this.#d.push(t);
493
507
  break;
494
508
  case "clientEnter":
495
- this.#d.push(t);
509
+ this.#f.push(t);
496
510
  break;
497
511
  case "clientLeave":
498
- this.#f.push(t);
512
+ this.#p.push(t);
499
513
  break;
500
514
  case "clientMoved":
501
- this.#p.push(t);
515
+ this.#m.push(t);
502
516
  break;
503
517
  case "poked":
504
- this.#m.push(t);
518
+ this.#h.push(t);
505
519
  break;
506
520
  case "voiceData":
507
- this.#h.push(t);
521
+ this.#g.push(t);
508
522
  break;
509
523
  case "connected":
510
- this.#g.push(t);
524
+ this.#_.push(t);
511
525
  break;
512
526
  case "disconnected":
513
- this.#_.push(t);
527
+ this.#v.push(t);
514
528
  break;
515
- case "kicked": this.#v.push(t);
529
+ case "kicked": this.#y.push(t);
516
530
  }
517
531
  return this;
518
532
  }
519
533
  useCommandMiddleware(...e) {
520
- return this.#y.push(...e), this.#x = this.#F(), this;
534
+ return this.#b.push(...e), this.#S = this.#L(), this;
521
535
  }
522
536
  useEventMiddleware(...e) {
523
- return this.#b.push(...e), this.#S = this.#I(), this;
537
+ return this.#x.push(...e), this.#C = this.#R(), this;
524
538
  }
525
539
  clientID() {
526
540
  return this.clid;
@@ -571,16 +585,16 @@ var $ = class {
571
585
  return P(e, t, n);
572
586
  }
573
587
  _markConnected() {
574
- this.#i = t.Connected;
575
- for (let e of this.#l) e();
588
+ this.#i = t.Connected, this.#u = null;
589
+ for (let e of this.#l) e.resolve();
576
590
  this.#l = [];
577
- let e = this.#g.slice();
591
+ let e = this.#_.slice();
578
592
  for (let t of e) setImmediate(() => t());
579
593
  }
580
- #C() {
581
- this.handler.close(), this.crypt = new v(this.#e), this.handler = new x(this.crypt, this.logger), this.handler.onPacket = (e) => this.#T(e), this.handler.onClosed = (e) => this.#P(e), this.#o.reset(), this.#s.reset(), this.#c.clear(), this.clid = 0, this.#x = this.#F();
594
+ #w() {
595
+ this.#u = null, this.handler.close(), this.crypt = new v(this.#e), this.handler = new x(this.crypt, this.logger), this.handler.onPacket = (e) => this.#E(e), this.handler.onClosed = (e) => this.#F(e), this.#o.reset(), this.#s.reset(), this.#c.clear(), this.clid = 0, this.#S = this.#L();
582
596
  }
583
- async #w() {
597
+ async #T() {
584
598
  let e = this.#t.includes(":") ? this.#t : `${this.#t}:9987`;
585
599
  try {
586
600
  return (await this.#n.resolve(this.#t))[0]?.addr ?? e;
@@ -588,10 +602,10 @@ var $ = class {
588
602
  return e;
589
603
  }
590
604
  }
591
- #T(e) {
592
- this.#E(e);
593
- }
594
605
  #E(e) {
606
+ this.#D(e);
607
+ }
608
+ #D(e) {
595
609
  let t = e.typeFlagged & 15;
596
610
  if (t === 8) {
597
611
  let t = te(this.crypt, e.data);
@@ -599,13 +613,13 @@ var $ = class {
599
613
  return;
600
614
  }
601
615
  if ((t === 0 || t === 1) && e.data.length > 5) {
602
- this.#D(e.data);
616
+ this.#O(e.data);
603
617
  return;
604
618
  }
605
- (t === 2 || t === 3) && e.data.length > 0 && this.#O(Buffer.from(e.data).toString("utf8"));
619
+ (t === 2 || t === 3) && e.data.length > 0 && this.#k(Buffer.from(e.data).toString("utf8"));
606
620
  }
607
- #D(e) {
608
- if (this.#h.length === 0) return;
621
+ #O(e) {
622
+ if (this.#g.length === 0) return;
609
623
  let t = new DataView(e.buffer, e.byteOffset, e.byteLength).getUint16(2, !1);
610
624
  if (t === this.clid) return;
611
625
  let n = {
@@ -613,22 +627,22 @@ var $ = class {
613
627
  codec: e[4],
614
628
  data: e.subarray(5)
615
629
  };
616
- for (let e of this.#h) setImmediate(() => e(n));
630
+ for (let e of this.#g) setImmediate(() => e(n));
617
631
  }
618
- #O(e) {
632
+ #k(e) {
619
633
  if (!e) return;
620
634
  let t = e.split("\0").join("\n").split("\n");
621
635
  for (let e of t) {
622
636
  let t = e.replace(/\r$/, "");
623
- if (t) for (let e of Z(t)) this.#k(e);
637
+ if (t) for (let e of Z(t)) this.#A(e);
624
638
  }
625
639
  }
626
- #k(e) {
640
+ #A(e) {
627
641
  let t = T(e);
628
642
  if (t && t.name) {
629
643
  if (t.name.startsWith("notify")) {
630
644
  let e = re(t, this.clid, this.#c, this.nickname);
631
- this.#j(e, t.params);
645
+ this.#M(e, t.params);
632
646
  return;
633
647
  }
634
648
  switch (t.name) {
@@ -642,7 +656,7 @@ var $ = class {
642
656
  V(this, t.params);
643
657
  break;
644
658
  case "error":
645
- this.#A(t.params);
659
+ this.#j(t.params);
646
660
  break;
647
661
  default: {
648
662
  let e = t.params;
@@ -659,31 +673,35 @@ var $ = class {
659
673
  }
660
674
  }
661
675
  }
662
- #A(e) {
663
- let { err: t, rc: n } = k(e);
664
- n === null ? this.#o.discardBuffer() : this.#o.resolve(n, t), (e.id ?? "0") === "3329" && setImmediate(() => this.disconnect().catch(() => {}));
676
+ #j(e) {
677
+ let { err: n, rc: r } = k(e);
678
+ if (r === null ? this.#o.discardBuffer() : this.#o.resolve(r, n), n && this.#i !== t.Connected) {
679
+ this.#I(n);
680
+ return;
681
+ }
682
+ (e.id ?? "0") === "3329" && setImmediate(() => this.disconnect().catch(() => {}));
665
683
  }
666
- #j(e, t) {
684
+ #M(e, t) {
667
685
  switch (e.kind) {
668
686
  case "clientEnter": {
669
687
  let t = e.info;
670
- t.id !== 0 && X(this.nickname, t.nickname) && (this.clid = t.id, this.handler.setClientID(t.id), this.#o.signalWelcomeComplete()), this.#M("clientEnter", t);
688
+ t.id !== 0 && t.id === this.clid ? (this.nickname = t.nickname, this.#o.signalWelcomeComplete()) : t.id !== 0 && this.clid === 0 && X(this.nickname, t.nickname) && (this.clid = t.id, this.handler.setClientID(t.id), this.nickname = t.nickname, this.#o.signalWelcomeComplete()), this.#N("clientEnter", t);
671
689
  break;
672
690
  }
673
691
  case "clientLeave":
674
- if (this.#M("clientLeave", e.event), e.isSelf && (e.event.reasonID === 4 || e.event.reasonID === 5)) {
692
+ if (this.#N("clientLeave", e.event), e.isSelf && (e.event.reasonID === 4 || e.event.reasonID === 5)) {
675
693
  let t = e.event.reasonMsg;
676
- for (let e of this.#v) setImmediate(() => e(t));
694
+ for (let e of this.#y) setImmediate(() => e(t));
677
695
  }
678
696
  break;
679
697
  case "clientMoved":
680
- this.#M("clientMoved", e.event);
698
+ this.#N("clientMoved", e.event);
681
699
  break;
682
700
  case "textMessage":
683
- this.#M("textMessage", e.message);
701
+ this.#N("textMessage", e.message);
684
702
  break;
685
703
  case "poked":
686
- this.#M("poked", e.event);
704
+ this.#N("poked", e.event);
687
705
  break;
688
706
  case "startUpload":
689
707
  this.#s.notify(e.info.clientFileTransferID, e.info);
@@ -694,40 +712,53 @@ var $ = class {
694
712
  case "fileTransferStatus": this.#s.notify(e.info.clientFileTransferID, e.info);
695
713
  }
696
714
  }
697
- #M(e, t) {
698
- this.#S(t);
699
- }
700
715
  #N(e, t) {
716
+ this.#C(t);
717
+ }
718
+ #P(e, t) {
701
719
  switch (e) {
702
720
  case "textMessage":
703
- for (let e of this.#u) setImmediate(() => e(t));
721
+ for (let e of this.#d) setImmediate(() => e(t));
704
722
  break;
705
723
  case "clientEnter":
706
- for (let e of this.#d) setImmediate(() => e(t));
724
+ for (let e of this.#f) setImmediate(() => e(t));
707
725
  break;
708
726
  case "clientLeave":
709
- for (let e of this.#f) setImmediate(() => e(t));
727
+ for (let e of this.#p) setImmediate(() => e(t));
710
728
  break;
711
729
  case "clientMoved":
712
- for (let e of this.#p) setImmediate(() => e(t));
730
+ for (let e of this.#m) setImmediate(() => e(t));
713
731
  break;
714
- case "poked": for (let e of this.#m) setImmediate(() => e(t));
732
+ case "poked": for (let e of this.#h) setImmediate(() => e(t));
715
733
  }
716
734
  }
717
- #P(e) {
735
+ #F(e) {
718
736
  if (this.#i === t.Disconnected) return;
737
+ if (this.#i !== t.Connected) {
738
+ this.#I(e ?? /* @__PURE__ */ Error("Connection closed before the TeamSpeak handshake completed"));
739
+ return;
740
+ }
719
741
  this.#i = t.Disconnected;
720
- let n = this.#_.slice();
742
+ let n = this.#v.slice();
721
743
  for (let t of n) setImmediate(() => t(e ?? void 0));
722
744
  }
723
- #F() {
724
- return L(this.#y, async (e) => {
745
+ #I(e) {
746
+ this.#u = e;
747
+ let n = this.#l.splice(0);
748
+ for (let t of n) t.reject(e);
749
+ if (this.#i === t.Disconnected) return;
750
+ this.#i = t.Disconnected, this.handler.close();
751
+ let r = this.#v.slice();
752
+ for (let t of r) setImmediate(() => t(e));
753
+ }
754
+ #L() {
755
+ return L(this.#b, async (e) => {
725
756
  this.handler.sendPacket(b.Command, Buffer.from(e), 0);
726
757
  });
727
758
  }
728
- #I() {
729
- return R(this.#b, (e) => {
730
- typeof e == "object" && e && "invokerName" in e && "message" in e && "targetMode" in e ? this.#N("textMessage", e) : typeof e == "object" && e && "invokerName" in e && "message" in e && !("targetMode" in e) ? this.#N("poked", e) : typeof e == "object" && e && "id" in e && "uid" in e ? this.#N("clientEnter", e) : typeof e == "object" && e && "id" in e && "reasonID" in e && "targetChannelID" in e ? this.#N("clientMoved", e) : typeof e == "object" && e && "id" in e && "reasonID" in e && this.#N("clientLeave", e);
759
+ #R() {
760
+ return R(this.#x, (e) => {
761
+ typeof e == "object" && e && "invokerName" in e && "message" in e && "targetMode" in e ? this.#P("textMessage", e) : typeof e == "object" && e && "invokerName" in e && "message" in e && !("targetMode" in e) ? this.#P("poked", e) : typeof e == "object" && e && "id" in e && "uid" in e ? this.#P("clientEnter", e) : typeof e == "object" && e && "id" in e && "reasonID" in e && "targetChannelID" in e ? this.#P("clientMoved", e) : typeof e == "object" && e && "id" in e && "reasonID" in e && this.#P("clientLeave", e);
731
762
  });
732
763
  }
733
764
  };