amule-ec-client 0.6.0 → 0.7.0

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 (87) hide show
  1. package/README.md +10 -2
  2. package/dist/{AddLinkRequest-DwUbSMXD.mjs → AddLinkRequest-DEKGy-R2.js} +2 -5
  3. package/dist/{ClientQueueRequest-D9FaX5K9.mjs → ClientQueueRequest-DrLXSxtp.js} +2 -5
  4. package/dist/{ClientQueueResponse-FVQBR_8b.mjs → ClientQueueResponse-CXxY_9wU.js} +6 -6
  5. package/dist/{CreateCategoryRequest-Br6yfDhZ.mjs → CreateCategoryRequest-COulF12x.js} +2 -5
  6. package/dist/{DeleteCategoryRequest-C2-p6sx0.mjs → DeleteCategoryRequest-D-mljaNV.js} +2 -5
  7. package/dist/{DownloadCommandRequest-CaULjfNi.mjs → DownloadCommandRequest-Bf1Ez8Da.js} +3 -6
  8. package/dist/{DownloadFileRequest-CcNqsBo7.mjs → DownloadFileRequest-WfOIV07R.js} +2 -5
  9. package/dist/{DownloadQueueRequest-bd7lFiMj.mjs → DownloadQueueRequest-Br-pgrRt.js} +2 -5
  10. package/dist/DownloadQueueResponse-C-5d4teB.js +241 -0
  11. package/dist/{GetPreferencesRequest-C94Su9IH.mjs → GetPreferencesRequest-BE3RbRRn.js} +2 -5
  12. package/dist/{PreferencesDetailsResponse-BjMxbvVY.mjs → PreferencesDetailsResponse-D8lBd8Ot.js} +1 -4
  13. package/dist/{PreferencesResponse-Dth-n2sA.mjs → PreferencesResponse-BmGTQM30.js} +1 -4
  14. package/dist/{ReloadSharedFilesRequest-CPwAEJYG.mjs → ReloadSharedFilesRequest-BbDUeGcq.js} +2 -4
  15. package/dist/{Request-C0UUuQIX.mjs → Request-BvScDpeu.js} +3 -11
  16. package/dist/{SearchProgressResponse-Bputc9Ww.mjs → SearchProgressResponse-BQPliUup.js} +1 -4
  17. package/dist/{SearchRequest-CNqz-K1Z.mjs → SearchRequest-DOakj8fA.js} +3 -6
  18. package/dist/{SearchResultsRequest-DKG508KF.mjs → SearchResultsRequest-oZBs5KKm.js} +2 -4
  19. package/dist/{SearchResultsResponse-ChNrKJ6_.mjs → SearchResultsResponse-C9I9x035.js} +1 -4
  20. package/dist/{SearchStatusRequest-Bv6iaC9Y.mjs → SearchStatusRequest-B1ZzSQlE.js} +2 -4
  21. package/dist/{SearchStopRequest-rET-2Nsz.mjs → SearchStopRequest-FfXf_DCn.js} +2 -4
  22. package/dist/{ServerConnectRequest-CcO2-Eqd.mjs → ServerConnectRequest-Cdiw-KWu.js} +2 -5
  23. package/dist/{ServerDisconnectRequest-DEORM3SF.mjs → ServerDisconnectRequest-BVXSumxX.js} +2 -4
  24. package/dist/{ServerListRequest-FwFQBp12.mjs → ServerListRequest-3yMrgZID.js} +2 -4
  25. package/dist/{ServerListResponse-ZAKSSCPZ.mjs → ServerListResponse-Do3iRai0.js} +5 -6
  26. package/dist/{ServerUpdateFromUrlRequest-D4xBqJDJ.mjs → ServerUpdateFromUrlRequest-DpxBII5W.js} +2 -5
  27. package/dist/{SetFileCategoryRequest-BwEPJVeR.mjs → SetFileCategoryRequest-CFgkJB-H.js} +2 -5
  28. package/dist/{SetPreferencesRequest-D2fVIH3P.mjs → SetPreferencesRequest-BdZ40Ao_.js} +2 -5
  29. package/dist/{SharedFilePriorityRequest-j6ImgagV.mjs → SharedFilePriorityRequest-BMNmaL06.js} +2 -5
  30. package/dist/{SharedFilesRequest-D2M3K0eB.mjs → SharedFilesRequest-BZKz0oyn.js} +2 -5
  31. package/dist/SharedFilesResponse-DE0cd1DT.js +45 -0
  32. package/dist/{StatsRequest-B8v9LLHG.mjs → StatsRequest-DVwx5wk1.js} +2 -5
  33. package/dist/{StatsResponse-BVUxNPbz.mjs → StatsResponse-CP2F2zt0.js} +25 -4
  34. package/dist/{Codes-CjiW7Pdl.mjs → Tag-B5gWV2XF.js} +268 -3
  35. package/dist/{UpdateCategoryRequest-CgzH7SxP.mjs → UpdateCategoryRequest-Bu22YjOm.js} +2 -5
  36. package/dist/{UpdateRequest-Bunl73Ga.mjs → UpdateRequest-CaQ867p8.js} +2 -5
  37. package/dist/UpdateState-Dn-SuAsj.js +173 -0
  38. package/dist/{download-details-OM0FJUhZ.mjs → download-details-OM0FJUhZ.js} +0 -2
  39. package/dist/{index.d.mts → index.d.ts} +358 -337
  40. package/dist/{index.mjs → index.js} +94 -54
  41. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  42. package/dist/{utils-DBnUQnZ-.mjs → utils-CNoUroOI.js} +11 -3
  43. package/package.json +1 -1
  44. package/dist/AddLinkRequest-DwUbSMXD.mjs.map +0 -1
  45. package/dist/ClientQueueRequest-D9FaX5K9.mjs.map +0 -1
  46. package/dist/ClientQueueResponse-FVQBR_8b.mjs.map +0 -1
  47. package/dist/Codes-CjiW7Pdl.mjs.map +0 -1
  48. package/dist/CreateCategoryRequest-Br6yfDhZ.mjs.map +0 -1
  49. package/dist/DeleteCategoryRequest-C2-p6sx0.mjs.map +0 -1
  50. package/dist/DownloadCommandRequest-CaULjfNi.mjs.map +0 -1
  51. package/dist/DownloadFileRequest-CcNqsBo7.mjs.map +0 -1
  52. package/dist/DownloadQueueRequest-bd7lFiMj.mjs.map +0 -1
  53. package/dist/DownloadQueueResponse-DyP1rLTV.mjs +0 -261
  54. package/dist/DownloadQueueResponse-DyP1rLTV.mjs.map +0 -1
  55. package/dist/GetPreferencesRequest-C94Su9IH.mjs.map +0 -1
  56. package/dist/PreferencesDetailsResponse-BjMxbvVY.mjs.map +0 -1
  57. package/dist/PreferencesResponse-Dth-n2sA.mjs.map +0 -1
  58. package/dist/ReloadSharedFilesRequest-CPwAEJYG.mjs.map +0 -1
  59. package/dist/Request-C0UUuQIX.mjs.map +0 -1
  60. package/dist/SearchProgressResponse-Bputc9Ww.mjs.map +0 -1
  61. package/dist/SearchRequest-CNqz-K1Z.mjs.map +0 -1
  62. package/dist/SearchResultsRequest-DKG508KF.mjs.map +0 -1
  63. package/dist/SearchResultsResponse-ChNrKJ6_.mjs.map +0 -1
  64. package/dist/SearchStatusRequest-Bv6iaC9Y.mjs.map +0 -1
  65. package/dist/SearchStopRequest-rET-2Nsz.mjs.map +0 -1
  66. package/dist/ServerConnectRequest-CcO2-Eqd.mjs.map +0 -1
  67. package/dist/ServerDisconnectRequest-DEORM3SF.mjs.map +0 -1
  68. package/dist/ServerListRequest-FwFQBp12.mjs.map +0 -1
  69. package/dist/ServerListResponse-ZAKSSCPZ.mjs.map +0 -1
  70. package/dist/ServerUpdateFromUrlRequest-D4xBqJDJ.mjs.map +0 -1
  71. package/dist/SetFileCategoryRequest-BwEPJVeR.mjs.map +0 -1
  72. package/dist/SetPreferencesRequest-D2fVIH3P.mjs.map +0 -1
  73. package/dist/SharedFilePriorityRequest-j6ImgagV.mjs.map +0 -1
  74. package/dist/SharedFilesRequest-D2M3K0eB.mjs.map +0 -1
  75. package/dist/SharedFilesResponse-BiXT_oCx.mjs +0 -41
  76. package/dist/SharedFilesResponse-BiXT_oCx.mjs.map +0 -1
  77. package/dist/StatsRequest-B8v9LLHG.mjs.map +0 -1
  78. package/dist/StatsResponse-BVUxNPbz.mjs.map +0 -1
  79. package/dist/Tag-CZF6BRMY.mjs +0 -262
  80. package/dist/Tag-CZF6BRMY.mjs.map +0 -1
  81. package/dist/UpdateCategoryRequest-CgzH7SxP.mjs.map +0 -1
  82. package/dist/UpdateRequest-Bunl73Ga.mjs.map +0 -1
  83. package/dist/UpdateResponse-1LhyH9Zf.mjs +0 -47
  84. package/dist/UpdateResponse-1LhyH9Zf.mjs.map +0 -1
  85. package/dist/download-details-OM0FJUhZ.mjs.map +0 -1
  86. package/dist/index.mjs.map +0 -1
  87. package/dist/utils-DBnUQnZ-.mjs.map +0 -1
@@ -1,7 +1,6 @@
1
- import { n as Packet, r as Flags, t as Request } from "./Request-C0UUuQIX.mjs";
2
- import { a as EcPrefs, i as ECTagName, n as ECOpCode, o as ProtocolVersion, r as ECSearchType, t as ECDetailLevel } from "./Codes-CjiW7Pdl.mjs";
3
- import { a as StringTag, c as UInt128Tag, d as UShortTag, f as findNumericTag, i as Ipv4Tag, l as UIntTag, n as DoubleTag, o as Tag, r as Hash16Tag, s as UByteTag, t as CustomTag, u as ULongTag } from "./Tag-CZF6BRMY.mjs";
4
- import { n as PARTSIZE, t as ChunkStatus } from "./download-details-OM0FJUhZ.mjs";
1
+ import { n as Packet, r as Flags, t as Request } from "./Request-BvScDpeu.js";
2
+ import { _ as ECSearchType, a as StringTag, b as ProtocolVersion, c as UInt128Tag, d as UShortTag, f as findNumericTag, g as ECSearchFileDownloadStatus, h as ECOpCode, i as Ipv4Tag, l as UIntTag, m as ECDetailLevel, n as DoubleTag, o as Tag, p as findTag, r as Hash16Tag, s as UByteTag, t as CustomTag, u as ULongTag, v as ECTagName, y as EcPrefs } from "./Tag-B5gWV2XF.js";
3
+ import { n as PARTSIZE, t as ChunkStatus } from "./download-details-OM0FJUhZ.js";
5
4
  import * as net from "net";
6
5
  import * as zlib from "zlib";
7
6
  import * as crypto from "crypto";
@@ -518,8 +517,8 @@ var PasswordHasher = class {
518
517
  /**
519
518
  * Hash a password with salt using MD5
520
519
  *
521
- * This matches aMule's password hashing algorithm (from jamule):
522
- * 1. saltHash = MD5(salt.toHexString().uppercase())
520
+ * This matches aMule's password hashing algorithm (ExternalConn.cpp):
521
+ * 1. saltHash = MD5(salt formatted as "%lX")
523
522
  * 2. passwordHash = MD5(password)
524
523
  * 3. return MD5(passwordHash.toHex().lowercase() + saltHash.toHex().lowercase())
525
524
  *
@@ -528,7 +527,7 @@ var PasswordHasher = class {
528
527
  * @returns The hashed password as a Buffer
529
528
  */
530
529
  static hash(password, salt) {
531
- const saltHexUpper = salt.toString(16).toUpperCase().padStart(16, "0");
530
+ const saltHexUpper = salt.toString(16).toUpperCase();
532
531
  const saltHash = crypto.createHash("md5").update(saltHexUpper, "utf-8").digest();
533
532
  const passwordHashHex = crypto.createHash("md5").update(password, "utf-8").digest().toString("hex").toLowerCase();
534
533
  const saltHashHex = saltHash.toString("hex").toLowerCase();
@@ -549,7 +548,7 @@ var PasswordHasher = class {
549
548
  /**
550
549
  * AmuleConnection - Manages the low-level connection to aMule EC
551
550
  */
552
- var AmuleConnection = class {
551
+ var AmuleConnection = class AmuleConnection {
553
552
  host;
554
553
  port;
555
554
  password;
@@ -560,6 +559,7 @@ var AmuleConnection = class {
560
559
  pendingResponses = [];
561
560
  connectionPromise;
562
561
  requestTimeout = 0;
562
+ sessionGeneration = 0;
563
563
  debug = false;
564
564
  /**
565
565
  * Enable or disable debug logging
@@ -595,6 +595,13 @@ var AmuleConnection = class {
595
595
  return this.requestTimeout;
596
596
  }
597
597
  /**
598
+ * Monotonic counter incremented on every (re)connection attempt.
599
+ * Lets consumers detect that the daemon-side per-connection state was reset.
600
+ */
601
+ getSessionGeneration() {
602
+ return this.sessionGeneration;
603
+ }
604
+ /**
598
605
  * Reject and clear all pending responses.
599
606
  */
600
607
  rejectAllPending(error) {
@@ -611,7 +618,9 @@ var AmuleConnection = class {
611
618
  if (this.connectionPromise) return this.connectionPromise;
612
619
  this.connectionPromise = (async () => {
613
620
  this.connected = false;
621
+ this.sessionGeneration++;
614
622
  if (this.socket) this.socket.destroy();
623
+ this.buffer = Buffer.allocUnsafe(0);
615
624
  this.socket = new net.Socket();
616
625
  if (this.timeout > 0) this.socket.setTimeout(this.timeout);
617
626
  this.socket.on("data", (data) => this.handleData(Buffer.isBuffer(data) ? data : Buffer.from(data)));
@@ -621,6 +630,7 @@ var AmuleConnection = class {
621
630
  try {
622
631
  await this.connectSocket();
623
632
  await this.authenticate();
633
+ this.socket?.setTimeout(0);
624
634
  this.connected = true;
625
635
  } finally {
626
636
  this.connectionPromise = void 0;
@@ -633,11 +643,14 @@ var AmuleConnection = class {
633
643
  */
634
644
  connectSocket() {
635
645
  return new Promise((resolve, reject) => {
636
- if (!this.socket) return reject(new CommunicationException("Socket not initialized"));
637
- this.socket.connect(this.port, this.host, () => {
646
+ const socket = this.socket;
647
+ if (!socket) return reject(new CommunicationException("Socket not initialized"));
648
+ const onError = (error) => reject(error);
649
+ socket.once("error", onError);
650
+ socket.connect(this.port, this.host, () => {
651
+ socket.removeListener("error", onError);
638
652
  resolve();
639
653
  });
640
- this.socket.once("error", reject);
641
654
  });
642
655
  }
643
656
  /**
@@ -649,7 +662,7 @@ var AmuleConnection = class {
649
662
  this.log("Sending client info...");
650
663
  const saltPacket = await this.sendRequestNoAuth(clientInfoRequest);
651
664
  this.log("Received salt response");
652
- if (saltPacket.opCode === 3) throw new ServerException("Authentication failed: server rejected client");
665
+ if (saltPacket.opCode === 3) throw new ServerException(`Authentication failed: ${AmuleConnection.authFailReason(saltPacket) ?? "connection refused with no reason; the daemon usually does this when its EC password is empty (external connections disabled)"}`);
653
666
  if (saltPacket.opCode !== 79) throw new ServerException(`Unexpected response to client info: ${saltPacket.opCode}`);
654
667
  const saltResponse = AuthSaltResponse.fromPacket(saltPacket);
655
668
  this.log("Salt:", saltResponse.salt);
@@ -659,11 +672,18 @@ var AmuleConnection = class {
659
672
  this.log("Sending hashed password...");
660
673
  const authPacket = await this.sendRequestNoAuth(authRequest);
661
674
  this.log("Received auth response");
662
- if (authPacket.opCode === 3) throw new ServerException("Authentication failed: invalid password");
675
+ if (authPacket.opCode === 3) throw new ServerException(`Authentication failed: ${AmuleConnection.authFailReason(authPacket) ?? "unknown reason"}`);
663
676
  if (authPacket.opCode !== 4) throw new ServerException(`Unexpected auth response: ${authPacket.opCode}`);
664
677
  this.log("Authentication successful!");
665
678
  }
666
679
  /**
680
+ * Extract the human-readable reason the daemon attaches to EC_OP_AUTH_FAIL packets.
681
+ */
682
+ static authFailReason(packet) {
683
+ const reason = findTag(packet.tags, 0)?.getValue();
684
+ return typeof reason === "string" && reason.length > 0 ? reason : void 0;
685
+ }
686
+ /**
667
687
  * Handle incoming data
668
688
  */
669
689
  handleData(data) {
@@ -790,6 +810,7 @@ let SearchType = /* @__PURE__ */ function(SearchType) {
790
810
  */
791
811
  var AmuleClient = class {
792
812
  connection;
813
+ updateState;
793
814
  constructor(options) {
794
815
  this.connection = new AmuleConnection(options.host, options.port, options.password, options.timeout || 0, options.requestTimeout || 0);
795
816
  }
@@ -810,33 +831,53 @@ var AmuleClient = class {
810
831
  * Reconnect to the server
811
832
  */
812
833
  async reconnect() {
834
+ this.updateState = void 0;
813
835
  await this.connection.reconnect();
814
836
  }
815
837
  /**
816
838
  * Get server statistics
817
839
  */
818
840
  async getStats() {
819
- const { StatsRequest } = await import("./StatsRequest-B8v9LLHG.mjs");
820
- const { StatsResponseParser } = await import("./StatsResponse-BVUxNPbz.mjs");
841
+ const { StatsRequest } = await import("./StatsRequest-DVwx5wk1.js");
842
+ const { StatsResponseParser } = await import("./StatsResponse-CP2F2zt0.js");
821
843
  const request = new StatsRequest();
822
844
  const packet = await this.connection.sendRequest(request);
823
845
  return StatsResponseParser.fromPacket(packet);
824
846
  }
825
847
  /**
826
- * Get incremental updates for files, clients, servers, and friends
848
+ * Get updates for files, clients, servers, and friends.
849
+ *
850
+ * The underlying EC_OP_GET_UPDATE request is incremental per connection: the daemon
851
+ * only sends the fields that changed since the previous call. This method keeps a
852
+ * client-side cache and merges those diffs, so it always returns full snapshots.
853
+ * Downloads carry their connected peers in `sources` (linked via client requestFileId
854
+ * and file ecid). The cache is reset whenever the connection is re-established.
827
855
  */
828
856
  async getUpdate(detailLevel = 4) {
829
- const { UpdateRequest } = await import("./UpdateRequest-Bunl73Ga.mjs");
830
- const { UpdateResponseParser } = await import("./UpdateResponse-1LhyH9Zf.mjs");
857
+ const { UpdateRequest } = await import("./UpdateRequest-CaQ867p8.js");
858
+ const { UpdateState } = await import("./UpdateState-Dn-SuAsj.js");
831
859
  const request = new UpdateRequest(detailLevel);
832
860
  const packet = await this.connection.sendRequest(request);
833
- return UpdateResponseParser.fromPacket(packet);
861
+ const generation = this.connection.getSessionGeneration();
862
+ if (!this.updateState || this.updateState.sessionGeneration !== generation) this.updateState = new UpdateState(generation);
863
+ return this.updateState.apply(packet);
864
+ }
865
+ /**
866
+ * Get the download queue including per-peer source details.
867
+ *
868
+ * Unlike getDownloadQueue() (EC_OP_GET_DLOAD_QUEUE, which never includes peers),
869
+ * this uses the incremental update mechanism (see getUpdate), the only way the
870
+ * daemon exposes the clients each download is fed from. Each returned file has
871
+ * `sources` filled with the currently connected peers for that download.
872
+ */
873
+ async getDownloadQueueWithSources() {
874
+ return (await this.getUpdate()).downloadQueue;
834
875
  }
835
876
  /**
836
877
  * Start an asynchronous search
837
878
  */
838
879
  async searchAsync(query, searchType, filters) {
839
- const { SearchRequest } = await import("./SearchRequest-CNqz-K1Z.mjs");
880
+ const { SearchRequest } = await import("./SearchRequest-DOakj8fA.js");
840
881
  const request = new SearchRequest(query, searchType, filters);
841
882
  await this.connection.sendRequest(request);
842
883
  return query;
@@ -845,8 +886,8 @@ var AmuleClient = class {
845
886
  * Get search status (0-1)
846
887
  */
847
888
  async searchStatus() {
848
- const { SearchStatusRequest } = await import("./SearchStatusRequest-Bv6iaC9Y.mjs");
849
- const { SearchProgressResponse } = await import("./SearchProgressResponse-Bputc9Ww.mjs");
889
+ const { SearchStatusRequest } = await import("./SearchStatusRequest-B1ZzSQlE.js");
890
+ const { SearchProgressResponse } = await import("./SearchProgressResponse-BQPliUup.js");
850
891
  const request = new SearchStatusRequest();
851
892
  const packet = await this.connection.sendRequest(request);
852
893
  return SearchProgressResponse.fromPacket(packet).progress;
@@ -855,8 +896,8 @@ var AmuleClient = class {
855
896
  * Get search results
856
897
  */
857
898
  async searchResults() {
858
- const { SearchResultsRequest } = await import("./SearchResultsRequest-DKG508KF.mjs");
859
- const { SearchResultsResponseParser } = await import("./SearchResultsResponse-ChNrKJ6_.mjs");
899
+ const { SearchResultsRequest } = await import("./SearchResultsRequest-oZBs5KKm.js");
900
+ const { SearchResultsResponseParser } = await import("./SearchResultsResponse-C9I9x035.js");
860
901
  const request = new SearchResultsRequest();
861
902
  const packet = await this.connection.sendRequest(request);
862
903
  return SearchResultsResponseParser.fromPacket(packet);
@@ -877,7 +918,7 @@ var AmuleClient = class {
877
918
  * Stop current search
878
919
  */
879
920
  async searchStop() {
880
- const { SearchStopRequest } = await import("./SearchStopRequest-rET-2Nsz.mjs");
921
+ const { SearchStopRequest } = await import("./SearchStopRequest-FfXf_DCn.js");
881
922
  const request = new SearchStopRequest();
882
923
  await this.connection.sendRequest(request);
883
924
  }
@@ -885,7 +926,7 @@ var AmuleClient = class {
885
926
  * Download a file from search results
886
927
  */
887
928
  async downloadSearchResult(hash) {
888
- const { DownloadFileRequest } = await import("./DownloadFileRequest-CcNqsBo7.mjs");
929
+ const { DownloadFileRequest } = await import("./DownloadFileRequest-WfOIV07R.js");
889
930
  const request = new DownloadFileRequest(hash);
890
931
  await this.connection.sendRequest(request);
891
932
  }
@@ -893,7 +934,7 @@ var AmuleClient = class {
893
934
  * Download from an ed2k link
894
935
  */
895
936
  async downloadEd2kLink(link) {
896
- const { AddLinkRequest } = await import("./AddLinkRequest-DwUbSMXD.mjs");
937
+ const { AddLinkRequest } = await import("./AddLinkRequest-DEKGy-R2.js");
897
938
  const request = new AddLinkRequest(link);
898
939
  await this.connection.sendRequest(request);
899
940
  }
@@ -901,8 +942,8 @@ var AmuleClient = class {
901
942
  * Get download queue
902
943
  */
903
944
  async getDownloadQueue() {
904
- const { DownloadQueueRequest } = await import("./DownloadQueueRequest-bd7lFiMj.mjs");
905
- const { DownloadQueueResponseParser } = await import("./DownloadQueueResponse-DyP1rLTV.mjs");
945
+ const { DownloadQueueRequest } = await import("./DownloadQueueRequest-Br-pgrRt.js");
946
+ const { DownloadQueueResponseParser } = await import("./DownloadQueueResponse-C-5d4teB.js").then((n) => n.n);
906
947
  const request = new DownloadQueueRequest();
907
948
  const packet = await this.connection.sendRequest(request);
908
949
  return DownloadQueueResponseParser.fromPacket(packet).files;
@@ -911,8 +952,8 @@ var AmuleClient = class {
911
952
  * Get shared files
912
953
  */
913
954
  async getSharedFiles() {
914
- const { SharedFilesRequest } = await import("./SharedFilesRequest-D2M3K0eB.mjs");
915
- const { SharedFilesResponseParser } = await import("./SharedFilesResponse-BiXT_oCx.mjs");
955
+ const { SharedFilesRequest } = await import("./SharedFilesRequest-BZKz0oyn.js");
956
+ const { SharedFilesResponseParser } = await import("./SharedFilesResponse-DE0cd1DT.js").then((n) => n.n);
916
957
  const request = new SharedFilesRequest();
917
958
  const packet = await this.connection.sendRequest(request);
918
959
  return SharedFilesResponseParser.fromPacket(packet).files;
@@ -921,16 +962,17 @@ var AmuleClient = class {
921
962
  * Reload shared files list
922
963
  */
923
964
  async reloadSharedFiles() {
924
- const { ReloadSharedFilesRequest } = await import("./ReloadSharedFilesRequest-CPwAEJYG.mjs");
965
+ const { ReloadSharedFilesRequest } = await import("./ReloadSharedFilesRequest-BbDUeGcq.js");
925
966
  const request = new ReloadSharedFilesRequest();
926
967
  await this.connection.sendRequest(request);
927
968
  }
928
969
  /**
929
- * Get client upload/download queue (clients we are uploading to/downloading from)
970
+ * Get the upload queue: clients we are uploading to or that wait in our queue
971
+ * (EC_OP_GET_ULOAD_QUEUE). For download sources use getDownloadQueueWithSources().
930
972
  */
931
973
  async getClientQueue() {
932
- const { ClientQueueRequest } = await import("./ClientQueueRequest-D9FaX5K9.mjs");
933
- const { ClientQueueResponseParser } = await import("./ClientQueueResponse-FVQBR_8b.mjs");
974
+ const { ClientQueueRequest } = await import("./ClientQueueRequest-DrLXSxtp.js");
975
+ const { ClientQueueResponseParser } = await import("./ClientQueueResponse-CXxY_9wU.js").then((n) => n.n);
934
976
  const request = new ClientQueueRequest();
935
977
  const packet = await this.connection.sendRequest(request);
936
978
  return ClientQueueResponseParser.fromPacket(packet).clients;
@@ -939,8 +981,8 @@ var AmuleClient = class {
939
981
  * Get the list of servers
940
982
  */
941
983
  async getServerList() {
942
- const { ServerListRequest } = await import("./ServerListRequest-FwFQBp12.mjs");
943
- const { ServerListResponseParser } = await import("./ServerListResponse-ZAKSSCPZ.mjs");
984
+ const { ServerListRequest } = await import("./ServerListRequest-3yMrgZID.js");
985
+ const { ServerListResponseParser } = await import("./ServerListResponse-Do3iRai0.js").then((n) => n.n);
944
986
  const request = new ServerListRequest();
945
987
  const packet = await this.connection.sendRequest(request);
946
988
  return ServerListResponseParser.fromPacket(packet).servers;
@@ -949,7 +991,7 @@ var AmuleClient = class {
949
991
  * Connect to a specific server
950
992
  */
951
993
  async connectToServer(ip, port) {
952
- const { ServerConnectRequest } = await import("./ServerConnectRequest-CcO2-Eqd.mjs");
994
+ const { ServerConnectRequest } = await import("./ServerConnectRequest-Cdiw-KWu.js");
953
995
  const request = new ServerConnectRequest(ip, port);
954
996
  await this.connection.sendRequest(request);
955
997
  }
@@ -957,7 +999,7 @@ var AmuleClient = class {
957
999
  * Disconnect from the current server
958
1000
  */
959
1001
  async disconnectFromServer() {
960
- const { ServerDisconnectRequest } = await import("./ServerDisconnectRequest-DEORM3SF.mjs");
1002
+ const { ServerDisconnectRequest } = await import("./ServerDisconnectRequest-BVXSumxX.js");
961
1003
  const request = new ServerDisconnectRequest();
962
1004
  await this.connection.sendRequest(request);
963
1005
  }
@@ -965,7 +1007,7 @@ var AmuleClient = class {
965
1007
  * Create a category
966
1008
  */
967
1009
  async createCategory(category) {
968
- const { CreateCategoryRequest } = await import("./CreateCategoryRequest-Br6yfDhZ.mjs");
1010
+ const { CreateCategoryRequest } = await import("./CreateCategoryRequest-COulF12x.js");
969
1011
  const request = new CreateCategoryRequest(category);
970
1012
  await this.connection.sendRequest(request);
971
1013
  }
@@ -973,7 +1015,7 @@ var AmuleClient = class {
973
1015
  * Update a category
974
1016
  */
975
1017
  async updateCategory(id, category) {
976
- const { UpdateCategoryRequest } = await import("./UpdateCategoryRequest-CgzH7SxP.mjs");
1018
+ const { UpdateCategoryRequest } = await import("./UpdateCategoryRequest-Bu22YjOm.js");
977
1019
  const request = new UpdateCategoryRequest(id, category);
978
1020
  await this.connection.sendRequest(request);
979
1021
  }
@@ -981,7 +1023,7 @@ var AmuleClient = class {
981
1023
  * Delete a category
982
1024
  */
983
1025
  async deleteCategory(id) {
984
- const { DeleteCategoryRequest } = await import("./DeleteCategoryRequest-C2-p6sx0.mjs");
1026
+ const { DeleteCategoryRequest } = await import("./DeleteCategoryRequest-D-mljaNV.js");
985
1027
  const request = new DeleteCategoryRequest(id);
986
1028
  await this.connection.sendRequest(request);
987
1029
  }
@@ -989,8 +1031,8 @@ var AmuleClient = class {
989
1031
  * Get all categories
990
1032
  */
991
1033
  async getCategories() {
992
- const { GetPreferencesRequest } = await import("./GetPreferencesRequest-C94Su9IH.mjs");
993
- const { PreferencesResponseParser } = await import("./PreferencesResponse-Dth-n2sA.mjs");
1034
+ const { GetPreferencesRequest } = await import("./GetPreferencesRequest-BE3RbRRn.js");
1035
+ const { PreferencesResponseParser } = await import("./PreferencesResponse-BmGTQM30.js");
994
1036
  const request = new GetPreferencesRequest(1);
995
1037
  const packet = await this.connection.sendRequest(request);
996
1038
  return PreferencesResponseParser.fromPacket(packet).categories;
@@ -999,7 +1041,7 @@ var AmuleClient = class {
999
1041
  * Set file category
1000
1042
  */
1001
1043
  async setFileCategory(hash, categoryId) {
1002
- const { SetFileCategoryRequest } = await import("./SetFileCategoryRequest-BwEPJVeR.mjs");
1044
+ const { SetFileCategoryRequest } = await import("./SetFileCategoryRequest-CFgkJB-H.js");
1003
1045
  const request = new SetFileCategoryRequest(hash, categoryId);
1004
1046
  await this.connection.sendRequest(request);
1005
1047
  }
@@ -1007,7 +1049,7 @@ var AmuleClient = class {
1007
1049
  * Send a download command (PAUSE, RESUME, STOP, DELETE, etc.)
1008
1050
  */
1009
1051
  async sendDownloadCommand(hash, command) {
1010
- const { DownloadCommandRequest } = await import("./DownloadCommandRequest-CaULjfNi.mjs");
1052
+ const { DownloadCommandRequest } = await import("./DownloadCommandRequest-Bf1Ez8Da.js");
1011
1053
  const request = new DownloadCommandRequest(hash, command);
1012
1054
  await this.connection.sendRequest(request);
1013
1055
  }
@@ -1039,7 +1081,7 @@ var AmuleClient = class {
1039
1081
  * Trigger a server list update from an URL.
1040
1082
  */
1041
1083
  async updateServerListFromUrl(url) {
1042
- const { ServerUpdateFromUrlRequest } = await import("./ServerUpdateFromUrlRequest-D4xBqJDJ.mjs");
1084
+ const { ServerUpdateFromUrlRequest } = await import("./ServerUpdateFromUrlRequest-DpxBII5W.js");
1043
1085
  const request = new ServerUpdateFromUrlRequest(url);
1044
1086
  await this.connection.sendRequest(request);
1045
1087
  }
@@ -1047,7 +1089,7 @@ var AmuleClient = class {
1047
1089
  * Set upload priority for a shared file.
1048
1090
  */
1049
1091
  async setSharedFilePriority(hash, priority) {
1050
- const { SharedFilePriorityRequest } = await import("./SharedFilePriorityRequest-j6ImgagV.mjs");
1092
+ const { SharedFilePriorityRequest } = await import("./SharedFilePriorityRequest-BMNmaL06.js");
1051
1093
  const request = new SharedFilePriorityRequest(hash, priority);
1052
1094
  await this.connection.sendRequest(request);
1053
1095
  }
@@ -1055,8 +1097,8 @@ var AmuleClient = class {
1055
1097
  * Get daemon preferences for general/connection/servers/security sections.
1056
1098
  */
1057
1099
  async getPreferences() {
1058
- const { GetPreferencesRequest } = await import("./GetPreferencesRequest-C94Su9IH.mjs");
1059
- const { PreferencesDetailsResponseParser } = await import("./PreferencesDetailsResponse-BjMxbvVY.mjs");
1100
+ const { GetPreferencesRequest } = await import("./GetPreferencesRequest-BE3RbRRn.js");
1101
+ const { PreferencesDetailsResponseParser } = await import("./PreferencesDetailsResponse-D8lBd8Ot.js");
1060
1102
  const request = new GetPreferencesRequest(2118);
1061
1103
  const packet = await this.connection.sendRequest(request);
1062
1104
  return PreferencesDetailsResponseParser.fromPacket(packet).preferences;
@@ -1066,12 +1108,10 @@ var AmuleClient = class {
1066
1108
  */
1067
1109
  async setPreferences(preferences) {
1068
1110
  if (!preferences.general && !preferences.connection && !preferences.servers && !preferences.security) return;
1069
- const { SetPreferencesRequest } = await import("./SetPreferencesRequest-D2fVIH3P.mjs");
1111
+ const { SetPreferencesRequest } = await import("./SetPreferencesRequest-BdZ40Ao_.js");
1070
1112
  const request = new SetPreferencesRequest(preferences);
1071
1113
  await this.connection.sendRequest(request);
1072
1114
  }
1073
1115
  };
1074
1116
  //#endregion
1075
- export { AmuleClient, AmuleException, ChunkStatus, CommunicationException, CustomTag, DoubleTag, DownloadCommand, ECDetailLevel, ECOpCode, ECSearchType, ECTagName, EcPrefs, FileStatus, Flags, Hash16Tag, InvalidECException, Ipv4Tag, PARTSIZE, Packet, PacketParser, PacketWriter, ProtocolVersion, SearchType, ServerException, StringTag, Tag, UByteTag, UInt128Tag, UIntTag, ULongTag, UShortTag };
1076
-
1077
- //# sourceMappingURL=index.mjs.map
1117
+ export { AmuleClient, AmuleException, ChunkStatus, CommunicationException, CustomTag, DoubleTag, DownloadCommand, ECDetailLevel, ECOpCode, ECSearchFileDownloadStatus, ECSearchType, ECTagName, EcPrefs, FileStatus, Flags, Hash16Tag, InvalidECException, Ipv4Tag, PARTSIZE, Packet, PacketParser, PacketWriter, ProtocolVersion, SearchType, ServerException, StringTag, Tag, UByteTag, UInt128Tag, UIntTag, ULongTag, UShortTag };
@@ -0,0 +1,13 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll as t };
@@ -20,7 +20,15 @@ function toOptionalIp(value) {
20
20
  if (value === void 0) return void 0;
21
21
  return formatIp(value);
22
22
  }
23
+ /**
24
+ * Read the own numeric value of a tag (e.g. the ECID carried by EC_TAG_PARTFILE / EC_TAG_CLIENT container tags).
25
+ * Returns undefined when the tag value is not numeric (string, buffer, ...).
26
+ */
27
+ function tagOwnNumericValue(tag) {
28
+ if (!tag) return void 0;
29
+ const value = tag.getValue();
30
+ if (typeof value === "number") return value;
31
+ if (typeof value === "bigint") return Number(value);
32
+ }
23
33
  //#endregion
24
- export { toOptionalNumber as i, toOptionalBool as n, toOptionalIp as r, formatIp as t };
25
-
26
- //# sourceMappingURL=utils-DBnUQnZ-.mjs.map
34
+ export { toOptionalNumber as a, toOptionalIp as i, tagOwnNumericValue as n, toOptionalBool as r, formatIp as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amule-ec-client",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "A TypeScript client for Amule EC API.",
5
5
  "author": "José Carlos HR <joecarlhr@gmail.com>",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- {"version":3,"file":"AddLinkRequest-DwUbSMXD.mjs","names":[],"sources":["../src/request/AddLinkRequest.ts"],"sourcesContent":["/**\n * Add Link Request - Download from ED2K link\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { StringTag } from '../ec/tag/Tag';\n\nexport class AddLinkRequest extends Request {\n\tconstructor(link: string) {\n\t\tsuper(ECOpCode.EC_OP_ADD_LINK);\n\n\t\tthis.addTag(new StringTag(ECTagName.EC_TAG_PARTFILE_ED2K_LINK, link));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,iBAAb,cAAoC,QAAQ;CAC3C,YAAY,MAAc;EACzB,MAAA,CAA6B;EAE7B,KAAK,OAAO,IAAI,UAAA,KAA+C,IAAI,CAAC;CACrE;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClientQueueRequest-D9FaX5K9.mjs","names":[],"sources":["../src/request/ClientQueueRequest.ts"],"sourcesContent":["/**\n * Client Queue Request - Get client upload queue\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName, ECDetailLevel } from '../ec/Codes';\nimport { UByteTag } from '../ec/tag/Tag';\n\nexport class ClientQueueRequest extends Request {\n\tconstructor(detailLevel: ECDetailLevel = ECDetailLevel.EC_DETAIL_FULL) {\n\t\tsuper(ECOpCode.EC_OP_GET_ULOAD_QUEUE);\n\n\t\tthis.addTag(new UByteTag(ECTagName.EC_TAG_DETAIL_LEVEL, detailLevel));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,qBAAb,cAAwC,QAAQ;CAC/C,YAAY,cAAA,GAA2D;EACtE,MAAA,EAAoC;EAEpC,KAAK,OAAO,IAAI,SAAA,GAAwC,WAAW,CAAC;CACrE;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClientQueueResponse-FVQBR_8b.mjs","names":[],"sources":["../src/response/ClientQueueResponse.ts"],"sourcesContent":["/**\n * Client Queue Response - Parse client upload queue\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findNumericTag, findTag } from '../ec/tag/Tag';\nimport { toOptionalBool, toOptionalIp, toOptionalNumber } from './utils';\nimport { AmuleUpDownClient } from '../model';\n\nexport interface ClientQueueResponse {\n\tclients: AmuleUpDownClient[];\n}\n\nexport class ClientQueueResponseParser {\n\tstatic fromPacket(packet: Packet): ClientQueueResponse {\n\t\treturn this.fromTags(packet.tags);\n\t}\n\n\tstatic fromTags(allTags: any[]): ClientQueueResponse {\n\t\tconst clients: AmuleUpDownClient[] = [];\n\n\t\t// Find all client tags\n\t\tconst clientTags = allTags.filter((tag) => tag.name === ECTagName.EC_TAG_CLIENT);\n\n\t\tfor (const clientTag of clientTags) {\n\t\t\tconst tags = clientTag.nestedTags || [];\n\n\t\t\tconst client: AmuleUpDownClient = {\n\t\t\t\tclientName: findTag(tags, ECTagName.EC_TAG_CLIENT_NAME)?.getValue(),\n\t\t\t\tuserHashHexString: findTag(tags, ECTagName.EC_TAG_CLIENT_HASH)?.getValue()?.toString('hex'),\n\t\t\t\tuserID: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_USER_ID)?.getInt(),\n\t\t\t\tscore: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_SCORE)?.getInt(),\n\t\t\t\tsoftware: findTag(tags, ECTagName.EC_TAG_CLIENT_SOFTWARE)?.getValue(),\n\t\t\t\tsoftVerStr: findTag(tags, ECTagName.EC_TAG_CLIENT_SOFT_VER_STR)?.getValue(),\n\t\t\t\tuserIP: toOptionalIp(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_USER_IP)?.getInt()),\n\t\t\t\tuserPort: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_USER_PORT)?.getInt(),\n\t\t\t\tsourceFrom: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_FROM)?.getLong()),\n\t\t\t\tserverIP: toOptionalIp(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_SERVER_IP)?.getInt()),\n\t\t\t\tserverPort: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_SERVER_PORT)?.getInt(),\n\t\t\t\tserverName: findTag(tags, ECTagName.EC_TAG_CLIENT_SERVER_NAME)?.getValue(),\n\n\t\t\t\tupSpeed: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_UP_SPEED)?.getLong()),\n\t\t\t\tdownSpeed: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_DOWN_SPEED)?.getLong()),\n\t\t\t\tuploadSession: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_UPLOAD_SESSION)?.getLong()),\n\t\t\t\ttransferredDown: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SIZE_XFER)?.getLong()),\n\t\t\t\tuploadedTotal: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_UPLOAD_TOTAL)?.getLong()),\n\t\t\t\tdownloadedTotal: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_DOWNLOAD_TOTAL)?.getLong()),\n\n\t\t\t\tuploadState: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_UPLOAD_STATE)?.getInt(),\n\t\t\t\tdownloadState: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_DOWNLOAD_STATE)?.getInt(),\n\t\t\t\tidentState: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_IDENT_STATE)?.getInt(),\n\t\t\t\textProtocol: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_EXT_PROTOCOL)?.getInt(),\n\t\t\t\twaitingPosition: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_WAITING_POSITION)?.getInt(),\n\t\t\t\tremoteQueueRank: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_REMOTE_QUEUE_RANK)?.getInt(),\n\t\t\t\toldRemoteQueueRank: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK)?.getInt(),\n\t\t\t\tobfuscationStatus: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_OBFUSCATION_STATUS)?.getInt(),\n\t\t\t\tkadPort: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_KAD_PORT)?.getInt(),\n\t\t\t\tfriendSlot: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_FRIEND_SLOT)?.getInt(),\n\t\t\t\tuploadFileId: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_UPLOAD_FILE)?.getLong()),\n\t\t\t\tuploadFilename: findTag(tags, ECTagName.EC_TAG_PARTFILE_NAME)?.getValue(),\n\t\t\t\trequestFileId: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_REQUEST_FILE)?.getLong()),\n\t\t\t\tremoteFilename: findTag(tags, ECTagName.EC_TAG_CLIENT_REMOTE_FILENAME)?.getValue(),\n\t\t\t\tdisableViewShared: toOptionalBool(findNumericTag(tags, ECTagName.EC_TAG_CLIENT_DISABLE_VIEW_SHARED)?.getInt()),\n\t\t\t\tversion: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_VERSION)?.getInt(),\n\t\t\t\tmodVersion: findTag(tags, ECTagName.EC_TAG_CLIENT_MOD_VERSION)?.getValue(),\n\t\t\t\tosInfo: findTag(tags, ECTagName.EC_TAG_CLIENT_OS_INFO)?.getValue(),\n\t\t\t\tavailableParts: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_AVAILABLE_PARTS)?.getInt(),\n\t\t\t\tpartStatus: findTag(tags, ECTagName.EC_TAG_CLIENT_PART_STATUS)?.getValue(),\n\t\t\t\tnextRequestedPart: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_NEXT_REQUESTED_PART)?.getInt(),\n\t\t\t\tlastDownloadingPart: findNumericTag(tags, ECTagName.EC_TAG_CLIENT_LAST_DOWNLOADING_PART)?.getInt(),\n\t\t\t\tuploadPartStatus: findTag(tags, ECTagName.EC_TAG_CLIENT_UPLOAD_PART_STATUS)?.getValue(),\n\t\t\t\t// Additional fields can be added here as needed\n\t\t\t};\n\n\t\t\tclients.push(client);\n\t\t}\n\n\t\treturn { clients };\n\t}\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Codes-CjiW7Pdl.mjs","names":[],"sources":["../src/ec/Codes.ts"],"sourcesContent":["// EC Protocol constants and enumerations\n\nexport enum ProtocolVersion {\n\tEC_CURRENT_PROTOCOL_VERSION = 0x0204,\n}\n\nexport enum ECFlag {\n\tEC_FLAG_ZLIB = 0x00000001,\n\tEC_FLAG_UTF8_NUMBERS = 0x00000002,\n\tEC_FLAG_HAS_ID = 0x00000004,\n\tEC_FLAG_ACCEPTS = 0x00000010,\n\tEC_FLAG_UNKNOWN_MASK = 0xff7f7f08,\n}\n\nexport enum ECOpCode {\n\tEC_OP_NOOP = 0x01,\n\tEC_OP_AUTH_REQ = 0x02,\n\tEC_OP_AUTH_FAIL = 0x03,\n\tEC_OP_AUTH_OK = 0x04,\n\tEC_OP_FAILED = 0x05,\n\tEC_OP_STRINGS = 0x06,\n\tEC_OP_MISC_DATA = 0x07,\n\tEC_OP_SHUTDOWN = 0x08,\n\tEC_OP_ADD_LINK = 0x09,\n\tEC_OP_STAT_REQ = 0x0a,\n\tEC_OP_GET_CONNSTATE = 0x0b,\n\tEC_OP_STATS = 0x0c,\n\tEC_OP_GET_DLOAD_QUEUE = 0x0d,\n\tEC_OP_GET_ULOAD_QUEUE = 0x0e,\n\tEC_OP_GET_SHARED_FILES = 0x10,\n\tEC_OP_SHARED_SET_PRIO = 0x11,\n\tEC_OP_PARTFILE_SWAP_A4AF_THIS = 0x16,\n\tEC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO = 0x17,\n\tEC_OP_PARTFILE_SWAP_A4AF_OTHERS = 0x18,\n\tEC_OP_PARTFILE_PAUSE = 0x19,\n\tEC_OP_PARTFILE_RESUME = 0x1a,\n\tEC_OP_PARTFILE_STOP = 0x1b,\n\tEC_OP_PARTFILE_PRIO_SET = 0x1c,\n\tEC_OP_PARTFILE_DELETE = 0x1d,\n\tEC_OP_PARTFILE_SET_CAT = 0x1e,\n\tEC_OP_DLOAD_QUEUE = 0x1f,\n\tEC_OP_ULOAD_QUEUE = 0x20,\n\tEC_OP_SHARED_FILES = 0x22,\n\tEC_OP_SHAREDFILES_RELOAD = 0x23,\n\tEC_OP_RENAME_FILE = 0x25,\n\tEC_OP_SEARCH_START = 0x26,\n\tEC_OP_SEARCH_STOP = 0x27,\n\tEC_OP_SEARCH_RESULTS = 0x28,\n\tEC_OP_SEARCH_PROGRESS = 0x29,\n\tEC_OP_DOWNLOAD_SEARCH_RESULT = 0x2a,\n\tEC_OP_IPFILTER_RELOAD = 0x2b,\n\tEC_OP_GET_SERVER_LIST = 0x2c,\n\tEC_OP_SERVER_LIST = 0x2d,\n\tEC_OP_SERVER_DISCONNECT = 0x2e,\n\tEC_OP_SERVER_CONNECT = 0x2f,\n\tEC_OP_SERVER_REMOVE = 0x30,\n\tEC_OP_SERVER_ADD = 0x31,\n\tEC_OP_SERVER_UPDATE_FROM_URL = 0x32,\n\tEC_OP_ADDLOGLINE = 0x33,\n\tEC_OP_ADDDEBUGLOGLINE = 0x34,\n\tEC_OP_GET_LOG = 0x35,\n\tEC_OP_GET_DEBUGLOG = 0x36,\n\tEC_OP_GET_SERVERINFO = 0x37,\n\tEC_OP_LOG = 0x38,\n\tEC_OP_DEBUGLOG = 0x39,\n\tEC_OP_SERVERINFO = 0x3a,\n\tEC_OP_RESET_LOG = 0x3b,\n\tEC_OP_RESET_DEBUGLOG = 0x3c,\n\tEC_OP_CLEAR_SERVERINFO = 0x3d,\n\tEC_OP_GET_LAST_LOG_ENTRY = 0x3e,\n\tEC_OP_GET_PREFERENCES = 0x3f,\n\tEC_OP_SET_PREFERENCES = 0x40,\n\tEC_OP_CREATE_CATEGORY = 0x41,\n\tEC_OP_UPDATE_CATEGORY = 0x42,\n\tEC_OP_DELETE_CATEGORY = 0x43,\n\tEC_OP_GET_STATSGRAPHS = 0x44,\n\tEC_OP_STATSGRAPHS = 0x45,\n\tEC_OP_GET_STATSTREE = 0x46,\n\tEC_OP_STATSTREE = 0x47,\n\tEC_OP_KAD_START = 0x48,\n\tEC_OP_KAD_STOP = 0x49,\n\tEC_OP_CONNECT = 0x4a,\n\tEC_OP_DISCONNECT = 0x4b,\n\tEC_OP_KAD_UPDATE_FROM_URL = 0x4d,\n\tEC_OP_KAD_BOOTSTRAP_FROM_IP = 0x4e,\n\tEC_OP_AUTH_SALT = 0x4f,\n\tEC_OP_AUTH_PASSWD = 0x50,\n\tEC_OP_IPFILTER_UPDATE = 0x51,\n\tEC_OP_GET_UPDATE = 0x52,\n\tEC_OP_CLEAR_COMPLETED = 0x53,\n\tEC_OP_CLIENT_SWAP_TO_ANOTHER_FILE = 0x54,\n\tEC_OP_SHARED_FILE_SET_COMMENT = 0x55,\n\tEC_OP_SERVER_SET_STATIC_PRIO = 0x56,\n\tEC_OP_FRIEND = 0x57,\n}\n\nexport enum ECTagName {\n\tEC_TAG_STRING = 0x0000,\n\tEC_TAG_PASSWD_HASH = 0x0001,\n\tEC_TAG_PROTOCOL_VERSION = 0x0002,\n\tEC_TAG_VERSION_ID = 0x0003,\n\tEC_TAG_DETAIL_LEVEL = 0x0004,\n\tEC_TAG_CONNSTATE = 0x0005,\n\tEC_TAG_ED2K_ID = 0x0006,\n\tEC_TAG_LOG_TO_STATUS = 0x0007,\n\tEC_TAG_BOOTSTRAP_IP = 0x0008,\n\tEC_TAG_BOOTSTRAP_PORT = 0x0009,\n\tEC_TAG_CLIENT_ID = 0x000a,\n\tEC_TAG_PASSWD_SALT = 0x000b,\n\tEC_TAG_CAN_ZLIB = 0x000c,\n\tEC_TAG_CAN_UTF8_NUMBERS = 0x000d,\n\tEC_TAG_CAN_NOTIFY = 0x000e,\n\tEC_TAG_ECID = 0x000f,\n\tEC_TAG_KAD_ID = 0x0010,\n\tEC_TAG_CLIENT_NAME = 0x0100,\n\tEC_TAG_CLIENT_VERSION = 0x0101,\n\tEC_TAG_CLIENT_MOD = 0x0102,\n\tEC_TAG_STATS_UL_SPEED = 0x0200,\n\tEC_TAG_STATS_DL_SPEED = 0x0201,\n\tEC_TAG_STATS_UL_SPEED_LIMIT = 0x0202,\n\tEC_TAG_STATS_DL_SPEED_LIMIT = 0x0203,\n\tEC_TAG_STATS_UP_OVERHEAD = 0x0204,\n\tEC_TAG_STATS_DOWN_OVERHEAD = 0x0205,\n\tEC_TAG_STATS_TOTAL_SRC_COUNT = 0x0206,\n\tEC_TAG_STATS_BANNED_COUNT = 0x0207,\n\tEC_TAG_STATS_UL_QUEUE_LEN = 0x0208,\n\tEC_TAG_STATS_ED2K_USERS = 0x0209,\n\tEC_TAG_STATS_KAD_USERS = 0x020a,\n\tEC_TAG_STATS_ED2K_FILES = 0x020b,\n\tEC_TAG_STATS_KAD_FILES = 0x020c,\n\tEC_TAG_STATS_LOGGER_MESSAGE = 0x020d,\n\tEC_TAG_STATS_KAD_FIREWALLED_UDP = 0x020e,\n\tEC_TAG_STATS_KAD_INDEXED_SOURCES = 0x020f,\n\tEC_TAG_STATS_KAD_INDEXED_KEYWORDS = 0x0210,\n\tEC_TAG_STATS_KAD_INDEXED_NOTES = 0x0211,\n\tEC_TAG_STATS_KAD_INDEXED_LOAD = 0x0212,\n\tEC_TAG_STATS_KAD_IP_ADRESS = 0x0213,\n\tEC_TAG_STATS_BUDDY_STATUS = 0x0214,\n\tEC_TAG_STATS_BUDDY_IP = 0x0215,\n\tEC_TAG_STATS_BUDDY_PORT = 0x0216,\n\tEC_TAG_STATS_KAD_IN_LAN_MODE = 0x0217,\n\tEC_TAG_STATS_TOTAL_SENT_BYTES = 0x0218,\n\tEC_TAG_STATS_TOTAL_RECEIVED_BYTES = 0x0219,\n\tEC_TAG_STATS_SHARED_FILE_COUNT = 0x021a,\n\tEC_TAG_STATS_KAD_NODES = 0x021b,\n\tEC_TAG_PARTFILE = 0x0300,\n\tEC_TAG_PARTFILE_NAME = 0x0301,\n\tEC_TAG_PARTFILE_PARTMETID = 0x0302,\n\tEC_TAG_PARTFILE_SIZE_FULL = 0x0303,\n\tEC_TAG_PARTFILE_SIZE_XFER = 0x0304,\n\tEC_TAG_PARTFILE_SIZE_XFER_UP = 0x0305,\n\tEC_TAG_PARTFILE_SIZE_DONE = 0x0306,\n\tEC_TAG_PARTFILE_SPEED = 0x0307,\n\tEC_TAG_PARTFILE_STATUS = 0x0308,\n\tEC_TAG_PARTFILE_PRIO = 0x0309,\n\tEC_TAG_PARTFILE_SOURCE_COUNT = 0x030a,\n\tEC_TAG_PARTFILE_SOURCE_COUNT_A4AF = 0x030b,\n\tEC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT = 0x030c,\n\tEC_TAG_PARTFILE_SOURCE_COUNT_XFER = 0x030d,\n\tEC_TAG_PARTFILE_ED2K_LINK = 0x030e,\n\tEC_TAG_PARTFILE_CAT = 0x030f,\n\tEC_TAG_PARTFILE_LAST_RECV = 0x0310,\n\tEC_TAG_PARTFILE_LAST_SEEN_COMP = 0x0311,\n\tEC_TAG_PARTFILE_PART_STATUS = 0x0312,\n\tEC_TAG_PARTFILE_GAP_STATUS = 0x0313,\n\tEC_TAG_PARTFILE_REQ_STATUS = 0x0314,\n\tEC_TAG_PARTFILE_SOURCE_NAMES = 0x0315,\n\tEC_TAG_PARTFILE_COMMENTS = 0x0316,\n\tEC_TAG_PARTFILE_STOPPED = 0x0317,\n\tEC_TAG_PARTFILE_DOWNLOAD_ACTIVE = 0x0318,\n\tEC_TAG_PARTFILE_LOST_CORRUPTION = 0x0319,\n\tEC_TAG_PARTFILE_GAINED_COMPRESSION = 0x031a,\n\tEC_TAG_PARTFILE_SAVED_ICH = 0x031b,\n\tEC_TAG_PARTFILE_SOURCE_NAMES_COUNTS = 0x031c,\n\tEC_TAG_PARTFILE_AVAILABLE_PARTS = 0x031d,\n\tEC_TAG_PARTFILE_HASH = 0x031e,\n\tEC_TAG_PARTFILE_SHARED = 0x031f,\n\tEC_TAG_PARTFILE_HASHED_PART_COUNT = 0x0320,\n\tEC_TAG_PARTFILE_A4AFAUTO = 0x0321,\n\tEC_TAG_PARTFILE_A4AF_SOURCES = 0x0322,\n\tEC_TAG_KNOWNFILE = 0x0400,\n\tEC_TAG_KNOWNFILE_XFERRED = 0x0401,\n\tEC_TAG_KNOWNFILE_XFERRED_ALL = 0x0402,\n\tEC_TAG_KNOWNFILE_REQ_COUNT = 0x0403,\n\tEC_TAG_KNOWNFILE_REQ_COUNT_ALL = 0x0404,\n\tEC_TAG_KNOWNFILE_ACCEPT_COUNT = 0x0405,\n\tEC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL = 0x0406,\n\tEC_TAG_KNOWNFILE_AICH_MASTERHASH = 0x0407,\n\tEC_TAG_KNOWNFILE_FILENAME = 0x0408,\n\tEC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW = 0x0409,\n\tEC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH = 0x040a,\n\tEC_TAG_KNOWNFILE_PRIO = 0x040b,\n\tEC_TAG_KNOWNFILE_ON_QUEUE = 0x040c,\n\tEC_TAG_KNOWNFILE_COMPLETE_SOURCES = 0x040d,\n\tEC_TAG_KNOWNFILE_COMMENT = 0x040e,\n\tEC_TAG_KNOWNFILE_RATING = 0x040f,\n\tEC_TAG_SERVER = 0x0500,\n\tEC_TAG_SERVER_NAME = 0x0501,\n\tEC_TAG_SERVER_DESC = 0x0502,\n\tEC_TAG_SERVER_ADDRESS = 0x0503,\n\tEC_TAG_SERVER_PING = 0x0504,\n\tEC_TAG_SERVER_USERS = 0x0505,\n\tEC_TAG_SERVER_USERS_MAX = 0x0506,\n\tEC_TAG_SERVER_FILES = 0x0507,\n\tEC_TAG_SERVER_PRIO = 0x0508,\n\tEC_TAG_SERVER_FAILED = 0x0509,\n\tEC_TAG_SERVER_STATIC = 0x050a,\n\tEC_TAG_SERVER_VERSION = 0x050b,\n\tEC_TAG_SERVER_IP = 0x050c,\n\tEC_TAG_SERVER_PORT = 0x050d,\n\tEC_TAG_CLIENT = 0x0600,\n\tEC_TAG_CLIENT_SOFTWARE = 0x0601,\n\tEC_TAG_CLIENT_SCORE = 0x0602,\n\tEC_TAG_CLIENT_HASH = 0x0603,\n\tEC_TAG_CLIENT_FRIEND_SLOT = 0x0604,\n\tEC_TAG_CLIENT_WAIT_TIME = 0x0605,\n\tEC_TAG_CLIENT_XFER_TIME = 0x0606,\n\tEC_TAG_CLIENT_QUEUE_TIME = 0x0607,\n\tEC_TAG_CLIENT_LAST_TIME = 0x0608,\n\tEC_TAG_CLIENT_UPLOAD_SESSION = 0x0609,\n\tEC_TAG_CLIENT_UPLOAD_TOTAL = 0x060a,\n\tEC_TAG_CLIENT_DOWNLOAD_TOTAL = 0x060b,\n\tEC_TAG_CLIENT_DOWNLOAD_STATE = 0x060c,\n\tEC_TAG_CLIENT_UP_SPEED = 0x060d,\n\tEC_TAG_CLIENT_DOWN_SPEED = 0x060e,\n\tEC_TAG_CLIENT_FROM = 0x060f,\n\tEC_TAG_CLIENT_USER_IP = 0x0610,\n\tEC_TAG_CLIENT_USER_PORT = 0x0611,\n\tEC_TAG_CLIENT_SERVER_IP = 0x0612,\n\tEC_TAG_CLIENT_SERVER_PORT = 0x0613,\n\tEC_TAG_CLIENT_SERVER_NAME = 0x0614,\n\tEC_TAG_CLIENT_SOFT_VER_STR = 0x0615,\n\tEC_TAG_CLIENT_WAITING_POSITION = 0x0616,\n\tEC_TAG_CLIENT_IDENT_STATE = 0x0617,\n\tEC_TAG_CLIENT_OBFUSCATION_STATUS = 0x0618,\n\tEC_TAG_CLIENT_CURRENTLYUNUSED1 = 0x0619,\n\tEC_TAG_CLIENT_REMOTE_QUEUE_RANK = 0x061a,\n\tEC_TAG_CLIENT_DISABLE_VIEW_SHARED = 0x061b,\n\tEC_TAG_CLIENT_UPLOAD_STATE = 0x061c,\n\tEC_TAG_CLIENT_EXT_PROTOCOL = 0x061d,\n\tEC_TAG_CLIENT_USER_ID = 0x061e,\n\tEC_TAG_CLIENT_UPLOAD_FILE = 0x061f,\n\tEC_TAG_CLIENT_REQUEST_FILE = 0x0620,\n\tEC_TAG_CLIENT_A4AF_FILES = 0x0621,\n\tEC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK = 0x0622,\n\tEC_TAG_CLIENT_KAD_PORT = 0x0623,\n\tEC_TAG_CLIENT_PART_STATUS = 0x0624,\n\tEC_TAG_CLIENT_NEXT_REQUESTED_PART = 0x0625,\n\tEC_TAG_CLIENT_LAST_DOWNLOADING_PART = 0x0626,\n\tEC_TAG_CLIENT_REMOTE_FILENAME = 0x0627,\n\tEC_TAG_CLIENT_MOD_VERSION = 0x0628,\n\tEC_TAG_CLIENT_OS_INFO = 0x0629,\n\tEC_TAG_CLIENT_AVAILABLE_PARTS = 0x062a,\n\tEC_TAG_CLIENT_UPLOAD_PART_STATUS = 0x062b,\n\tEC_TAG_SEARCHFILE = 0x0700,\n\tEC_TAG_SEARCH_TYPE = 0x0701,\n\tEC_TAG_SEARCH_NAME = 0x0702,\n\tEC_TAG_SEARCH_MIN_SIZE = 0x0703,\n\tEC_TAG_SEARCH_MAX_SIZE = 0x0704,\n\tEC_TAG_SEARCH_FILE_TYPE = 0x0705,\n\tEC_TAG_SEARCH_EXTENSION = 0x0706,\n\tEC_TAG_SEARCH_AVAILABILITY = 0x0707,\n\tEC_TAG_SEARCH_STATUS = 0x0708,\n\tEC_TAG_SEARCH_PARENT = 0x0709,\n\tEC_TAG_FRIEND = 0x0800,\n\tEC_TAG_FRIEND_NAME = 0x0801,\n\tEC_TAG_FRIEND_HASH = 0x0802,\n\tEC_TAG_FRIEND_IP = 0x0803,\n\tEC_TAG_FRIEND_PORT = 0x0804,\n\tEC_TAG_FRIEND_CLIENT = 0x0805,\n\tEC_TAG_FRIEND_ADD = 0x0806,\n\tEC_TAG_FRIEND_REMOVE = 0x0807,\n\tEC_TAG_FRIEND_FRIENDSLOT = 0x0808,\n\tEC_TAG_FRIEND_SHARED = 0x0809,\n\tEC_TAG_SELECT_PREFS = 0x1000,\n\tEC_TAG_PREFS_CATEGORIES = 0x1100,\n\tEC_TAG_CATEGORY = 0x1101,\n\tEC_TAG_CATEGORY_TITLE = 0x1102,\n\tEC_TAG_CATEGORY_PATH = 0x1103,\n\tEC_TAG_CATEGORY_COMMENT = 0x1104,\n\tEC_TAG_CATEGORY_COLOR = 0x1105,\n\tEC_TAG_CATEGORY_PRIO = 0x1106,\n\tEC_TAG_PREFS_GENERAL = 0x1200,\n\tEC_TAG_USER_NICK = 0x1201,\n\tEC_TAG_USER_HASH = 0x1202,\n\tEC_TAG_USER_HOST = 0x1203,\n\tEC_TAG_GENERAL_CHECK_NEW_VERSION = 0x1204,\n\tEC_TAG_PREFS_CONNECTIONS = 0x1300,\n\tEC_TAG_CONN_DL_CAP = 0x1301,\n\tEC_TAG_CONN_UL_CAP = 0x1302,\n\tEC_TAG_CONN_MAX_DL = 0x1303,\n\tEC_TAG_CONN_MAX_UL = 0x1304,\n\tEC_TAG_CONN_SLOT_ALLOCATION = 0x1305,\n\tEC_TAG_CONN_TCP_PORT = 0x1306,\n\tEC_TAG_CONN_UDP_PORT = 0x1307,\n\tEC_TAG_CONN_UDP_DISABLE = 0x1308,\n\tEC_TAG_CONN_MAX_FILE_SOURCES = 0x1309,\n\tEC_TAG_CONN_MAX_CONN = 0x130a,\n\tEC_TAG_CONN_AUTOCONNECT = 0x130b,\n\tEC_TAG_CONN_RECONNECT = 0x130c,\n\tEC_TAG_NETWORK_ED2K = 0x130d,\n\tEC_TAG_NETWORK_KADEMLIA = 0x130e,\n\tEC_TAG_PREFS_MESSAGEFILTER = 0x1400,\n\tEC_TAG_MSGFILTER_ENABLED = 0x1401,\n\tEC_TAG_MSGFILTER_ALL = 0x1402,\n\tEC_TAG_MSGFILTER_FRIENDS = 0x1403,\n\tEC_TAG_MSGFILTER_SECURE = 0x1404,\n\tEC_TAG_MSGFILTER_BY_KEYWORD = 0x1405,\n\tEC_TAG_MSGFILTER_KEYWORDS = 0x1406,\n\tEC_TAG_PREFS_REMOTECTRL = 0x1500,\n\tEC_TAG_WEBSERVER_AUTORUN = 0x1501,\n\tEC_TAG_WEBSERVER_PORT = 0x1502,\n\tEC_TAG_WEBSERVER_GUEST = 0x1503,\n\tEC_TAG_WEBSERVER_USEGZIP = 0x1504,\n\tEC_TAG_WEBSERVER_REFRESH = 0x1505,\n\tEC_TAG_WEBSERVER_TEMPLATE = 0x1506,\n\tEC_TAG_PREFS_ONLINESIG = 0x1600,\n\tEC_TAG_ONLINESIG_ENABLED = 0x1601,\n\tEC_TAG_PREFS_SERVERS = 0x1700,\n\tEC_TAG_SERVERS_REMOVE_DEAD = 0x1701,\n\tEC_TAG_SERVERS_DEAD_SERVER_RETRIES = 0x1702,\n\tEC_TAG_SERVERS_AUTO_UPDATE = 0x1703,\n\tEC_TAG_SERVERS_URL_LIST = 0x1704,\n\tEC_TAG_SERVERS_ADD_FROM_SERVER = 0x1705,\n\tEC_TAG_SERVERS_ADD_FROM_CLIENT = 0x1706,\n\tEC_TAG_SERVERS_USE_SCORE_SYSTEM = 0x1707,\n\tEC_TAG_SERVERS_SMART_ID_CHECK = 0x1708,\n\tEC_TAG_SERVERS_SAFE_SERVER_CONNECT = 0x1709,\n\tEC_TAG_SERVERS_AUTOCONN_STATIC_ONLY = 0x170a,\n\tEC_TAG_SERVERS_MANUAL_HIGH_PRIO = 0x170b,\n\tEC_TAG_SERVERS_UPDATE_URL = 0x170c,\n\tEC_TAG_PREFS_FILES = 0x1800,\n\tEC_TAG_FILES_ICH_ENABLED = 0x1801,\n\tEC_TAG_FILES_AICH_TRUST = 0x1802,\n\tEC_TAG_FILES_NEW_PAUSED = 0x1803,\n\tEC_TAG_FILES_NEW_AUTO_DL_PRIO = 0x1804,\n\tEC_TAG_FILES_PREVIEW_PRIO = 0x1805,\n\tEC_TAG_FILES_NEW_AUTO_UL_PRIO = 0x1806,\n\tEC_TAG_FILES_UL_FULL_CHUNKS = 0x1807,\n\tEC_TAG_FILES_START_NEXT_PAUSED = 0x1808,\n\tEC_TAG_FILES_RESUME_SAME_CAT = 0x1809,\n\tEC_TAG_FILES_SAVE_SOURCES = 0x180a,\n\tEC_TAG_FILES_EXTRACT_METADATA = 0x180b,\n\tEC_TAG_FILES_ALLOC_FULL_SIZE = 0x180c,\n\tEC_TAG_FILES_CHECK_FREE_SPACE = 0x180d,\n\tEC_TAG_FILES_MIN_FREE_SPACE = 0x180e,\n\tEC_TAG_FILES_CREATE_NORMAL = 0x180f,\n\tEC_TAG_PREFS_DIRECTORIES = 0x1a00,\n\tEC_TAG_DIRECTORIES_INCOMING = 0x1a01,\n\tEC_TAG_DIRECTORIES_TEMP = 0x1a02,\n\tEC_TAG_DIRECTORIES_SHARED = 0x1a03,\n\tEC_TAG_DIRECTORIES_SHARE_HIDDEN = 0x1a04,\n\tEC_TAG_PREFS_STATISTICS = 0x1b00,\n\tEC_TAG_STATSGRAPH_WIDTH = 0x1b01,\n\tEC_TAG_STATSGRAPH_SCALE = 0x1b02,\n\tEC_TAG_STATSGRAPH_LAST = 0x1b03,\n\tEC_TAG_STATSGRAPH_DATA = 0x1b04,\n\tEC_TAG_STATTREE_CAPPING = 0x1b05,\n\tEC_TAG_STATTREE_NODE = 0x1b06,\n\tEC_TAG_STAT_NODE_VALUE = 0x1b07,\n\tEC_TAG_STAT_VALUE_TYPE = 0x1b08,\n\tEC_TAG_STATTREE_NODEID = 0x1b09,\n\tEC_TAG_PREFS_SECURITY = 0x1c00,\n\tEC_TAG_SECURITY_CAN_SEE_SHARES = 0x1c01,\n\tEC_TAG_IPFILTER_CLIENTS = 0x1c02,\n\tEC_TAG_IPFILTER_SERVERS = 0x1c03,\n\tEC_TAG_IPFILTER_AUTO_UPDATE = 0x1c04,\n\tEC_TAG_IPFILTER_UPDATE_URL = 0x1c05,\n\tEC_TAG_IPFILTER_LEVEL = 0x1c06,\n\tEC_TAG_IPFILTER_FILTER_LAN = 0x1c07,\n\tEC_TAG_SECURITY_USE_SECIDENT = 0x1c08,\n\tEC_TAG_SECURITY_OBFUSCATION_SUPPORTED = 0x1c09,\n\tEC_TAG_SECURITY_OBFUSCATION_REQUESTED = 0x1c0a,\n\tEC_TAG_SECURITY_OBFUSCATION_REQUIRED = 0x1c0b,\n\tEC_TAG_PREFS_CORETWEAKS = 0x1d00,\n\tEC_TAG_CORETW_MAX_CONN_PER_FIVE = 0x1d01,\n\tEC_TAG_CORETW_VERBOSE = 0x1d02,\n\tEC_TAG_CORETW_FILEBUFFER = 0x1d03,\n\tEC_TAG_CORETW_UL_QUEUE = 0x1d04,\n\tEC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT = 0x1d05,\n\tEC_TAG_PREFS_KADEMLIA = 0x1e00,\n\tEC_TAG_KADEMLIA_UPDATE_URL = 0x1e01,\n\tEC_TAG_UNKNOWN = 0xffff,\n}\n\nexport enum ECDetailLevel {\n\tEC_DETAIL_CMD = 0x00,\n\tEC_DETAIL_WEB = 0x01,\n\tEC_DETAIL_FULL = 0x02,\n\tEC_DETAIL_UPDATE = 0x03,\n\tEC_DETAIL_INC_UPDATE = 0x04,\n}\n\nexport enum ECSearchType {\n\tEC_SEARCH_LOCAL = 0x00,\n\tEC_SEARCH_GLOBAL = 0x01,\n\tEC_SEARCH_KAD = 0x02,\n\tEC_SEARCH_WEB = 0x03,\n}\n\nexport enum ECSearchFileDownloadStatus {\n\tNEW = 0,\n\tDOWNLOADED = 1,\n\tQUEUED = 2,\n\tCANCELED = 3,\n\tQUEUEDCANCELED = 4,\n}\n\nexport enum ECStatTreeNodeValueType {\n\tEC_VALUE_INTEGER = 0x00,\n\tEC_VALUE_ISTRING = 0x01,\n\tEC_VALUE_BYTES = 0x02,\n\tEC_VALUE_ISHORT = 0x03,\n\tEC_VALUE_TIME = 0x04,\n\tEC_VALUE_SPEED = 0x05,\n\tEC_VALUE_STRING = 0x06,\n\tEC_VALUE_DOUBLE = 0x07,\n}\n\nexport enum EcPrefs {\n\tEC_PREFS_CATEGORIES = 0x00000001,\n\tEC_PREFS_GENERAL = 0x00000002,\n\tEC_PREFS_CONNECTIONS = 0x00000004,\n\tEC_PREFS_MESSAGEFILTER = 0x00000008,\n\tEC_PREFS_REMOTECONTROLS = 0x00000010,\n\tEC_PREFS_ONLINESIG = 0x00000020,\n\tEC_PREFS_SERVERS = 0x00000040,\n\tEC_PREFS_FILES = 0x00000080,\n\tEC_PREFS_DIRECTORIES = 0x00000200,\n\tEC_PREFS_STATISTICS = 0x00000400,\n\tEC_PREFS_SECURITY = 0x00000800,\n\tEC_PREFS_CORETWEAKS = 0x00001000,\n\tEC_PREFS_KADEMLIA = 0x00002000,\n}\n\nexport enum ECTagType {\n\tEC_TAGTYPE_UNKNOWN = 0,\n\tEC_TAGTYPE_CUSTOM = 1,\n\tEC_TAGTYPE_UINT8 = 2,\n\tEC_TAGTYPE_UINT16 = 3,\n\tEC_TAGTYPE_UINT32 = 4,\n\tEC_TAGTYPE_UINT64 = 5,\n\tEC_TAGTYPE_STRING = 6,\n\tEC_TAGTYPE_DOUBLE = 7,\n\tEC_TAGTYPE_IPV4 = 8,\n\tEC_TAGTYPE_HASH16 = 9,\n\tEC_TAGTYPE_UINT128 = 10,\n}\n\n// Type sizes\nexport const LEN_UBYTE = 1;\nexport const LEN_USHORT = 2;\nexport const LEN_UINT = 4;\nexport const LEN_ULONG = 8;\nexport const LEN_UINT128 = 16;\n"],"mappings":";AAEA,IAAY,kBAAL,yBAAA,iBAAA;CACN,gBAAA,gBAAA,iCAAA,OAAA;;AACD,EAAA,CAAA,CAAA;AAUA,IAAY,WAAL,yBAAA,UAAA;CACN,SAAA,SAAA,gBAAA,KAAA;CACA,SAAA,SAAA,oBAAA,KAAA;CACA,SAAA,SAAA,qBAAA,KAAA;CACA,SAAA,SAAA,mBAAA,KAAA;CACA,SAAA,SAAA,kBAAA,KAAA;CACA,SAAA,SAAA,mBAAA,KAAA;CACA,SAAA,SAAA,qBAAA,KAAA;CACA,SAAA,SAAA,oBAAA,KAAA;CACA,SAAA,SAAA,oBAAA,KAAA;CACA,SAAA,SAAA,oBAAA,MAAA;CACA,SAAA,SAAA,yBAAA,MAAA;CACA,SAAA,SAAA,iBAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,4BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,mCAAA,MAAA;CACA,SAAA,SAAA,wCAAA,MAAA;CACA,SAAA,SAAA,qCAAA,MAAA;CACA,SAAA,SAAA,0BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,yBAAA,MAAA;CACA,SAAA,SAAA,6BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,4BAAA,MAAA;CACA,SAAA,SAAA,uBAAA,MAAA;CACA,SAAA,SAAA,uBAAA,MAAA;CACA,SAAA,SAAA,wBAAA,MAAA;CACA,SAAA,SAAA,8BAAA,MAAA;CACA,SAAA,SAAA,uBAAA,MAAA;CACA,SAAA,SAAA,wBAAA,MAAA;CACA,SAAA,SAAA,uBAAA,MAAA;CACA,SAAA,SAAA,0BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,kCAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,uBAAA,MAAA;CACA,SAAA,SAAA,6BAAA,MAAA;CACA,SAAA,SAAA,0BAAA,MAAA;CACA,SAAA,SAAA,yBAAA,MAAA;CACA,SAAA,SAAA,sBAAA,MAAA;CACA,SAAA,SAAA,kCAAA,MAAA;CACA,SAAA,SAAA,sBAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,mBAAA,MAAA;CACA,SAAA,SAAA,wBAAA,MAAA;CACA,SAAA,SAAA,0BAAA,MAAA;CACA,SAAA,SAAA,eAAA,MAAA;CACA,SAAA,SAAA,oBAAA,MAAA;CACA,SAAA,SAAA,sBAAA,MAAA;CACA,SAAA,SAAA,qBAAA,MAAA;CACA,SAAA,SAAA,0BAAA,MAAA;CACA,SAAA,SAAA,4BAAA,MAAA;CACA,SAAA,SAAA,8BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,uBAAA,MAAA;CACA,SAAA,SAAA,yBAAA,MAAA;CACA,SAAA,SAAA,qBAAA,MAAA;CACA,SAAA,SAAA,qBAAA,MAAA;CACA,SAAA,SAAA,oBAAA,MAAA;CACA,SAAA,SAAA,mBAAA,MAAA;CACA,SAAA,SAAA,sBAAA,MAAA;CACA,SAAA,SAAA,+BAAA,MAAA;CACA,SAAA,SAAA,iCAAA,MAAA;CACA,SAAA,SAAA,qBAAA,MAAA;CACA,SAAA,SAAA,uBAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,sBAAA,MAAA;CACA,SAAA,SAAA,2BAAA,MAAA;CACA,SAAA,SAAA,uCAAA,MAAA;CACA,SAAA,SAAA,mCAAA,MAAA;CACA,SAAA,SAAA,kCAAA,MAAA;CACA,SAAA,SAAA,kBAAA,MAAA;;AACD,EAAA,CAAA,CAAA;AAEA,IAAY,YAAL,yBAAA,WAAA;CACN,UAAA,UAAA,mBAAA,KAAA;CACA,UAAA,UAAA,wBAAA,KAAA;CACA,UAAA,UAAA,6BAAA,KAAA;CACA,UAAA,UAAA,uBAAA,KAAA;CACA,UAAA,UAAA,yBAAA,KAAA;CACA,UAAA,UAAA,sBAAA,KAAA;CACA,UAAA,UAAA,oBAAA,KAAA;CACA,UAAA,UAAA,0BAAA,KAAA;CACA,UAAA,UAAA,yBAAA,KAAA;CACA,UAAA,UAAA,2BAAA,KAAA;CACA,UAAA,UAAA,sBAAA,MAAA;CACA,UAAA,UAAA,wBAAA,MAAA;CACA,UAAA,UAAA,qBAAA,MAAA;CACA,UAAA,UAAA,6BAAA,MAAA;CACA,UAAA,UAAA,uBAAA,MAAA;CACA,UAAA,UAAA,iBAAA,MAAA;CACA,UAAA,UAAA,mBAAA,MAAA;CACA,UAAA,UAAA,wBAAA,OAAA;CACA,UAAA,UAAA,2BAAA,OAAA;CACA,UAAA,UAAA,uBAAA,OAAA;CACA,UAAA,UAAA,2BAAA,OAAA;CACA,UAAA,UAAA,2BAAA,OAAA;CACA,UAAA,UAAA,iCAAA,OAAA;CACA,UAAA,UAAA,iCAAA,OAAA;CACA,UAAA,UAAA,8BAAA,OAAA;CACA,UAAA,UAAA,gCAAA,OAAA;CACA,UAAA,UAAA,kCAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,6BAAA,OAAA;CACA,UAAA,UAAA,4BAAA,OAAA;CACA,UAAA,UAAA,6BAAA,OAAA;CACA,UAAA,UAAA,4BAAA,OAAA;CACA,UAAA,UAAA,iCAAA,OAAA;CACA,UAAA,UAAA,qCAAA,OAAA;CACA,UAAA,UAAA,sCAAA,OAAA;CACA,UAAA,UAAA,uCAAA,OAAA;CACA,UAAA,UAAA,oCAAA,OAAA;CACA,UAAA,UAAA,mCAAA,OAAA;CACA,UAAA,UAAA,gCAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,2BAAA,OAAA;CACA,UAAA,UAAA,6BAAA,OAAA;CACA,UAAA,UAAA,kCAAA,OAAA;CACA,UAAA,UAAA,mCAAA,OAAA;CACA,UAAA,UAAA,uCAAA,OAAA;CACA,UAAA,UAAA,oCAAA,OAAA;CACA,UAAA,UAAA,4BAAA,OAAA;CACA,UAAA,UAAA,qBAAA,OAAA;CACA,UAAA,UAAA,0BAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,kCAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,2BAAA,OAAA;CACA,UAAA,UAAA,4BAAA,OAAA;CACA,UAAA,UAAA,0BAAA,OAAA;CACA,UAAA,UAAA,kCAAA,OAAA;CACA,UAAA,UAAA,uCAAA,OAAA;CACA,UAAA,UAAA,8CAAA,OAAA;CACA,UAAA,UAAA,uCAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,yBAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,oCAAA,OAAA;CACA,UAAA,UAAA,iCAAA,OAAA;CACA,UAAA,UAAA,gCAAA,OAAA;CACA,UAAA,UAAA,gCAAA,OAAA;CACA,UAAA,UAAA,kCAAA,OAAA;CACA,UAAA,UAAA,8BAAA,OAAA;CACA,UAAA,UAAA,6BAAA,OAAA;CACA,UAAA,UAAA,qCAAA,OAAA;CACA,UAAA,UAAA,qCAAA,OAAA;CACA,UAAA,UAAA,wCAAA,OAAA;CACA,UAAA,UAAA,+BAAA,OAAA;CACA,UAAA,UAAA,yCAAA,OAAA;CACA,UAAA,UAAA,qCAAA,OAAA;CACA,UAAA,UAAA,0BAAA,OAAA;CACA,UAAA,UAAA,4BAAA,OAAA;CACA,UAAA,UAAA,uCAAA,OAAA;CACA,UAAA,UAAA,8BAAA,OAAA;CACA,UAAA,UAAA,kCAAA,OAAA;CACA,UAAA,UAAA,sBAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,oCAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,uCAAA,QAAA;CACA,UAAA,UAAA,sCAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,2CAAA,QAAA;CACA,UAAA,UAAA,4CAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,uCAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,mBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,yBAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,yBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,sBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,mBAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,yBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,oCAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,sCAAA,QAAA;CACA,UAAA,UAAA,oCAAA,QAAA;CACA,UAAA,UAAA,qCAAA,QAAA;CACA,UAAA,UAAA,uCAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,yCAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,uCAAA,QAAA;CACA,UAAA,UAAA,yCAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,sCAAA,QAAA;CACA,UAAA,UAAA,uBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,mBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,sBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,uBAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,yBAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,qBAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,sBAAA,QAAA;CACA,UAAA,UAAA,sBAAA,QAAA;CACA,UAAA,UAAA,sBAAA,QAAA;CACA,UAAA,UAAA,sCAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,iCAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,yBAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,iCAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,wCAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,oCAAA,QAAA;CACA,UAAA,UAAA,oCAAA,QAAA;CACA,UAAA,UAAA,qCAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,wCAAA,QAAA;CACA,UAAA,UAAA,yCAAA,QAAA;CACA,UAAA,UAAA,qCAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,wBAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,iCAAA,QAAA;CACA,UAAA,UAAA,oCAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,mCAAA,QAAA;CACA,UAAA,UAAA,iCAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,iCAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,+BAAA,QAAA;CACA,UAAA,UAAA,qCAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,0BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,oCAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,iCAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,kCAAA,QAAA;CACA,UAAA,UAAA,2CAAA,QAAA;CACA,UAAA,UAAA,2CAAA,QAAA;CACA,UAAA,UAAA,0CAAA,QAAA;CACA,UAAA,UAAA,6BAAA,QAAA;CACA,UAAA,UAAA,qCAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,8BAAA,QAAA;CACA,UAAA,UAAA,4BAAA,QAAA;CACA,UAAA,UAAA,yCAAA,QAAA;CACA,UAAA,UAAA,2BAAA,QAAA;CACA,UAAA,UAAA,gCAAA,QAAA;CACA,UAAA,UAAA,oBAAA,SAAA;;AACD,EAAA,CAAA,CAAA;AAEA,IAAY,gBAAL,yBAAA,eAAA;CACN,cAAA,cAAA,mBAAA,KAAA;CACA,cAAA,cAAA,mBAAA,KAAA;CACA,cAAA,cAAA,oBAAA,KAAA;CACA,cAAA,cAAA,sBAAA,KAAA;CACA,cAAA,cAAA,0BAAA,KAAA;;AACD,EAAA,CAAA,CAAA;AAEA,IAAY,eAAL,yBAAA,cAAA;CACN,aAAA,aAAA,qBAAA,KAAA;CACA,aAAA,aAAA,sBAAA,KAAA;CACA,aAAA,aAAA,mBAAA,KAAA;CACA,aAAA,aAAA,mBAAA,KAAA;;AACD,EAAA,CAAA,CAAA;AAqBA,IAAY,UAAL,yBAAA,SAAA;CACN,QAAA,QAAA,yBAAA,KAAA;CACA,QAAA,QAAA,sBAAA,KAAA;CACA,QAAA,QAAA,0BAAA,KAAA;CACA,QAAA,QAAA,4BAAA,KAAA;CACA,QAAA,QAAA,6BAAA,MAAA;CACA,QAAA,QAAA,wBAAA,MAAA;CACA,QAAA,QAAA,sBAAA,MAAA;CACA,QAAA,QAAA,oBAAA,OAAA;CACA,QAAA,QAAA,0BAAA,OAAA;CACA,QAAA,QAAA,yBAAA,QAAA;CACA,QAAA,QAAA,uBAAA,QAAA;CACA,QAAA,QAAA,yBAAA,QAAA;CACA,QAAA,QAAA,uBAAA,QAAA;;AACD,EAAA,CAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateCategoryRequest-Br6yfDhZ.mjs","names":[],"sources":["../src/request/CreateCategoryRequest.ts"],"sourcesContent":["/**\n * Create Category Request - Create a new category\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { StringTag, UByteTag, UIntTag } from '../ec/tag/Tag';\nimport type { AmuleCategory } from '../model';\n\nexport class CreateCategoryRequest extends Request {\n\tconstructor(category: AmuleCategory) {\n\t\tsuper(ECOpCode.EC_OP_CREATE_CATEGORY);\n\n\t\tconst subtags = [\n\t\t\tnew StringTag(ECTagName.EC_TAG_CATEGORY_TITLE, category.name),\n\t\t\tnew StringTag(ECTagName.EC_TAG_CATEGORY_PATH, category.path),\n\t\t\tnew StringTag(ECTagName.EC_TAG_CATEGORY_COMMENT, category.comment),\n\t\t\tnew UIntTag(ECTagName.EC_TAG_CATEGORY_COLOR, category.color),\n\t\t\tnew UByteTag(ECTagName.EC_TAG_CATEGORY_PRIO, category.priority),\n\t\t];\n\n\t\t// Category tag is a container for all category properties\n\t\tthis.addTag(new UIntTag(ECTagName.EC_TAG_CATEGORY, 0, subtags));\n\t}\n}\n"],"mappings":";;;;;;;AASA,IAAa,wBAAb,cAA2C,QAAQ;CAClD,YAAY,UAAyB;EACpC,MAAA,EAAoC;EAEpC,MAAM,UAAU;GACf,IAAI,UAAA,MAA2C,SAAS,IAAI;GAC5D,IAAI,UAAA,MAA0C,SAAS,IAAI;GAC3D,IAAI,UAAA,MAA6C,SAAS,OAAO;GACjE,IAAI,QAAA,MAAyC,SAAS,KAAK;GAC3D,IAAI,SAAA,MAAyC,SAAS,QAAQ;EAC/D;EAGA,KAAK,OAAO,IAAI,QAAA,MAAmC,GAAG,OAAO,CAAC;CAC/D;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeleteCategoryRequest-C2-p6sx0.mjs","names":[],"sources":["../src/request/DeleteCategoryRequest.ts"],"sourcesContent":["/**\n * Delete Category Request - Delete an existing category\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { UIntTag } from '../ec/tag/Tag';\n\nexport class DeleteCategoryRequest extends Request {\n\tconstructor(id: number) {\n\t\tsuper(ECOpCode.EC_OP_DELETE_CATEGORY);\n\n\t\tthis.addTag(new UIntTag(ECTagName.EC_TAG_CATEGORY, id));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,wBAAb,cAA2C,QAAQ;CAClD,YAAY,IAAY;EACvB,MAAA,EAAoC;EAEpC,KAAK,OAAO,IAAI,QAAA,MAAmC,EAAE,CAAC;CACvD;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DownloadCommandRequest-CaULjfNi.mjs","names":[],"sources":["../src/request/DownloadCommandRequest.ts"],"sourcesContent":["/**\n * Download Command Request - Send commands to files in download queue\n * Commands: PAUSE, RESUME, STOP, DELETE, SWAP_A4AF_THIS, etc.\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { Hash16Tag } from '../ec/tag/Tag';\nimport { DownloadCommand } from '../model';\n\nexport class DownloadCommandRequest extends Request {\n\tconstructor(hash: Buffer, command: DownloadCommand) {\n\t\t// The command IS the opcode\n\t\tsuper(DownloadCommandRequest.commandToOpCode(command));\n\n\t\tthis.addTag(new Hash16Tag(ECTagName.EC_TAG_PARTFILE, hash));\n\t}\n\n\tprivate static commandToOpCode(command: DownloadCommand): ECOpCode {\n\t\tswitch (command) {\n\t\t\tcase DownloadCommand.SWAP_A4AF_THIS:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_SWAP_A4AF_THIS;\n\t\t\tcase DownloadCommand.SWAP_A4AF_THIS_AUTO:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO;\n\t\t\tcase DownloadCommand.SWAP_A4AF_OTHERS:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_SWAP_A4AF_OTHERS;\n\t\t\tcase DownloadCommand.PAUSE:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_PAUSE;\n\t\t\tcase DownloadCommand.RESUME:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_RESUME;\n\t\t\tcase DownloadCommand.STOP:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_STOP;\n\t\t\tcase DownloadCommand.DELETE:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_DELETE;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown download command: ${command}`);\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;AAUA,IAAa,yBAAb,MAAa,+BAA+B,QAAQ;CACnD,YAAY,MAAc,SAA0B;EAEnD,MAAM,uBAAuB,gBAAgB,OAAO,CAAC;EAErD,KAAK,OAAO,IAAI,UAAA,KAAqC,IAAI,CAAC;CAC3D;CAEA,OAAe,gBAAgB,SAAoC;EAClE,QAAQ,SAAR;GACC,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,SACC,MAAM,IAAI,MAAM,6BAA6B,SAAS;EACxD;CACD;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DownloadFileRequest-CcNqsBo7.mjs","names":[],"sources":["../src/request/DownloadFileRequest.ts"],"sourcesContent":["/**\n * Download File Request - Download a file from search results\n *\n * This request downloads a file that was found in search results.\n * It uses the file hash to identify the file to download.\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { Hash16Tag } from '../ec/tag/Tag';\n\nexport class DownloadFileRequest extends Request {\n\tconstructor(hash: Buffer) {\n\t\tsuper(ECOpCode.EC_OP_DOWNLOAD_SEARCH_RESULT);\n\n\t\t// Only send the hash - same as jamule DownloadSearchResultRequest\n\t\tthis.addTag(new Hash16Tag(ECTagName.EC_TAG_PARTFILE, hash));\n\t}\n}\n"],"mappings":";;;;;;;;;;AAWA,IAAa,sBAAb,cAAyC,QAAQ;CAChD,YAAY,MAAc;EACzB,MAAA,EAA2C;EAG3C,KAAK,OAAO,IAAI,UAAA,KAAqC,IAAI,CAAC;CAC3D;AACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DownloadQueueRequest-bd7lFiMj.mjs","names":[],"sources":["../src/request/DownloadQueueRequest.ts"],"sourcesContent":["/**\n * Download Queue Request - Get download queue\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName, ECDetailLevel } from '../ec/Codes';\nimport { UByteTag } from '../ec/tag/Tag';\n\nexport class DownloadQueueRequest extends Request {\n\tconstructor(detailLevel: ECDetailLevel = ECDetailLevel.EC_DETAIL_FULL) {\n\t\tsuper(ECOpCode.EC_OP_GET_DLOAD_QUEUE);\n\n\t\tthis.addTag(new UByteTag(ECTagName.EC_TAG_DETAIL_LEVEL, detailLevel));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,uBAAb,cAA0C,QAAQ;CACjD,YAAY,cAAA,GAA2D;EACtE,MAAA,EAAoC;EAEpC,KAAK,OAAO,IAAI,SAAA,GAAwC,WAAW,CAAC;CACrE;AACD"}