amule-ec-client 0.5.1 → 0.6.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 (86) hide show
  1. package/README.md +6 -4
  2. package/dist/AddLinkRequest-DwUbSMXD.mjs +17 -0
  3. package/dist/AddLinkRequest-DwUbSMXD.mjs.map +1 -0
  4. package/dist/ClientQueueRequest-D9FaX5K9.mjs +17 -0
  5. package/dist/ClientQueueRequest-D9FaX5K9.mjs.map +1 -0
  6. package/dist/ClientQueueResponse-FVQBR_8b.mjs +65 -0
  7. package/dist/ClientQueueResponse-FVQBR_8b.mjs.map +1 -0
  8. package/dist/Codes-CjiW7Pdl.mjs +411 -0
  9. package/dist/Codes-CjiW7Pdl.mjs.map +1 -0
  10. package/dist/CreateCategoryRequest-Br6yfDhZ.mjs +24 -0
  11. package/dist/CreateCategoryRequest-Br6yfDhZ.mjs.map +1 -0
  12. package/dist/DeleteCategoryRequest-C2-p6sx0.mjs +17 -0
  13. package/dist/DeleteCategoryRequest-C2-p6sx0.mjs.map +1 -0
  14. package/dist/DownloadCommandRequest-CaULjfNi.mjs +31 -0
  15. package/dist/DownloadCommandRequest-CaULjfNi.mjs.map +1 -0
  16. package/dist/DownloadFileRequest-CcNqsBo7.mjs +20 -0
  17. package/dist/DownloadFileRequest-CcNqsBo7.mjs.map +1 -0
  18. package/dist/DownloadQueueRequest-bd7lFiMj.mjs +17 -0
  19. package/dist/DownloadQueueRequest-bd7lFiMj.mjs.map +1 -0
  20. package/dist/DownloadQueueResponse-DyP1rLTV.mjs +261 -0
  21. package/dist/DownloadQueueResponse-DyP1rLTV.mjs.map +1 -0
  22. package/dist/GetPreferencesRequest-C94Su9IH.mjs +18 -0
  23. package/dist/GetPreferencesRequest-C94Su9IH.mjs.map +1 -0
  24. package/dist/PreferencesDetailsResponse-BjMxbvVY.mjs +96 -0
  25. package/dist/PreferencesDetailsResponse-BjMxbvVY.mjs.map +1 -0
  26. package/dist/PreferencesResponse-Dth-n2sA.mjs +39 -0
  27. package/dist/PreferencesResponse-Dth-n2sA.mjs.map +1 -0
  28. package/dist/ReloadSharedFilesRequest-CPwAEJYG.mjs +15 -0
  29. package/dist/ReloadSharedFilesRequest-CPwAEJYG.mjs.map +1 -0
  30. package/dist/Request-C0UUuQIX.mjs +160 -0
  31. package/dist/Request-C0UUuQIX.mjs.map +1 -0
  32. package/dist/SearchProgressResponse-Bputc9Ww.mjs +17 -0
  33. package/dist/SearchProgressResponse-Bputc9Ww.mjs.map +1 -0
  34. package/dist/SearchRequest-CNqz-K1Z.mjs +57 -0
  35. package/dist/SearchRequest-CNqz-K1Z.mjs.map +1 -0
  36. package/dist/SearchResultsRequest-DKG508KF.mjs +15 -0
  37. package/dist/SearchResultsRequest-DKG508KF.mjs.map +1 -0
  38. package/dist/SearchResultsResponse-ChNrKJ6_.mjs +31 -0
  39. package/dist/SearchResultsResponse-ChNrKJ6_.mjs.map +1 -0
  40. package/dist/SearchStatusRequest-Bv6iaC9Y.mjs +15 -0
  41. package/dist/SearchStatusRequest-Bv6iaC9Y.mjs.map +1 -0
  42. package/dist/SearchStopRequest-rET-2Nsz.mjs +15 -0
  43. package/dist/SearchStopRequest-rET-2Nsz.mjs.map +1 -0
  44. package/dist/ServerConnectRequest-CcO2-Eqd.mjs +20 -0
  45. package/dist/ServerConnectRequest-CcO2-Eqd.mjs.map +1 -0
  46. package/dist/ServerDisconnectRequest-DEORM3SF.mjs +15 -0
  47. package/dist/ServerDisconnectRequest-DEORM3SF.mjs.map +1 -0
  48. package/dist/ServerListRequest-FwFQBp12.mjs +15 -0
  49. package/dist/ServerListRequest-FwFQBp12.mjs.map +1 -0
  50. package/dist/ServerListResponse-ZAKSSCPZ.mjs +52 -0
  51. package/dist/ServerListResponse-ZAKSSCPZ.mjs.map +1 -0
  52. package/dist/ServerUpdateFromUrlRequest-D4xBqJDJ.mjs +14 -0
  53. package/dist/ServerUpdateFromUrlRequest-D4xBqJDJ.mjs.map +1 -0
  54. package/dist/SetFileCategoryRequest-BwEPJVeR.mjs +17 -0
  55. package/dist/SetFileCategoryRequest-BwEPJVeR.mjs.map +1 -0
  56. package/dist/SetPreferencesRequest-D2fVIH3P.mjs +66 -0
  57. package/dist/SetPreferencesRequest-D2fVIH3P.mjs.map +1 -0
  58. package/dist/SharedFilePriorityRequest-j6ImgagV.mjs +15 -0
  59. package/dist/SharedFilePriorityRequest-j6ImgagV.mjs.map +1 -0
  60. package/dist/SharedFilesRequest-D2M3K0eB.mjs +17 -0
  61. package/dist/SharedFilesRequest-D2M3K0eB.mjs.map +1 -0
  62. package/dist/SharedFilesResponse-BiXT_oCx.mjs +41 -0
  63. package/dist/SharedFilesResponse-BiXT_oCx.mjs.map +1 -0
  64. package/dist/StatsRequest-B8v9LLHG.mjs +17 -0
  65. package/dist/StatsRequest-B8v9LLHG.mjs.map +1 -0
  66. package/dist/StatsResponse-BVUxNPbz.mjs +78 -0
  67. package/dist/StatsResponse-BVUxNPbz.mjs.map +1 -0
  68. package/dist/Tag-CZF6BRMY.mjs +262 -0
  69. package/dist/Tag-CZF6BRMY.mjs.map +1 -0
  70. package/dist/UpdateCategoryRequest-CgzH7SxP.mjs +24 -0
  71. package/dist/UpdateCategoryRequest-CgzH7SxP.mjs.map +1 -0
  72. package/dist/UpdateRequest-Bunl73Ga.mjs +17 -0
  73. package/dist/UpdateRequest-Bunl73Ga.mjs.map +1 -0
  74. package/dist/UpdateResponse-1LhyH9Zf.mjs +47 -0
  75. package/dist/UpdateResponse-1LhyH9Zf.mjs.map +1 -0
  76. package/dist/download-details-OM0FJUhZ.mjs +12 -0
  77. package/dist/download-details-OM0FJUhZ.mjs.map +1 -0
  78. package/dist/index.d.mts +1130 -0
  79. package/dist/index.mjs +1077 -0
  80. package/dist/index.mjs.map +1 -0
  81. package/dist/utils-DBnUQnZ-.mjs +26 -0
  82. package/dist/utils-DBnUQnZ-.mjs.map +1 -0
  83. package/package.json +5 -5
  84. package/dist/index.d.ts +0 -1016
  85. package/dist/index.js +0 -3130
  86. package/dist/index.js.map +0 -1
@@ -0,0 +1,66 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { a as StringTag, d as UShortTag, l as UIntTag, s as UByteTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/SetPreferencesRequest.ts
5
+ var SetPreferencesRequest = class SetPreferencesRequest extends Request {
6
+ constructor(prefs) {
7
+ super(64);
8
+ this.tags.push(...SetPreferencesRequest.buildTopLevelTags(prefs));
9
+ }
10
+ static buildTopLevelTags(prefs) {
11
+ const topTags = [];
12
+ if (prefs.general) {
13
+ const g = prefs.general;
14
+ topTags.push(new UByteTag(4608, 0, [new StringTag(4609, g.userNick), new UByteTag(4612, g.checkNewVersion ? 1 : 0)]));
15
+ }
16
+ if (prefs.connection) {
17
+ const c = prefs.connection;
18
+ topTags.push(new UByteTag(4864, 0, [
19
+ new UIntTag(4866, c.uploadCapacity),
20
+ new UIntTag(4865, c.downloadCapacity),
21
+ new UIntTag(4868, c.maxUploadSpeed),
22
+ new UIntTag(4867, c.maxDownloadSpeed),
23
+ new UIntTag(4869, c.slotAllocation),
24
+ new UShortTag(4870, c.tcpPort),
25
+ new UShortTag(4871, c.udpPort),
26
+ new UIntTag(4873, c.maxFileSources),
27
+ new UIntTag(4874, c.maxConnections),
28
+ new UByteTag(4875, c.autoconnect ? 1 : 0),
29
+ new UByteTag(4876, c.reconnect ? 1 : 0),
30
+ new UByteTag(4877, c.networkED2K ? 1 : 0),
31
+ new UByteTag(4878, c.networkKademlia ? 1 : 0)
32
+ ]));
33
+ }
34
+ if (prefs.servers) {
35
+ const s = prefs.servers;
36
+ topTags.push(new UByteTag(5888, 0, [
37
+ new UByteTag(5889, s.removeDead ? 1 : 0),
38
+ new UShortTag(5890, s.deadRetries),
39
+ new UByteTag(5895, s.useScoreSystem ? 1 : 0),
40
+ new UByteTag(5896, s.smartIdCheck ? 1 : 0),
41
+ new StringTag(5900, s.updateUrl)
42
+ ]));
43
+ }
44
+ if (prefs.security) {
45
+ const sec = prefs.security;
46
+ topTags.push(new UByteTag(7168, 0, [
47
+ new UByteTag(7169, sec.canSeeShares),
48
+ new UByteTag(7170, sec.ipFilterClients ? 1 : 0),
49
+ new UByteTag(7171, sec.ipFilterServers ? 1 : 0),
50
+ new UByteTag(7172, sec.ipFilterAutoUpdate ? 1 : 0),
51
+ new StringTag(7173, sec.ipFilterUpdateUrl),
52
+ new UByteTag(7174, sec.ipFilterLevel),
53
+ new UByteTag(7175, sec.filterLan ? 1 : 0),
54
+ new UByteTag(7176, sec.useSecIdent ? 1 : 0),
55
+ new UByteTag(7177, sec.obfuscationSupported ? 1 : 0),
56
+ new UByteTag(7178, sec.obfuscationRequested ? 1 : 0),
57
+ new UByteTag(7179, sec.obfuscationRequired ? 1 : 0)
58
+ ]));
59
+ }
60
+ return topTags;
61
+ }
62
+ };
63
+ //#endregion
64
+ export { SetPreferencesRequest };
65
+
66
+ //# sourceMappingURL=SetPreferencesRequest-D2fVIH3P.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetPreferencesRequest-D2fVIH3P.mjs","names":[],"sources":["../src/request/SetPreferencesRequest.ts"],"sourcesContent":["import { ECOpCode, ECTagName } from '../ec/Codes';\nimport { StringTag, UByteTag, UShortTag, UIntTag, type Tag } from '../ec/tag/Tag';\nimport type { AmulePreferences } from '../types/preferences';\nimport { Request } from './Request';\n\nexport class SetPreferencesRequest extends Request {\n\tconstructor(prefs: Partial<AmulePreferences>) {\n\t\tsuper(ECOpCode.EC_OP_SET_PREFERENCES);\n\t\tthis.tags.push(...SetPreferencesRequest.buildTopLevelTags(prefs));\n\t}\n\n\tprivate static buildTopLevelTags(prefs: Partial<AmulePreferences>): Tag<any>[] {\n\t\tconst topTags: Tag<any>[] = [];\n\n\t\tif (prefs.general) {\n\t\t\tconst g = prefs.general;\n\t\t\ttopTags.push(\n\t\t\t\tnew UByteTag(ECTagName.EC_TAG_PREFS_GENERAL, 0, [\n\t\t\t\t\tnew StringTag(ECTagName.EC_TAG_USER_NICK, g.userNick),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_GENERAL_CHECK_NEW_VERSION, g.checkNewVersion ? 1 : 0),\n\t\t\t\t])\n\t\t\t);\n\t\t}\n\n\t\tif (prefs.connection) {\n\t\t\tconst c = prefs.connection;\n\t\t\ttopTags.push(\n\t\t\t\tnew UByteTag(ECTagName.EC_TAG_PREFS_CONNECTIONS, 0, [\n\t\t\t\t\tnew UIntTag(ECTagName.EC_TAG_CONN_UL_CAP, c.uploadCapacity),\n\t\t\t\t\tnew UIntTag(ECTagName.EC_TAG_CONN_DL_CAP, c.downloadCapacity),\n\t\t\t\t\tnew UIntTag(ECTagName.EC_TAG_CONN_MAX_UL, c.maxUploadSpeed),\n\t\t\t\t\tnew UIntTag(ECTagName.EC_TAG_CONN_MAX_DL, c.maxDownloadSpeed),\n\t\t\t\t\tnew UIntTag(ECTagName.EC_TAG_CONN_SLOT_ALLOCATION, c.slotAllocation),\n\t\t\t\t\tnew UShortTag(ECTagName.EC_TAG_CONN_TCP_PORT, c.tcpPort),\n\t\t\t\t\tnew UShortTag(ECTagName.EC_TAG_CONN_UDP_PORT, c.udpPort),\n\t\t\t\t\tnew UIntTag(ECTagName.EC_TAG_CONN_MAX_FILE_SOURCES, c.maxFileSources),\n\t\t\t\t\tnew UIntTag(ECTagName.EC_TAG_CONN_MAX_CONN, c.maxConnections),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_CONN_AUTOCONNECT, c.autoconnect ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_CONN_RECONNECT, c.reconnect ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_NETWORK_ED2K, c.networkED2K ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_NETWORK_KADEMLIA, c.networkKademlia ? 1 : 0),\n\t\t\t\t])\n\t\t\t);\n\t\t}\n\n\t\tif (prefs.servers) {\n\t\t\tconst s = prefs.servers;\n\t\t\ttopTags.push(\n\t\t\t\tnew UByteTag(ECTagName.EC_TAG_PREFS_SERVERS, 0, [\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SERVERS_REMOVE_DEAD, s.removeDead ? 1 : 0),\n\t\t\t\t\tnew UShortTag(ECTagName.EC_TAG_SERVERS_DEAD_SERVER_RETRIES, s.deadRetries),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SERVERS_USE_SCORE_SYSTEM, s.useScoreSystem ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SERVERS_SMART_ID_CHECK, s.smartIdCheck ? 1 : 0),\n\t\t\t\t\tnew StringTag(ECTagName.EC_TAG_SERVERS_UPDATE_URL, s.updateUrl),\n\t\t\t\t])\n\t\t\t);\n\t\t}\n\n\t\tif (prefs.security) {\n\t\t\tconst sec = prefs.security;\n\t\t\ttopTags.push(\n\t\t\t\tnew UByteTag(ECTagName.EC_TAG_PREFS_SECURITY, 0, [\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SECURITY_CAN_SEE_SHARES, sec.canSeeShares),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_IPFILTER_CLIENTS, sec.ipFilterClients ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_IPFILTER_SERVERS, sec.ipFilterServers ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_IPFILTER_AUTO_UPDATE, sec.ipFilterAutoUpdate ? 1 : 0),\n\t\t\t\t\tnew StringTag(ECTagName.EC_TAG_IPFILTER_UPDATE_URL, sec.ipFilterUpdateUrl),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_IPFILTER_LEVEL, sec.ipFilterLevel),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_IPFILTER_FILTER_LAN, sec.filterLan ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SECURITY_USE_SECIDENT, sec.useSecIdent ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SECURITY_OBFUSCATION_SUPPORTED, sec.obfuscationSupported ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SECURITY_OBFUSCATION_REQUESTED, sec.obfuscationRequested ? 1 : 0),\n\t\t\t\t\tnew UByteTag(ECTagName.EC_TAG_SECURITY_OBFUSCATION_REQUIRED, sec.obfuscationRequired ? 1 : 0),\n\t\t\t\t])\n\t\t\t);\n\t\t}\n\n\t\treturn topTags;\n\t}\n}\n"],"mappings":";;;;AAKA,IAAa,wBAAb,MAAa,8BAA8B,QAAQ;CAClD,YAAY,OAAkC;EAC7C,MAAA,EAAoC;EACpC,KAAK,KAAK,KAAK,GAAG,sBAAsB,kBAAkB,KAAK,CAAC;CACjE;CAEA,OAAe,kBAAkB,OAA8C;EAC9E,MAAM,UAAsB,CAAC;EAE7B,IAAI,MAAM,SAAS;GAClB,MAAM,IAAI,MAAM;GAChB,QAAQ,KACP,IAAI,SAAA,MAAyC,GAAG,CAC/C,IAAI,UAAA,MAAsC,EAAE,QAAQ,GACpD,IAAI,SAAA,MAAqD,EAAE,kBAAkB,IAAI,CAAC,CACnF,CAAC,CACF;EACD;EAEA,IAAI,MAAM,YAAY;GACrB,MAAM,IAAI,MAAM;GAChB,QAAQ,KACP,IAAI,SAAA,MAA6C,GAAG;IACnD,IAAI,QAAA,MAAsC,EAAE,cAAc;IAC1D,IAAI,QAAA,MAAsC,EAAE,gBAAgB;IAC5D,IAAI,QAAA,MAAsC,EAAE,cAAc;IAC1D,IAAI,QAAA,MAAsC,EAAE,gBAAgB;IAC5D,IAAI,QAAA,MAA+C,EAAE,cAAc;IACnE,IAAI,UAAA,MAA0C,EAAE,OAAO;IACvD,IAAI,UAAA,MAA0C,EAAE,OAAO;IACvD,IAAI,QAAA,MAAgD,EAAE,cAAc;IACpE,IAAI,QAAA,MAAwC,EAAE,cAAc;IAC5D,IAAI,SAAA,MAA4C,EAAE,cAAc,IAAI,CAAC;IACrE,IAAI,SAAA,MAA0C,EAAE,YAAY,IAAI,CAAC;IACjE,IAAI,SAAA,MAAwC,EAAE,cAAc,IAAI,CAAC;IACjE,IAAI,SAAA,MAA4C,EAAE,kBAAkB,IAAI,CAAC;GAC1E,CAAC,CACF;EACD;EAEA,IAAI,MAAM,SAAS;GAClB,MAAM,IAAI,MAAM;GAChB,QAAQ,KACP,IAAI,SAAA,MAAyC,GAAG;IAC/C,IAAI,SAAA,MAA+C,EAAE,aAAa,IAAI,CAAC;IACvE,IAAI,UAAA,MAAwD,EAAE,WAAW;IACzE,IAAI,SAAA,MAAoD,EAAE,iBAAiB,IAAI,CAAC;IAChF,IAAI,SAAA,MAAkD,EAAE,eAAe,IAAI,CAAC;IAC5E,IAAI,UAAA,MAA+C,EAAE,SAAS;GAC/D,CAAC,CACF;EACD;EAEA,IAAI,MAAM,UAAU;GACnB,MAAM,MAAM,MAAM;GAClB,QAAQ,KACP,IAAI,SAAA,MAA0C,GAAG;IAChD,IAAI,SAAA,MAAmD,IAAI,YAAY;IACvE,IAAI,SAAA,MAA4C,IAAI,kBAAkB,IAAI,CAAC;IAC3E,IAAI,SAAA,MAA4C,IAAI,kBAAkB,IAAI,CAAC;IAC3E,IAAI,SAAA,MAAgD,IAAI,qBAAqB,IAAI,CAAC;IAClF,IAAI,UAAA,MAAgD,IAAI,iBAAiB;IACzE,IAAI,SAAA,MAA0C,IAAI,aAAa;IAC/D,IAAI,SAAA,MAA+C,IAAI,YAAY,IAAI,CAAC;IACxE,IAAI,SAAA,MAAiD,IAAI,cAAc,IAAI,CAAC;IAC5E,IAAI,SAAA,MAA0D,IAAI,uBAAuB,IAAI,CAAC;IAC9F,IAAI,SAAA,MAA0D,IAAI,uBAAuB,IAAI,CAAC;IAC9F,IAAI,SAAA,MAAyD,IAAI,sBAAsB,IAAI,CAAC;GAC7F,CAAC,CACF;EACD;EAEA,OAAO;CACR;AACD"}
@@ -0,0 +1,15 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { l as UIntTag, r as Hash16Tag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/SharedFilePriorityRequest.ts
5
+ var SharedFilePriorityRequest = class extends Request {
6
+ constructor(hash, priority) {
7
+ super(17);
8
+ this.addTag(new Hash16Tag(798, hash));
9
+ this.addTag(new UIntTag(1035, priority));
10
+ }
11
+ };
12
+ //#endregion
13
+ export { SharedFilePriorityRequest };
14
+
15
+ //# sourceMappingURL=SharedFilePriorityRequest-j6ImgagV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedFilePriorityRequest-j6ImgagV.mjs","names":[],"sources":["../src/request/SharedFilePriorityRequest.ts"],"sourcesContent":["import { ECOpCode, ECTagName } from '../ec/Codes';\nimport { Hash16Tag, UIntTag } from '../ec/tag/Tag';\nimport { Request } from './Request';\n\nexport class SharedFilePriorityRequest extends Request {\n\tconstructor(hash: Buffer, priority: number) {\n\t\tsuper(ECOpCode.EC_OP_SHARED_SET_PRIO);\n\t\tthis.addTag(new Hash16Tag(ECTagName.EC_TAG_PARTFILE_HASH, hash));\n\t\tthis.addTag(new UIntTag(ECTagName.EC_TAG_KNOWNFILE_PRIO, priority));\n\t}\n}\n"],"mappings":";;;;AAIA,IAAa,4BAAb,cAA+C,QAAQ;CACtD,YAAY,MAAc,UAAkB;EAC3C,MAAA,EAAoC;EACpC,KAAK,OAAO,IAAI,UAAA,KAA0C,IAAI,CAAC;EAC/D,KAAK,OAAO,IAAI,QAAA,MAAyC,QAAQ,CAAC;CACnE;AACD"}
@@ -0,0 +1,17 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { s as UByteTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/SharedFilesRequest.ts
5
+ /**
6
+ * Shared Files Request - Get shared files list
7
+ */
8
+ var SharedFilesRequest = class extends Request {
9
+ constructor(detailLevel = 2) {
10
+ super(16);
11
+ this.addTag(new UByteTag(4, detailLevel));
12
+ }
13
+ };
14
+ //#endregion
15
+ export { SharedFilesRequest };
16
+
17
+ //# sourceMappingURL=SharedFilesRequest-D2M3K0eB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedFilesRequest-D2M3K0eB.mjs","names":[],"sources":["../src/request/SharedFilesRequest.ts"],"sourcesContent":["/**\n * Shared Files Request - Get shared files list\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName, ECDetailLevel } from '../ec/Codes';\nimport { UByteTag } from '../ec/tag/Tag';\n\nexport class SharedFilesRequest extends Request {\n\tconstructor(detailLevel: ECDetailLevel = ECDetailLevel.EC_DETAIL_FULL) {\n\t\tsuper(ECOpCode.EC_OP_GET_SHARED_FILES);\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,EAAqC;EAErC,KAAK,OAAO,IAAI,SAAA,GAAwC,WAAW,CAAC;CACrE;AACD"}
@@ -0,0 +1,41 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag, p as findTag } from "./Tag-CZF6BRMY.mjs";
3
+ import { i as toOptionalNumber } from "./utils-DBnUQnZ-.mjs";
4
+ //#region src/response/SharedFilesResponse.ts
5
+ var SharedFilesResponseParser = class {
6
+ static fromPacket(packet) {
7
+ const files = [];
8
+ const knownfileTags = packet.tags.filter((tag) => tag.name === 1024);
9
+ for (const fileTag of knownfileTags) {
10
+ const tags = fileTag.nestedTags || [];
11
+ const hashTag = findTag(tags, 798);
12
+ const fileNameTag = findTag(tags, 769);
13
+ const file = {
14
+ fileHashHexString: hashTag ? hashTag.getValue().toString("hex") : void 0,
15
+ fileName: fileNameTag ? fileNameTag.getValue() : void 0,
16
+ filePath: findTag(tags, 1032)?.getValue(),
17
+ sizeFull: toOptionalNumber(findNumericTag(tags, 771)?.getLong()),
18
+ fileEd2kLink: findTag(tags, 782)?.getValue(),
19
+ upPrio: findNumericTag(tags, 1035)?.getInt(),
20
+ getRequests: findNumericTag(tags, 1027)?.getShort(),
21
+ getAllRequests: findNumericTag(tags, 1028)?.getInt(),
22
+ getAccepts: findNumericTag(tags, 1029)?.getShort(),
23
+ getAllAccepts: findNumericTag(tags, 1030)?.getInt(),
24
+ getXferred: toOptionalNumber(findNumericTag(tags, 1025)?.getLong()),
25
+ getAllXferred: toOptionalNumber(findNumericTag(tags, 1026)?.getLong()),
26
+ getCompleteSourcesLow: findNumericTag(tags, 1033)?.getShort(),
27
+ getCompleteSourcesHigh: findNumericTag(tags, 1034)?.getShort(),
28
+ getCompleteSources: findNumericTag(tags, 1037)?.getShort(),
29
+ getOnQueue: findNumericTag(tags, 1036)?.getShort(),
30
+ getComment: findTag(tags, 1038)?.getValue(),
31
+ getRating: findNumericTag(tags, 1039)?.getInt()
32
+ };
33
+ files.push(file);
34
+ }
35
+ return { files };
36
+ }
37
+ };
38
+ //#endregion
39
+ export { SharedFilesResponseParser };
40
+
41
+ //# sourceMappingURL=SharedFilesResponse-BiXT_oCx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedFilesResponse-BiXT_oCx.mjs","names":[],"sources":["../src/response/SharedFilesResponse.ts"],"sourcesContent":["/**\n * Shared Files Response - Parse shared files list\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findNumericTag, findTag } from '../ec/tag/Tag';\nimport type { AmuleFile } from '../model';\nimport { toOptionalNumber } from './utils';\n\nexport interface SharedFilesResponse {\n\tfiles: AmuleFile[];\n}\n\nexport class SharedFilesResponseParser {\n\tstatic fromPacket(packet: Packet): SharedFilesResponse {\n\t\tconst files: AmuleFile[] = [];\n\n\t\t// Find all knownfile tags\n\t\tconst knownfileTags = packet.tags.filter((tag) => tag.name === ECTagName.EC_TAG_KNOWNFILE);\n\n\t\tfor (const fileTag of knownfileTags) {\n\t\t\tconst tags = fileTag.nestedTags || [];\n\n\t\t\tconst hashTag = findTag(tags, ECTagName.EC_TAG_PARTFILE_HASH);\n\t\t\tconst fileNameTag = findTag(tags, ECTagName.EC_TAG_PARTFILE_NAME);\n\n\t\t\tconst file: AmuleFile = {\n\t\t\t\tfileHashHexString: hashTag ? hashTag.getValue().toString('hex') : undefined,\n\t\t\t\tfileName: fileNameTag ? fileNameTag.getValue() : undefined,\n\t\t\t\tfilePath: findTag(tags, ECTagName.EC_TAG_KNOWNFILE_FILENAME)?.getValue(),\n\t\t\t\tsizeFull: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SIZE_FULL)?.getLong()),\n\t\t\t\tfileEd2kLink: findTag(tags, ECTagName.EC_TAG_PARTFILE_ED2K_LINK)?.getValue(),\n\n\t\t\t\tupPrio: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_PRIO)?.getInt(),\n\t\t\t\tgetRequests: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_REQ_COUNT)?.getShort(),\n\t\t\t\tgetAllRequests: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_REQ_COUNT_ALL)?.getInt(),\n\t\t\t\tgetAccepts: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_ACCEPT_COUNT)?.getShort(),\n\t\t\t\tgetAllAccepts: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL)?.getInt(),\n\t\t\t\tgetXferred: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_XFERRED)?.getLong()),\n\t\t\t\tgetAllXferred: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_XFERRED_ALL)?.getLong()),\n\t\t\t\tgetCompleteSourcesLow: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW)?.getShort(),\n\t\t\t\tgetCompleteSourcesHigh: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH)?.getShort(),\n\t\t\t\tgetCompleteSources: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_COMPLETE_SOURCES)?.getShort(),\n\t\t\t\tgetOnQueue: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_ON_QUEUE)?.getShort(),\n\t\t\t\tgetComment: findTag(tags, ECTagName.EC_TAG_KNOWNFILE_COMMENT)?.getValue(),\n\t\t\t\tgetRating: findNumericTag(tags, ECTagName.EC_TAG_KNOWNFILE_RATING)?.getInt(),\n\t\t\t};\n\n\t\t\tfiles.push(file);\n\t\t}\n\n\t\treturn { files };\n\t}\n}\n"],"mappings":";;;;AAcA,IAAa,4BAAb,MAAuC;CACtC,OAAO,WAAW,QAAqC;EACtD,MAAM,QAAqB,CAAC;EAG5B,MAAM,gBAAgB,OAAO,KAAK,QAAQ,QAAQ,IAAI,SAAA,IAAmC;EAEzF,KAAK,MAAM,WAAW,eAAe;GACpC,MAAM,OAAO,QAAQ,cAAc,CAAC;GAEpC,MAAM,UAAU,QAAQ,MAAA,GAAoC;GAC5D,MAAM,cAAc,QAAQ,MAAA,GAAoC;GAEhE,MAAM,OAAkB;IACvB,mBAAmB,UAAU,QAAQ,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,KAAA;IAClE,UAAU,cAAc,YAAY,SAAS,IAAI,KAAA;IACjD,UAAU,QAAQ,MAAA,IAAyC,CAAC,EAAE,SAAS;IACvE,UAAU,iBAAiB,eAAe,MAAA,GAAyC,CAAC,EAAE,QAAQ,CAAC;IAC/F,cAAc,QAAQ,MAAA,GAAyC,CAAC,EAAE,SAAS;IAE3E,QAAQ,eAAe,MAAA,IAAqC,CAAC,EAAE,OAAO;IACtE,aAAa,eAAe,MAAA,IAA0C,CAAC,EAAE,SAAS;IAClF,gBAAgB,eAAe,MAAA,IAA8C,CAAC,EAAE,OAAO;IACvF,YAAY,eAAe,MAAA,IAA6C,CAAC,EAAE,SAAS;IACpF,eAAe,eAAe,MAAA,IAAiD,CAAC,EAAE,OAAO;IACzF,YAAY,iBAAiB,eAAe,MAAA,IAAwC,CAAC,EAAE,QAAQ,CAAC;IAChG,eAAe,iBAAiB,eAAe,MAAA,IAA4C,CAAC,EAAE,QAAQ,CAAC;IACvG,uBAAuB,eAAe,MAAA,IAAqD,CAAC,EAAE,SAAS;IACvG,wBAAwB,eAAe,MAAA,IAAsD,CAAC,EAAE,SAAS;IACzG,oBAAoB,eAAe,MAAA,IAAiD,CAAC,EAAE,SAAS;IAChG,YAAY,eAAe,MAAA,IAAyC,CAAC,EAAE,SAAS;IAChF,YAAY,QAAQ,MAAA,IAAwC,CAAC,EAAE,SAAS;IACxE,WAAW,eAAe,MAAA,IAAuC,CAAC,EAAE,OAAO;GAC5E;GAEA,MAAM,KAAK,IAAI;EAChB;EAEA,OAAO,EAAE,MAAM;CAChB;AACD"}
@@ -0,0 +1,17 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { s as UByteTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/StatsRequest.ts
5
+ /**
6
+ * Stats Request - Request server statistics
7
+ */
8
+ var StatsRequest = class extends Request {
9
+ constructor(detailLevel = 2) {
10
+ super(10);
11
+ this.addTag(new UByteTag(4, detailLevel));
12
+ }
13
+ };
14
+ //#endregion
15
+ export { StatsRequest };
16
+
17
+ //# sourceMappingURL=StatsRequest-B8v9LLHG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsRequest-B8v9LLHG.mjs","names":[],"sources":["../src/request/StatsRequest.ts"],"sourcesContent":["/**\n * Stats Request - Request server statistics\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName, ECDetailLevel } from '../ec/Codes';\nimport { UByteTag } from '../ec/tag/Tag';\n\nexport class StatsRequest extends Request {\n\tconstructor(detailLevel: ECDetailLevel = ECDetailLevel.EC_DETAIL_FULL) {\n\t\tsuper(ECOpCode.EC_OP_STAT_REQ);\n\n\t\tthis.addTag(new UByteTag(ECTagName.EC_TAG_DETAIL_LEVEL, detailLevel));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,eAAb,cAAkC,QAAQ;CACzC,YAAY,cAAA,GAA2D;EACtE,MAAA,EAA6B;EAE7B,KAAK,OAAO,IAAI,SAAA,GAAwC,WAAW,CAAC;CACrE;AACD"}
@@ -0,0 +1,78 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag, p as findTag } from "./Tag-CZF6BRMY.mjs";
3
+ //#region src/response/StatsResponse.ts
4
+ var StatsResponseParser = class {
5
+ static fromPacket(packet) {
6
+ const uploadOverhead = findNumericTag(packet.tags, 516)?.getValue() || 0;
7
+ const downloadOverhead = findNumericTag(packet.tags, 517)?.getValue() || 0;
8
+ const bannedCount = findNumericTag(packet.tags, 519)?.getValue() || 0;
9
+ const totalSentBytes = findNumericTag(packet.tags, 536)?.getValue() || 0;
10
+ const totalReceivedBytes = findNumericTag(packet.tags, 537)?.getValue() || 0;
11
+ const sharedFileCount = findNumericTag(packet.tags, 538)?.getValue() || 0;
12
+ const uploadSpeed = findNumericTag(packet.tags, 512)?.getValue() || 0;
13
+ const downloadSpeed = findNumericTag(packet.tags, 513)?.getValue() || 0;
14
+ const uploadSpeedLimit = findNumericTag(packet.tags, 514)?.getValue() || 0;
15
+ const downloadSpeedLimit = findNumericTag(packet.tags, 515)?.getValue() || 0;
16
+ const uploadQueueLength = findNumericTag(packet.tags, 520)?.getValue() || 0;
17
+ const totalSourceCount = findNumericTag(packet.tags, 518)?.getValue() || 0;
18
+ const ed2kUsers = findNumericTag(packet.tags, 521)?.getValue() || 0;
19
+ const kadUsers = findNumericTag(packet.tags, 522)?.getValue() || 0;
20
+ const ed2kFiles = findNumericTag(packet.tags, 523)?.getValue() || 0;
21
+ const kadFiles = findNumericTag(packet.tags, 524)?.getValue() || 0;
22
+ const kadNodes = findNumericTag(packet.tags, 539)?.getValue() || 0;
23
+ const connStateTag = findTag(packet.tags, 5);
24
+ let ed2kId = 0;
25
+ let clientId = 0;
26
+ let kadId;
27
+ let connectedServer;
28
+ if (connStateTag && connStateTag.nestedTags) {
29
+ ed2kId = Number(findNumericTag(connStateTag.nestedTags, 6)?.getValue() || 0);
30
+ clientId = Number(findNumericTag(connStateTag.nestedTags, 10)?.getValue() || 0);
31
+ const kadIdTag = findTag(connStateTag.nestedTags, 16);
32
+ if (kadIdTag && kadIdTag.getValue() !== void 0) {
33
+ const val = kadIdTag.getValue();
34
+ if (typeof val === "bigint") kadId = val.toString(16).padStart(32, "0");
35
+ else if (val instanceof Buffer) kadId = val.toString("hex");
36
+ }
37
+ const serverTag = findTag(connStateTag.nestedTags, 1280);
38
+ if (serverTag) {
39
+ const serverVal = serverTag.getValue();
40
+ if (serverVal && typeof serverVal === "object" && "address" in serverVal) connectedServer = {
41
+ ip: serverVal.address,
42
+ port: serverVal.port,
43
+ name: findTag(serverTag.nestedTags || [], 1281)?.getValue(),
44
+ description: findTag(serverTag.nestedTags || [], 1282)?.getValue()
45
+ };
46
+ }
47
+ }
48
+ const id = clientId || Number(findNumericTag(packet.tags, 10)?.getValue() || 0);
49
+ return {
50
+ id: Number(id),
51
+ ed2kId,
52
+ kadId,
53
+ connectedServer,
54
+ uploadOverhead: Number(uploadOverhead),
55
+ downloadOverhead: Number(downloadOverhead),
56
+ bannedCount: Number(bannedCount),
57
+ loggerMessage: [],
58
+ totalSentBytes: Number(totalSentBytes),
59
+ totalReceivedBytes: Number(totalReceivedBytes),
60
+ sharedFileCount: Number(sharedFileCount),
61
+ uploadSpeed: Number(uploadSpeed),
62
+ downloadSpeed: Number(downloadSpeed),
63
+ uploadSpeedLimit: Number(uploadSpeedLimit),
64
+ downloadSpeedLimit: Number(downloadSpeedLimit),
65
+ uploadQueueLength: Number(uploadQueueLength),
66
+ totalSourceCount: Number(totalSourceCount),
67
+ ed2kUsers: Number(ed2kUsers),
68
+ kadUsers: Number(kadUsers),
69
+ ed2kFiles: Number(ed2kFiles),
70
+ kadFiles: Number(kadFiles),
71
+ kadNodes: Number(kadNodes)
72
+ };
73
+ }
74
+ };
75
+ //#endregion
76
+ export { StatsResponseParser };
77
+
78
+ //# sourceMappingURL=StatsResponse-BVUxNPbz.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsResponse-BVUxNPbz.mjs","names":[],"sources":["../src/response/StatsResponse.ts"],"sourcesContent":["/**\n * Stats Response - Server statistics\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findNumericTag, findTag } from '../ec/tag/Tag';\nimport type { StatsResponse } from '../client/AmuleClient';\n\nexport class StatsResponseParser {\n\tstatic fromPacket(packet: Packet): StatsResponse {\n\t\t// Extract common stats\n\t\tconst uploadOverhead = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_UP_OVERHEAD)?.getValue() || 0;\n\t\tconst downloadOverhead = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_DOWN_OVERHEAD)?.getValue() || 0;\n\t\tconst bannedCount = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_BANNED_COUNT)?.getValue() || 0;\n\n\t\tconst totalSentBytes = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_TOTAL_SENT_BYTES)?.getValue() || 0;\n\t\tconst totalReceivedBytes = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_TOTAL_RECEIVED_BYTES)?.getValue() || 0;\n\t\tconst sharedFileCount = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_SHARED_FILE_COUNT)?.getValue() || 0;\n\n\t\tconst uploadSpeed = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_UL_SPEED)?.getValue() || 0;\n\t\tconst downloadSpeed = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_DL_SPEED)?.getValue() || 0;\n\t\tconst uploadSpeedLimit = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_UL_SPEED_LIMIT)?.getValue() || 0;\n\t\tconst downloadSpeedLimit = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_DL_SPEED_LIMIT)?.getValue() || 0;\n\n\t\tconst uploadQueueLength = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_UL_QUEUE_LEN)?.getValue() || 0;\n\t\tconst totalSourceCount = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_TOTAL_SRC_COUNT)?.getValue() || 0;\n\t\tconst ed2kUsers = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_ED2K_USERS)?.getValue() || 0;\n\t\tconst kadUsers = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_KAD_USERS)?.getValue() || 0;\n\t\tconst ed2kFiles = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_ED2K_FILES)?.getValue() || 0;\n\t\tconst kadFiles = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_KAD_FILES)?.getValue() || 0;\n\n\t\tconst kadNodes = findNumericTag(packet.tags, ECTagName.EC_TAG_STATS_KAD_NODES)?.getValue() || 0;\n\n\t\t// Connection State & Server Info\n\t\tconst connStateTag = findTag(packet.tags, ECTagName.EC_TAG_CONNSTATE);\n\t\tlet ed2kId = 0;\n\t\tlet clientId = 0;\n\t\tlet kadId: string | undefined;\n\t\tlet connectedServer: StatsResponse['connectedServer'];\n\n\t\tif (connStateTag && connStateTag.nestedTags) {\n\t\t\ted2kId = Number(findNumericTag(connStateTag.nestedTags, ECTagName.EC_TAG_ED2K_ID)?.getValue() || 0);\n\t\t\tclientId = Number(findNumericTag(connStateTag.nestedTags, ECTagName.EC_TAG_CLIENT_ID)?.getValue() || 0);\n\n\t\t\tconst kadIdTag = findTag(connStateTag.nestedTags, ECTagName.EC_TAG_KAD_ID);\n\t\t\tif (kadIdTag && kadIdTag.getValue() !== undefined) {\n\t\t\t\tconst val = kadIdTag.getValue();\n\t\t\t\tif (typeof val === 'bigint') {\n\t\t\t\t\tkadId = val.toString(16).padStart(32, '0');\n\t\t\t\t} else if (val instanceof Buffer) {\n\t\t\t\t\tkadId = val.toString('hex');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst serverTag = findTag(connStateTag.nestedTags, ECTagName.EC_TAG_SERVER);\n\t\t\tif (serverTag) {\n\t\t\t\tconst serverVal = serverTag.getValue() as any;\n\t\t\t\tif (serverVal && typeof serverVal === 'object' && 'address' in serverVal) {\n\t\t\t\t\tconnectedServer = {\n\t\t\t\t\t\tip: serverVal.address,\n\t\t\t\t\t\tport: serverVal.port,\n\t\t\t\t\t\tname: findTag(serverTag.nestedTags || [], ECTagName.EC_TAG_SERVER_NAME)?.getValue(),\n\t\t\t\t\t\tdescription: findTag(serverTag.nestedTags || [], ECTagName.EC_TAG_SERVER_DESC)?.getValue(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fallback for ID if not in connState\n\t\tconst id = clientId || Number(findNumericTag(packet.tags, ECTagName.EC_TAG_CLIENT_ID)?.getValue() || 0);\n\n\t\t// Logger messages (if any)\n\t\tconst loggerMessage: string[] = [];\n\t\t// TODO: Parse logger messages from nested tags if present\n\n\t\treturn {\n\t\t\tid: Number(id),\n\t\t\ted2kId,\n\t\t\tkadId,\n\t\t\tconnectedServer,\n\t\t\tuploadOverhead: Number(uploadOverhead),\n\t\t\tdownloadOverhead: Number(downloadOverhead),\n\t\t\tbannedCount: Number(bannedCount),\n\t\t\tloggerMessage,\n\t\t\ttotalSentBytes: Number(totalSentBytes),\n\t\t\ttotalReceivedBytes: Number(totalReceivedBytes),\n\t\t\tsharedFileCount: Number(sharedFileCount),\n\t\t\tuploadSpeed: Number(uploadSpeed),\n\t\t\tdownloadSpeed: Number(downloadSpeed),\n\t\t\tuploadSpeedLimit: Number(uploadSpeedLimit),\n\t\t\tdownloadSpeedLimit: Number(downloadSpeedLimit),\n\t\t\tuploadQueueLength: Number(uploadQueueLength),\n\t\t\ttotalSourceCount: Number(totalSourceCount),\n\t\t\ted2kUsers: Number(ed2kUsers),\n\t\t\tkadUsers: Number(kadUsers),\n\t\t\ted2kFiles: Number(ed2kFiles),\n\t\t\tkadFiles: Number(kadFiles),\n\t\t\tkadNodes: Number(kadNodes),\n\t\t};\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ //#region src/ec/tag/Tag.ts
2
+ var Tag = class {
3
+ name;
4
+ type;
5
+ nameValue;
6
+ value;
7
+ nestedTags;
8
+ constructor(name, type, nestedTags = [], nameValue = name) {
9
+ this.name = name;
10
+ this.type = type;
11
+ this.nameValue = nameValue;
12
+ if (nestedTags.length > 0) this.nestedTags = nestedTags;
13
+ }
14
+ getValue() {
15
+ return this.value;
16
+ }
17
+ setValue(value) {
18
+ this.value = value;
19
+ }
20
+ };
21
+ var CustomTag = class extends Tag {
22
+ constructor(name, value, subtags = [], nameValue = name) {
23
+ super(name, 1, subtags, nameValue);
24
+ if (value !== void 0) this.setValue(value);
25
+ }
26
+ parseValue(value) {
27
+ this.setValue(value);
28
+ }
29
+ encodeValue() {
30
+ return this.getValue();
31
+ }
32
+ };
33
+ var UByteTag = class UByteTag extends Tag {
34
+ constructor(name, value, subtags = [], nameValue = name) {
35
+ super(name, 2, subtags, nameValue);
36
+ if (value !== void 0) this.setValue(value);
37
+ }
38
+ static withValue(name, value, subtags = []) {
39
+ return new UByteTag(name, value, subtags);
40
+ }
41
+ parseValue(value) {
42
+ if (value.length === 0) this.setValue(0);
43
+ else if (value.length === 1) this.setValue(value[0]);
44
+ else throw new Error("UInt8Tag value must be 1 byte long");
45
+ }
46
+ encodeValue() {
47
+ const buf = Buffer.allocUnsafe(1);
48
+ buf.writeUInt8(this.getValue());
49
+ return buf;
50
+ }
51
+ getShort() {
52
+ return this.getValue();
53
+ }
54
+ getInt() {
55
+ return this.getValue();
56
+ }
57
+ getLong() {
58
+ return BigInt(this.getValue());
59
+ }
60
+ };
61
+ var UShortTag = class UShortTag extends Tag {
62
+ constructor(name, value, subtags = [], nameValue = name) {
63
+ super(name, 3, subtags, nameValue);
64
+ if (value !== void 0) this.setValue(value);
65
+ }
66
+ static withValue(name, value, subtags = []) {
67
+ return new UShortTag(name, value, subtags);
68
+ }
69
+ parseValue(value) {
70
+ if (value.length === 0) this.setValue(0);
71
+ else if (value.length === 2) this.setValue(value.readUInt16BE(0));
72
+ else throw new Error("UInt16Tag value must be 2 bytes long");
73
+ }
74
+ encodeValue() {
75
+ const buf = Buffer.allocUnsafe(2);
76
+ buf.writeUInt16BE(this.getValue());
77
+ return buf;
78
+ }
79
+ getShort() {
80
+ return this.getValue();
81
+ }
82
+ getInt() {
83
+ return this.getValue();
84
+ }
85
+ getLong() {
86
+ return BigInt(this.getValue());
87
+ }
88
+ };
89
+ var UIntTag = class UIntTag extends Tag {
90
+ constructor(name, value, subtags = [], nameValue = name) {
91
+ super(name, 4, subtags, nameValue);
92
+ if (value !== void 0) this.setValue(value);
93
+ }
94
+ static withValue(name, value, subtags = []) {
95
+ return new UIntTag(name, value, subtags);
96
+ }
97
+ parseValue(value) {
98
+ if (value.length === 0) this.setValue(0);
99
+ else if (value.length === 4) this.setValue(value.readUInt32BE(0));
100
+ else throw new Error("UInt32Tag value must be 4 bytes long");
101
+ }
102
+ encodeValue() {
103
+ const buf = Buffer.allocUnsafe(4);
104
+ buf.writeUInt32BE(this.getValue());
105
+ return buf;
106
+ }
107
+ getShort() {
108
+ throw new Error("Unsigned Integer cannot be cast to short");
109
+ }
110
+ getInt() {
111
+ return this.getValue();
112
+ }
113
+ getLong() {
114
+ return BigInt(this.getValue());
115
+ }
116
+ };
117
+ var ULongTag = class ULongTag extends Tag {
118
+ constructor(name, value, subtags = [], nameValue = name) {
119
+ super(name, 5, subtags, nameValue);
120
+ if (value !== void 0) this.setValue(value);
121
+ }
122
+ static withValue(name, value, subtags = []) {
123
+ return new ULongTag(name, value, subtags);
124
+ }
125
+ parseValue(value) {
126
+ if (value.length === 0) this.setValue(0n);
127
+ else if (value.length === 8) this.setValue(value.readBigUInt64BE(0));
128
+ else throw new Error("UInt64Tag value must be 8 bytes long");
129
+ }
130
+ encodeValue() {
131
+ const buf = Buffer.allocUnsafe(8);
132
+ buf.writeBigUInt64BE(this.getValue());
133
+ return buf;
134
+ }
135
+ getShort() {
136
+ throw new Error("Unsigned Long cannot be cast to short");
137
+ }
138
+ getInt() {
139
+ throw new Error("Unsigned Long cannot be cast to int");
140
+ }
141
+ getLong() {
142
+ return this.getValue();
143
+ }
144
+ };
145
+ var UInt128Tag = class UInt128Tag extends Tag {
146
+ constructor(name, value, subtags = [], nameValue = name) {
147
+ super(name, 10, subtags, nameValue);
148
+ if (value !== void 0) this.setValue(value);
149
+ }
150
+ static withValue(name, value, subtags = []) {
151
+ return new UInt128Tag(name, value, subtags);
152
+ }
153
+ parseValue(value) {
154
+ if (value.length === 0) this.setValue(0n);
155
+ else {
156
+ let result = 0n;
157
+ for (let i = 0; i < value.length; i++) result = result << 8n | BigInt(value[i]);
158
+ this.setValue(result);
159
+ }
160
+ }
161
+ encodeValue() {
162
+ const val = this.getValue();
163
+ const bytes = [];
164
+ let remaining = val;
165
+ while (remaining > 0n) {
166
+ bytes.unshift(Number(remaining & 255n));
167
+ remaining >>= 8n;
168
+ }
169
+ while (bytes.length < 16) bytes.unshift(0);
170
+ return Buffer.from(bytes);
171
+ }
172
+ };
173
+ var StringTag = class StringTag extends Tag {
174
+ constructor(name, value, subtags = [], nameValue = name) {
175
+ super(name, 6, subtags, nameValue);
176
+ if (value !== void 0) this.setValue(value);
177
+ }
178
+ static withValue(name, value, subtags = []) {
179
+ return new StringTag(name, value, subtags);
180
+ }
181
+ parseValue(value) {
182
+ if (value[value.length - 1] !== 0) throw new Error("StringTag value must be null terminated");
183
+ this.setValue(value.toString("utf8", 0, value.length - 1));
184
+ }
185
+ encodeValue() {
186
+ return Buffer.concat([Buffer.from(this.getValue(), "utf8"), Buffer.from([0])]);
187
+ }
188
+ };
189
+ var DoubleTag = class DoubleTag extends Tag {
190
+ constructor(name, value, subtags = [], nameValue = name) {
191
+ super(name, 7, subtags, nameValue);
192
+ if (value !== void 0) this.setValue(value);
193
+ }
194
+ static withValue(name, value, subtags = []) {
195
+ return new DoubleTag(name, value, subtags);
196
+ }
197
+ parseValue(value) {
198
+ const numValue = value.length >= 8 ? value.readDoubleBE(0) : 0;
199
+ this.setValue(numValue);
200
+ }
201
+ encodeValue() {
202
+ const buf = Buffer.allocUnsafe(8);
203
+ buf.writeDoubleBE(this.getValue());
204
+ return buf;
205
+ }
206
+ };
207
+ var Ipv4Tag = class Ipv4Tag extends Tag {
208
+ constructor(name, value, subtags = [], nameValue = name) {
209
+ super(name, 8, subtags, nameValue);
210
+ if (value !== void 0) this.setValue(value);
211
+ }
212
+ static withValue(name, value, subtags = []) {
213
+ return new Ipv4Tag(name, value, subtags);
214
+ }
215
+ parseValue(value) {
216
+ if (value.length !== 6) throw new Error("Ipv4Tag value must be 6 bytes long");
217
+ const address = `${value[0]}.${value[1]}.${value[2]}.${value[3]}`;
218
+ const port = value.readUInt16BE(4);
219
+ this.setValue({
220
+ address,
221
+ port
222
+ });
223
+ }
224
+ encodeValue() {
225
+ const val = this.getValue();
226
+ const parts = val.address.split(".").map(Number);
227
+ const buf = Buffer.allocUnsafe(6);
228
+ buf[0] = parts[0];
229
+ buf[1] = parts[1];
230
+ buf[2] = parts[2];
231
+ buf[3] = parts[3];
232
+ buf.writeUInt16BE(val.port, 4);
233
+ return buf;
234
+ }
235
+ };
236
+ var Hash16Tag = class Hash16Tag extends Tag {
237
+ constructor(name, value, subtags = [], nameValue = name) {
238
+ super(name, 9, subtags, nameValue);
239
+ if (value !== void 0) this.setValue(value);
240
+ }
241
+ static withValue(name, value, subtags = []) {
242
+ return new Hash16Tag(name, value, subtags);
243
+ }
244
+ parseValue(value) {
245
+ if (value.length === 16) this.setValue(value);
246
+ else throw new Error("Hash16Tag value must be 16 bytes long");
247
+ }
248
+ encodeValue() {
249
+ return this.getValue();
250
+ }
251
+ };
252
+ function findTag(tags, name) {
253
+ return tags.find((tag) => tag.name === name);
254
+ }
255
+ function findNumericTag(tags, name) {
256
+ const tag = tags.find((tag) => tag.name === name);
257
+ if (tag && "getInt" in tag && "getShort" in tag && "getLong" in tag) return tag;
258
+ }
259
+ //#endregion
260
+ export { StringTag as a, UInt128Tag as c, UShortTag as d, findNumericTag as f, Ipv4Tag as i, UIntTag as l, DoubleTag as n, Tag as o, findTag as p, Hash16Tag as r, UByteTag as s, CustomTag as t, ULongTag as u };
261
+
262
+ //# sourceMappingURL=Tag-CZF6BRMY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tag-CZF6BRMY.mjs","names":[],"sources":["../src/ec/tag/Tag.ts"],"sourcesContent":["// Tag definitions for EC protocol\n\nimport { ECTagName, ECTagType } from '../Codes';\n\nexport interface NumericTag {\n\tgetShort(): number;\n\tgetInt(): number;\n\tgetLong(): bigint;\n\tgetValue(): number | bigint;\n}\n\nexport abstract class Tag<T> {\n\tprotected value!: T;\n\tpublic nestedTags?: Tag<any>[];\n\n\tconstructor(\n\t\tpublic readonly name: ECTagName,\n\t\tpublic readonly type: ECTagType,\n\t\tnestedTags: Tag<any>[] = [],\n\t\tpublic readonly nameValue: number = name\n\t) {\n\t\tif (nestedTags.length > 0) {\n\t\t\tthis.nestedTags = nestedTags;\n\t\t}\n\t}\n\n\tabstract parseValue(value: Buffer): void;\n\tabstract encodeValue(): Buffer;\n\n\tgetValue(): T {\n\t\treturn this.value;\n\t}\n\n\tprotected setValue(value: T): void {\n\t\tthis.value = value;\n\t}\n}\n\nexport class CustomTag extends Tag<Buffer> {\n\tconstructor(name: ECTagName, value?: Buffer, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_CUSTOM, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tthis.setValue(value);\n\t}\n\n\tencodeValue(): Buffer {\n\t\treturn this.getValue();\n\t}\n}\n\nexport class UByteTag extends Tag<number> implements NumericTag {\n\tconstructor(name: ECTagName, value?: number, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_UINT8, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: number, subtags: Tag<any>[] = []): UByteTag {\n\t\treturn new UByteTag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value.length === 0) {\n\t\t\tthis.setValue(0);\n\t\t} else if (value.length === 1) {\n\t\t\tthis.setValue(value[0]);\n\t\t} else {\n\t\t\tthrow new Error('UInt8Tag value must be 1 byte long');\n\t\t}\n\t}\n\n\tencodeValue(): Buffer {\n\t\tconst buf = Buffer.allocUnsafe(1);\n\t\tbuf.writeUInt8(this.getValue());\n\t\treturn buf;\n\t}\n\n\tgetShort(): number {\n\t\treturn this.getValue();\n\t}\n\n\tgetInt(): number {\n\t\treturn this.getValue();\n\t}\n\n\tgetLong(): bigint {\n\t\treturn BigInt(this.getValue());\n\t}\n}\n\nexport class UShortTag extends Tag<number> implements NumericTag {\n\tconstructor(name: ECTagName, value?: number, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_UINT16, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: number, subtags: Tag<any>[] = []): UShortTag {\n\t\treturn new UShortTag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value.length === 0) {\n\t\t\tthis.setValue(0);\n\t\t} else if (value.length === 2) {\n\t\t\tthis.setValue(value.readUInt16BE(0));\n\t\t} else {\n\t\t\tthrow new Error('UInt16Tag value must be 2 bytes long');\n\t\t}\n\t}\n\n\tencodeValue(): Buffer {\n\t\tconst buf = Buffer.allocUnsafe(2);\n\t\tbuf.writeUInt16BE(this.getValue());\n\t\treturn buf;\n\t}\n\n\tgetShort(): number {\n\t\treturn this.getValue();\n\t}\n\n\tgetInt(): number {\n\t\treturn this.getValue();\n\t}\n\n\tgetLong(): bigint {\n\t\treturn BigInt(this.getValue());\n\t}\n}\n\nexport class UIntTag extends Tag<number> implements NumericTag {\n\tconstructor(name: ECTagName, value?: number, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_UINT32, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: number, subtags: Tag<any>[] = []): UIntTag {\n\t\treturn new UIntTag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value.length === 0) {\n\t\t\tthis.setValue(0);\n\t\t} else if (value.length === 4) {\n\t\t\tthis.setValue(value.readUInt32BE(0));\n\t\t} else {\n\t\t\tthrow new Error('UInt32Tag value must be 4 bytes long');\n\t\t}\n\t}\n\n\tencodeValue(): Buffer {\n\t\tconst buf = Buffer.allocUnsafe(4);\n\t\tbuf.writeUInt32BE(this.getValue());\n\t\treturn buf;\n\t}\n\n\tgetShort(): number {\n\t\tthrow new Error('Unsigned Integer cannot be cast to short');\n\t}\n\n\tgetInt(): number {\n\t\treturn this.getValue();\n\t}\n\n\tgetLong(): bigint {\n\t\treturn BigInt(this.getValue());\n\t}\n}\n\nexport class ULongTag extends Tag<bigint> implements NumericTag {\n\tconstructor(name: ECTagName, value?: bigint, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_UINT64, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: bigint, subtags: Tag<any>[] = []): ULongTag {\n\t\treturn new ULongTag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value.length === 0) {\n\t\t\tthis.setValue(0n);\n\t\t} else if (value.length === 8) {\n\t\t\tthis.setValue(value.readBigUInt64BE(0));\n\t\t} else {\n\t\t\tthrow new Error('UInt64Tag value must be 8 bytes long');\n\t\t}\n\t}\n\n\tencodeValue(): Buffer {\n\t\tconst buf = Buffer.allocUnsafe(8);\n\t\tbuf.writeBigUInt64BE(this.getValue());\n\t\treturn buf;\n\t}\n\n\tgetShort(): number {\n\t\tthrow new Error('Unsigned Long cannot be cast to short');\n\t}\n\n\tgetInt(): number {\n\t\tthrow new Error('Unsigned Long cannot be cast to int');\n\t}\n\n\tgetLong(): bigint {\n\t\treturn this.getValue();\n\t}\n}\n\nexport class UInt128Tag extends Tag<bigint> {\n\tconstructor(name: ECTagName, value?: bigint, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_UINT128, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: bigint, subtags: Tag<any>[] = []): UInt128Tag {\n\t\treturn new UInt128Tag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value.length === 0) {\n\t\t\tthis.setValue(0n);\n\t\t} else {\n\t\t\t// Read as big-endian big integer\n\t\t\tlet result = 0n;\n\t\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\t\tresult = (result << 8n) | BigInt(value[i]);\n\t\t\t}\n\t\t\tthis.setValue(result);\n\t\t}\n\t}\n\n\tencodeValue(): Buffer {\n\t\t// Encode as big-endian\n\t\tconst val = this.getValue();\n\t\tconst bytes: number[] = [];\n\t\tlet remaining = val;\n\n\t\twhile (remaining > 0n) {\n\t\t\tbytes.unshift(Number(remaining & 0xffn));\n\t\t\tremaining >>= 8n;\n\t\t}\n\n\t\t// Pad to 16 bytes\n\t\twhile (bytes.length < 16) {\n\t\t\tbytes.unshift(0);\n\t\t}\n\n\t\treturn Buffer.from(bytes);\n\t}\n}\n\nexport class StringTag extends Tag<string> {\n\tconstructor(name: ECTagName, value?: string, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_STRING, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: string, subtags: Tag<any>[] = []): StringTag {\n\t\treturn new StringTag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value[value.length - 1] !== 0x00) {\n\t\t\tthrow new Error('StringTag value must be null terminated');\n\t\t}\n\t\tthis.setValue(value.toString('utf8', 0, value.length - 1));\n\t}\n\n\tencodeValue(): Buffer {\n\t\treturn Buffer.concat([Buffer.from(this.getValue(), 'utf8'), Buffer.from([0x00])]);\n\t}\n}\n\nexport class DoubleTag extends Tag<number> {\n\tconstructor(name: ECTagName, value?: number, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_DOUBLE, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: number, subtags: Tag<any>[] = []): DoubleTag {\n\t\treturn new DoubleTag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tconst numValue = value.length >= 8 ? value.readDoubleBE(0) : 0;\n\t\tthis.setValue(numValue);\n\t}\n\n\tencodeValue(): Buffer {\n\t\tconst buf = Buffer.allocUnsafe(8);\n\t\tbuf.writeDoubleBE(this.getValue());\n\t\treturn buf;\n\t}\n}\n\nexport interface Ipv4Value {\n\taddress: string;\n\tport: number;\n}\n\nexport class Ipv4Tag extends Tag<Ipv4Value> {\n\tconstructor(name: ECTagName, value?: Ipv4Value, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_IPV4, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: Ipv4Value, subtags: Tag<any>[] = []): Ipv4Tag {\n\t\treturn new Ipv4Tag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value.length !== 6) {\n\t\t\tthrow new Error('Ipv4Tag value must be 6 bytes long');\n\t\t}\n\t\tconst address = `${value[0]}.${value[1]}.${value[2]}.${value[3]}`;\n\t\tconst port = value.readUInt16BE(4);\n\t\tthis.setValue({ address, port });\n\t}\n\n\tencodeValue(): Buffer {\n\t\tconst val = this.getValue();\n\t\tconst parts = val.address.split('.').map(Number);\n\t\tconst buf = Buffer.allocUnsafe(6);\n\t\tbuf[0] = parts[0];\n\t\tbuf[1] = parts[1];\n\t\tbuf[2] = parts[2];\n\t\tbuf[3] = parts[3];\n\t\tbuf.writeUInt16BE(val.port, 4);\n\t\treturn buf;\n\t}\n}\n\nexport class Hash16Tag extends Tag<Buffer> {\n\tconstructor(name: ECTagName, value?: Buffer, subtags: Tag<any>[] = [], nameValue: number = name) {\n\t\tsuper(name, ECTagType.EC_TAGTYPE_HASH16, subtags, nameValue);\n\t\tif (value !== undefined) {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n\n\tstatic withValue(name: ECTagName, value: Buffer, subtags: Tag<any>[] = []): Hash16Tag {\n\t\treturn new Hash16Tag(name, value, subtags);\n\t}\n\n\tparseValue(value: Buffer): void {\n\t\tif (value.length === 16) {\n\t\t\tthis.setValue(value);\n\t\t} else {\n\t\t\tthrow new Error('Hash16Tag value must be 16 bytes long');\n\t\t}\n\t}\n\n\tencodeValue(): Buffer {\n\t\treturn this.getValue();\n\t}\n}\n\n// Helper functions for tag extraction\nexport function findTag(tags: Tag<any>[], name: ECTagName): Tag<any> | undefined {\n\treturn tags.find((tag) => tag.name === name);\n}\n\nexport function findNumericTag(tags: Tag<any>[], name: ECTagName): NumericTag | undefined {\n\tconst tag = tags.find((tag) => tag.name === name);\n\tif (tag && 'getInt' in tag && 'getShort' in tag && 'getLong' in tag) {\n\t\treturn tag as NumericTag;\n\t}\n\treturn undefined;\n}\n"],"mappings":";AAWA,IAAsB,MAAtB,MAA6B;CAKX;CACA;CAEA;CAPjB;CACA;CAEA,YACC,MACA,MACA,aAAyB,CAAC,GAC1B,YAAoC,MACnC;EAJe,KAAA,OAAA;EACA,KAAA,OAAA;EAEA,KAAA,YAAA;EAEhB,IAAI,WAAW,SAAS,GACvB,KAAK,aAAa;CAEpB;CAKA,WAAc;EACb,OAAO,KAAK;CACb;CAEA,SAAmB,OAAgB;EAClC,KAAK,QAAQ;CACd;AACD;AAEA,IAAa,YAAb,cAA+B,IAAY;CAC1C,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAmC,SAAS,SAAS;EAC3D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,WAAW,OAAqB;EAC/B,KAAK,SAAS,KAAK;CACpB;CAEA,cAAsB;EACrB,OAAO,KAAK,SAAS;CACtB;AACD;AAEA,IAAa,WAAb,MAAa,iBAAiB,IAAkC;CAC/D,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAkC,SAAS,SAAS;EAC1D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAa;EACpF,OAAO,IAAI,SAAS,MAAM,OAAO,OAAO;CACzC;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,WAAW,GACpB,KAAK,SAAS,CAAC;OACT,IAAI,MAAM,WAAW,GAC3B,KAAK,SAAS,MAAM,EAAE;OAEtB,MAAM,IAAI,MAAM,oCAAoC;CAEtD;CAEA,cAAsB;EACrB,MAAM,MAAM,OAAO,YAAY,CAAC;EAChC,IAAI,WAAW,KAAK,SAAS,CAAC;EAC9B,OAAO;CACR;CAEA,WAAmB;EAClB,OAAO,KAAK,SAAS;CACtB;CAEA,SAAiB;EAChB,OAAO,KAAK,SAAS;CACtB;CAEA,UAAkB;EACjB,OAAO,OAAO,KAAK,SAAS,CAAC;CAC9B;AACD;AAEA,IAAa,YAAb,MAAa,kBAAkB,IAAkC;CAChE,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAmC,SAAS,SAAS;EAC3D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAc;EACrF,OAAO,IAAI,UAAU,MAAM,OAAO,OAAO;CAC1C;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,WAAW,GACpB,KAAK,SAAS,CAAC;OACT,IAAI,MAAM,WAAW,GAC3B,KAAK,SAAS,MAAM,aAAa,CAAC,CAAC;OAEnC,MAAM,IAAI,MAAM,sCAAsC;CAExD;CAEA,cAAsB;EACrB,MAAM,MAAM,OAAO,YAAY,CAAC;EAChC,IAAI,cAAc,KAAK,SAAS,CAAC;EACjC,OAAO;CACR;CAEA,WAAmB;EAClB,OAAO,KAAK,SAAS;CACtB;CAEA,SAAiB;EAChB,OAAO,KAAK,SAAS;CACtB;CAEA,UAAkB;EACjB,OAAO,OAAO,KAAK,SAAS,CAAC;CAC9B;AACD;AAEA,IAAa,UAAb,MAAa,gBAAgB,IAAkC;CAC9D,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAmC,SAAS,SAAS;EAC3D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAY;EACnF,OAAO,IAAI,QAAQ,MAAM,OAAO,OAAO;CACxC;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,WAAW,GACpB,KAAK,SAAS,CAAC;OACT,IAAI,MAAM,WAAW,GAC3B,KAAK,SAAS,MAAM,aAAa,CAAC,CAAC;OAEnC,MAAM,IAAI,MAAM,sCAAsC;CAExD;CAEA,cAAsB;EACrB,MAAM,MAAM,OAAO,YAAY,CAAC;EAChC,IAAI,cAAc,KAAK,SAAS,CAAC;EACjC,OAAO;CACR;CAEA,WAAmB;EAClB,MAAM,IAAI,MAAM,0CAA0C;CAC3D;CAEA,SAAiB;EAChB,OAAO,KAAK,SAAS;CACtB;CAEA,UAAkB;EACjB,OAAO,OAAO,KAAK,SAAS,CAAC;CAC9B;AACD;AAEA,IAAa,WAAb,MAAa,iBAAiB,IAAkC;CAC/D,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAmC,SAAS,SAAS;EAC3D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAa;EACpF,OAAO,IAAI,SAAS,MAAM,OAAO,OAAO;CACzC;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,WAAW,GACpB,KAAK,SAAS,EAAE;OACV,IAAI,MAAM,WAAW,GAC3B,KAAK,SAAS,MAAM,gBAAgB,CAAC,CAAC;OAEtC,MAAM,IAAI,MAAM,sCAAsC;CAExD;CAEA,cAAsB;EACrB,MAAM,MAAM,OAAO,YAAY,CAAC;EAChC,IAAI,iBAAiB,KAAK,SAAS,CAAC;EACpC,OAAO;CACR;CAEA,WAAmB;EAClB,MAAM,IAAI,MAAM,uCAAuC;CACxD;CAEA,SAAiB;EAChB,MAAM,IAAI,MAAM,qCAAqC;CACtD;CAEA,UAAkB;EACjB,OAAO,KAAK,SAAS;CACtB;AACD;AAEA,IAAa,aAAb,MAAa,mBAAmB,IAAY;CAC3C,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,IAAoC,SAAS,SAAS;EAC5D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAe;EACtF,OAAO,IAAI,WAAW,MAAM,OAAO,OAAO;CAC3C;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,WAAW,GACpB,KAAK,SAAS,EAAE;OACV;GAEN,IAAI,SAAS;GACb,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KACjC,SAAU,UAAU,KAAM,OAAO,MAAM,EAAE;GAE1C,KAAK,SAAS,MAAM;EACrB;CACD;CAEA,cAAsB;EAErB,MAAM,MAAM,KAAK,SAAS;EAC1B,MAAM,QAAkB,CAAC;EACzB,IAAI,YAAY;EAEhB,OAAO,YAAY,IAAI;GACtB,MAAM,QAAQ,OAAO,YAAY,IAAK,CAAC;GACvC,cAAc;EACf;EAGA,OAAO,MAAM,SAAS,IACrB,MAAM,QAAQ,CAAC;EAGhB,OAAO,OAAO,KAAK,KAAK;CACzB;AACD;AAEA,IAAa,YAAb,MAAa,kBAAkB,IAAY;CAC1C,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAmC,SAAS,SAAS;EAC3D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAc;EACrF,OAAO,IAAI,UAAU,MAAM,OAAO,OAAO;CAC1C;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,MAAM,SAAS,OAAO,GAC/B,MAAM,IAAI,MAAM,yCAAyC;EAE1D,KAAK,SAAS,MAAM,SAAS,QAAQ,GAAG,MAAM,SAAS,CAAC,CAAC;CAC1D;CAEA,cAAsB;EACrB,OAAO,OAAO,OAAO,CAAC,OAAO,KAAK,KAAK,SAAS,GAAG,MAAM,GAAG,OAAO,KAAK,CAAC,CAAI,CAAC,CAAC,CAAC;CACjF;AACD;AAEA,IAAa,YAAb,MAAa,kBAAkB,IAAY;CAC1C,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAmC,SAAS,SAAS;EAC3D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAc;EACrF,OAAO,IAAI,UAAU,MAAM,OAAO,OAAO;CAC1C;CAEA,WAAW,OAAqB;EAC/B,MAAM,WAAW,MAAM,UAAU,IAAI,MAAM,aAAa,CAAC,IAAI;EAC7D,KAAK,SAAS,QAAQ;CACvB;CAEA,cAAsB;EACrB,MAAM,MAAM,OAAO,YAAY,CAAC;EAChC,IAAI,cAAc,KAAK,SAAS,CAAC;EACjC,OAAO;CACR;AACD;AAOA,IAAa,UAAb,MAAa,gBAAgB,IAAe;CAC3C,YAAY,MAAiB,OAAmB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EACnG,MAAM,MAAA,GAAiC,SAAS,SAAS;EACzD,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAkB,UAAsB,CAAC,GAAY;EACtF,OAAO,IAAI,QAAQ,MAAM,OAAO,OAAO;CACxC;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,WAAW,GACpB,MAAM,IAAI,MAAM,oCAAoC;EAErD,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,MAAM;EAC7D,MAAM,OAAO,MAAM,aAAa,CAAC;EACjC,KAAK,SAAS;GAAE;GAAS;EAAK,CAAC;CAChC;CAEA,cAAsB;EACrB,MAAM,MAAM,KAAK,SAAS;EAC1B,MAAM,QAAQ,IAAI,QAAQ,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;EAC/C,MAAM,MAAM,OAAO,YAAY,CAAC;EAChC,IAAI,KAAK,MAAM;EACf,IAAI,KAAK,MAAM;EACf,IAAI,KAAK,MAAM;EACf,IAAI,KAAK,MAAM;EACf,IAAI,cAAc,IAAI,MAAM,CAAC;EAC7B,OAAO;CACR;AACD;AAEA,IAAa,YAAb,MAAa,kBAAkB,IAAY;CAC1C,YAAY,MAAiB,OAAgB,UAAsB,CAAC,GAAG,YAAoB,MAAM;EAChG,MAAM,MAAA,GAAmC,SAAS,SAAS;EAC3D,IAAI,UAAU,KAAA,GACb,KAAK,SAAS,KAAK;CAErB;CAEA,OAAO,UAAU,MAAiB,OAAe,UAAsB,CAAC,GAAc;EACrF,OAAO,IAAI,UAAU,MAAM,OAAO,OAAO;CAC1C;CAEA,WAAW,OAAqB;EAC/B,IAAI,MAAM,WAAW,IACpB,KAAK,SAAS,KAAK;OAEnB,MAAM,IAAI,MAAM,uCAAuC;CAEzD;CAEA,cAAsB;EACrB,OAAO,KAAK,SAAS;CACtB;AACD;AAGA,SAAgB,QAAQ,MAAkB,MAAuC;CAChF,OAAO,KAAK,MAAM,QAAQ,IAAI,SAAS,IAAI;AAC5C;AAEA,SAAgB,eAAe,MAAkB,MAAyC;CACzF,MAAM,MAAM,KAAK,MAAM,QAAQ,IAAI,SAAS,IAAI;CAChD,IAAI,OAAO,YAAY,OAAO,cAAc,OAAO,aAAa,KAC/D,OAAO;AAGT"}
@@ -0,0 +1,24 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { a as StringTag, l as UIntTag, s as UByteTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/UpdateCategoryRequest.ts
5
+ /**
6
+ * Update Category Request - Update an existing category
7
+ */
8
+ var UpdateCategoryRequest = class extends Request {
9
+ constructor(id, category) {
10
+ super(66);
11
+ const subtags = [
12
+ new StringTag(4354, category.name),
13
+ new StringTag(4355, category.path),
14
+ new StringTag(4356, category.comment),
15
+ new UIntTag(4357, category.color),
16
+ new UByteTag(4358, category.priority)
17
+ ];
18
+ this.addTag(new UIntTag(4353, id, subtags));
19
+ }
20
+ };
21
+ //#endregion
22
+ export { UpdateCategoryRequest };
23
+
24
+ //# sourceMappingURL=UpdateCategoryRequest-CgzH7SxP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateCategoryRequest-CgzH7SxP.mjs","names":[],"sources":["../src/request/UpdateCategoryRequest.ts"],"sourcesContent":["/**\n * Update Category Request - Update an existing 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 UpdateCategoryRequest extends Request {\n\tconstructor(id: number, category: AmuleCategory) {\n\t\tsuper(ECOpCode.EC_OP_UPDATE_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, id, subtags));\n\t}\n}\n"],"mappings":";;;;;;;AASA,IAAa,wBAAb,cAA2C,QAAQ;CAClD,YAAY,IAAY,UAAyB;EAChD,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,IAAI,OAAO,CAAC;CAChE;AACD"}
@@ -0,0 +1,17 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { s as UByteTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/UpdateRequest.ts
5
+ /**
6
+ * Update Request - Get incremental updates for files, clients, and servers
7
+ */
8
+ var UpdateRequest = class extends Request {
9
+ constructor(detailLevel = 4) {
10
+ super(82);
11
+ this.addTag(new UByteTag(4, detailLevel));
12
+ }
13
+ };
14
+ //#endregion
15
+ export { UpdateRequest };
16
+
17
+ //# sourceMappingURL=UpdateRequest-Bunl73Ga.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateRequest-Bunl73Ga.mjs","names":[],"sources":["../src/request/UpdateRequest.ts"],"sourcesContent":["/**\n * Update Request - Get incremental updates for files, clients, and servers\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName, ECDetailLevel } from '../ec/Codes';\nimport { UByteTag } from '../ec/tag/Tag';\n\nexport class UpdateRequest extends Request {\n\tconstructor(detailLevel: ECDetailLevel = ECDetailLevel.EC_DETAIL_INC_UPDATE) {\n\t\tsuper(ECOpCode.EC_OP_GET_UPDATE);\n\n\t\tthis.addTag(new UByteTag(ECTagName.EC_TAG_DETAIL_LEVEL, detailLevel));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,gBAAb,cAAmC,QAAQ;CAC1C,YAAY,cAAA,GAAiE;EAC5E,MAAA,EAA+B;EAE/B,KAAK,OAAO,IAAI,SAAA,GAAwC,WAAW,CAAC;CACrE;AACD"}