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 @@
1
+ {"version":3,"file":"PreferencesDetailsResponse-BjMxbvVY.mjs","names":[],"sources":["../src/response/PreferencesDetailsResponse.ts"],"sourcesContent":["import { EcPrefs, ECTagName } from '../ec/Codes';\nimport { Packet } from '../ec/packet/Packet';\nimport { findNumericTag, findTag, type Tag } from '../ec/tag/Tag';\nimport type { AmulePreferences, AmulePrefsConnection, AmulePrefsGeneral, AmulePrefsSecurity, AmulePrefsServers } from '../types/preferences';\n\nexport class PreferencesDetailsResponse {\n\tconstructor(public readonly preferences: AmulePreferences) {}\n}\n\nfunction getNestedTag(parent: Tag<any> | undefined, name: ECTagName): Tag<any> | undefined {\n\tif (!parent?.nestedTags) {\n\t\treturn undefined;\n\t}\n\treturn findTag(parent.nestedTags, name);\n}\n\nfunction getNestedNumber(parent: Tag<any> | undefined, name: ECTagName, fallback: number): number {\n\tif (!parent?.nestedTags) {\n\t\treturn fallback;\n\t}\n\n\tconst numeric = findNumericTag(parent.nestedTags, name);\n\tif (numeric) {\n\t\treturn Number(numeric.getValue());\n\t}\n\n\tconst tag = findTag(parent.nestedTags, name);\n\tif (!tag) {\n\t\treturn fallback;\n\t}\n\n\tconst value = tag.getValue();\n\tif (typeof value === 'number') {\n\t\treturn value;\n\t}\n\tif (typeof value === 'bigint') {\n\t\treturn Number(value);\n\t}\n\treturn fallback;\n}\n\nfunction getNestedBool(parent: Tag<any> | undefined, name: ECTagName, fallback: boolean): boolean {\n\tconst tag = getNestedTag(parent, name);\n\tif (!tag) {\n\t\treturn fallback;\n\t}\n\n\tconst value = tag.getValue();\n\tif (typeof value === 'boolean') {\n\t\treturn value;\n\t}\n\tif (typeof value === 'number') {\n\t\treturn value !== 0;\n\t}\n\tif (typeof value === 'bigint') {\n\t\treturn value !== 0n;\n\t}\n\tif (Buffer.isBuffer(value)) {\n\t\treturn value.length === 0 || value.some((byte) => byte !== 0);\n\t}\n\n\t// For empty/presence tags in EC protocol, presence means true.\n\treturn true;\n}\n\nfunction getNestedString(parent: Tag<any> | undefined, name: ECTagName, fallback: string): string {\n\tconst tag = getNestedTag(parent, name);\n\tif (!tag) {\n\t\treturn fallback;\n\t}\n\n\tconst value = tag.getValue();\n\treturn typeof value === 'string' ? value : fallback;\n}\n\nexport class PreferencesDetailsResponseParser {\n\tstatic fromPacket(packet: Packet): PreferencesDetailsResponse {\n\t\tconst generalTag = findTag(packet.tags, ECTagName.EC_TAG_PREFS_GENERAL);\n\t\tconst connectionTag = findTag(packet.tags, ECTagName.EC_TAG_PREFS_CONNECTIONS);\n\t\tconst serversTag = findTag(packet.tags, ECTagName.EC_TAG_PREFS_SERVERS);\n\t\tconst securityTag = findTag(packet.tags, ECTagName.EC_TAG_PREFS_SECURITY);\n\n\t\tconst general: AmulePrefsGeneral = {\n\t\t\tuserNick: getNestedString(generalTag, ECTagName.EC_TAG_USER_NICK, ''),\n\t\t\tcheckNewVersion: getNestedBool(generalTag, ECTagName.EC_TAG_GENERAL_CHECK_NEW_VERSION, false),\n\t\t};\n\n\t\tconst connection: AmulePrefsConnection = {\n\t\t\tuploadCapacity: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_UL_CAP, 0),\n\t\t\tdownloadCapacity: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_DL_CAP, 0),\n\t\t\tmaxUploadSpeed: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_MAX_UL, 0),\n\t\t\tmaxDownloadSpeed: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_MAX_DL, 0),\n\t\t\tslotAllocation: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_SLOT_ALLOCATION, 2),\n\t\t\ttcpPort: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_TCP_PORT, 4662),\n\t\t\tudpPort: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_UDP_PORT, 4672),\n\t\t\tmaxFileSources: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_MAX_FILE_SOURCES, 300),\n\t\t\tmaxConnections: getNestedNumber(connectionTag, ECTagName.EC_TAG_CONN_MAX_CONN, 500),\n\t\t\tautoconnect: getNestedBool(connectionTag, ECTagName.EC_TAG_CONN_AUTOCONNECT, false),\n\t\t\treconnect: getNestedBool(connectionTag, ECTagName.EC_TAG_CONN_RECONNECT, false),\n\t\t\tnetworkED2K: getNestedBool(connectionTag, ECTagName.EC_TAG_NETWORK_ED2K, true),\n\t\t\tnetworkKademlia: getNestedBool(connectionTag, ECTagName.EC_TAG_NETWORK_KADEMLIA, false),\n\t\t};\n\n\t\tconst servers: AmulePrefsServers = {\n\t\t\tremoveDead: getNestedBool(serversTag, ECTagName.EC_TAG_SERVERS_REMOVE_DEAD, true),\n\t\t\tdeadRetries: getNestedNumber(serversTag, ECTagName.EC_TAG_SERVERS_DEAD_SERVER_RETRIES, 3),\n\t\t\tuseScoreSystem: getNestedBool(serversTag, ECTagName.EC_TAG_SERVERS_USE_SCORE_SYSTEM, true),\n\t\t\tsmartIdCheck: getNestedBool(serversTag, ECTagName.EC_TAG_SERVERS_SMART_ID_CHECK, true),\n\t\t\tupdateUrl: getNestedString(serversTag, ECTagName.EC_TAG_SERVERS_UPDATE_URL, ''),\n\t\t};\n\n\t\tconst security: AmulePrefsSecurity = {\n\t\t\tcanSeeShares: getNestedNumber(securityTag, ECTagName.EC_TAG_SECURITY_CAN_SEE_SHARES, 2),\n\t\t\tipFilterClients: getNestedBool(securityTag, ECTagName.EC_TAG_IPFILTER_CLIENTS, true),\n\t\t\tipFilterServers: getNestedBool(securityTag, ECTagName.EC_TAG_IPFILTER_SERVERS, true),\n\t\t\tipFilterAutoUpdate: getNestedBool(securityTag, ECTagName.EC_TAG_IPFILTER_AUTO_UPDATE, false),\n\t\t\tipFilterUpdateUrl: getNestedString(securityTag, ECTagName.EC_TAG_IPFILTER_UPDATE_URL, ''),\n\t\t\tipFilterLevel: getNestedNumber(securityTag, ECTagName.EC_TAG_IPFILTER_LEVEL, 127),\n\t\t\tfilterLan: getNestedBool(securityTag, ECTagName.EC_TAG_IPFILTER_FILTER_LAN, true),\n\t\t\tuseSecIdent: getNestedBool(securityTag, ECTagName.EC_TAG_SECURITY_USE_SECIDENT, true),\n\t\t\tobfuscationSupported: getNestedBool(securityTag, ECTagName.EC_TAG_SECURITY_OBFUSCATION_SUPPORTED, true),\n\t\t\tobfuscationRequested: getNestedBool(securityTag, ECTagName.EC_TAG_SECURITY_OBFUSCATION_REQUESTED, false),\n\t\t\tobfuscationRequired: getNestedBool(securityTag, ECTagName.EC_TAG_SECURITY_OBFUSCATION_REQUIRED, false),\n\t\t};\n\n\t\treturn new PreferencesDetailsResponse({ general, connection, servers, security });\n\t}\n\n\tstatic preferenceMaskForAllSections(): EcPrefs {\n\t\treturn EcPrefs.EC_PREFS_GENERAL | EcPrefs.EC_PREFS_CONNECTIONS | EcPrefs.EC_PREFS_SERVERS | EcPrefs.EC_PREFS_SECURITY;\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag, p as findTag } from "./Tag-CZF6BRMY.mjs";
3
+ //#region src/response/PreferencesResponse.ts
4
+ var PreferencesResponse = class {
5
+ categories;
6
+ constructor(categories) {
7
+ this.categories = categories;
8
+ }
9
+ };
10
+ var PreferencesResponseParser = class {
11
+ static fromPacket(packet) {
12
+ const categories = [];
13
+ const prefsCategoriesTag = findTag(packet.tags, 4352);
14
+ if (prefsCategoriesTag && prefsCategoriesTag.nestedTags) {
15
+ for (const categoryTag of prefsCategoriesTag.nestedTags) if (categoryTag.name === 4353) {
16
+ const nestedTags = categoryTag.nestedTags || [];
17
+ const idTag = categoryTag;
18
+ const nameTag = findTag(nestedTags, 4354);
19
+ const pathTag = findTag(nestedTags, 4355);
20
+ const commentTag = findTag(nestedTags, 4356);
21
+ const colorTag = findNumericTag(nestedTags, 4357);
22
+ const priorityTag = findNumericTag(nestedTags, 4358);
23
+ if (nameTag) categories.push({
24
+ id: idTag ? Number(idTag.getInt()) : 0,
25
+ name: nameTag.getValue() || "",
26
+ path: pathTag ? pathTag.getValue() : "",
27
+ comment: commentTag ? commentTag.getValue() : "",
28
+ color: colorTag ? Number(colorTag.getInt()) : 0,
29
+ priority: priorityTag ? Number(priorityTag.getInt()) : 0
30
+ });
31
+ }
32
+ }
33
+ return new PreferencesResponse(categories);
34
+ }
35
+ };
36
+ //#endregion
37
+ export { PreferencesResponseParser };
38
+
39
+ //# sourceMappingURL=PreferencesResponse-Dth-n2sA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreferencesResponse-Dth-n2sA.mjs","names":[],"sources":["../src/response/PreferencesResponse.ts"],"sourcesContent":["/**\n * Preferences Response - Contains aMule preferences, including categories\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findTag, findNumericTag, NumericTag } from '../ec/tag/Tag';\nimport type { AmuleCategory } from '../model';\n\nexport class PreferencesResponse {\n\tconstructor(public readonly categories: AmuleCategory[]) {}\n}\n\nexport class PreferencesResponseParser {\n\tstatic fromPacket(packet: Packet): PreferencesResponse {\n\t\tconst categories: AmuleCategory[] = [];\n\n\t\tconst prefsCategoriesTag = findTag(packet.tags, ECTagName.EC_TAG_PREFS_CATEGORIES);\n\n\t\tif (prefsCategoriesTag && prefsCategoriesTag.nestedTags) {\n\t\t\tfor (const categoryTag of prefsCategoriesTag.nestedTags) {\n\t\t\t\tif (categoryTag.name === ECTagName.EC_TAG_CATEGORY) {\n\t\t\t\t\tconst nestedTags = categoryTag.nestedTags || [];\n\n\t\t\t\t\tconst idTag = categoryTag;\n\t\t\t\t\tconst nameTag = findTag(nestedTags, ECTagName.EC_TAG_CATEGORY_TITLE);\n\t\t\t\t\tconst pathTag = findTag(nestedTags, ECTagName.EC_TAG_CATEGORY_PATH);\n\t\t\t\t\tconst commentTag = findTag(nestedTags, ECTagName.EC_TAG_CATEGORY_COMMENT);\n\t\t\t\t\tconst colorTag = findNumericTag(nestedTags, ECTagName.EC_TAG_CATEGORY_COLOR);\n\t\t\t\t\tconst priorityTag = findNumericTag(nestedTags, ECTagName.EC_TAG_CATEGORY_PRIO);\n\n\t\t\t\t\tif (nameTag) {\n\t\t\t\t\t\tcategories.push({\n\t\t\t\t\t\t\tid: idTag ? Number((idTag as unknown as NumericTag).getInt()) : 0,\n\t\t\t\t\t\t\tname: nameTag.getValue() || '',\n\t\t\t\t\t\t\tpath: pathTag ? pathTag.getValue() : '',\n\t\t\t\t\t\t\tcomment: commentTag ? commentTag.getValue() : '',\n\t\t\t\t\t\t\tcolor: colorTag ? Number((colorTag as unknown as NumericTag).getInt()) : 0,\n\t\t\t\t\t\t\tpriority: priorityTag ? Number((priorityTag as unknown as NumericTag).getInt()) : 0,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new PreferencesResponse(categories);\n\t}\n}\n"],"mappings":";;;AASA,IAAa,sBAAb,MAAiC;CACJ;CAA5B,YAAY,YAA6C;EAA7B,KAAA,aAAA;CAA8B;AAC3D;AAEA,IAAa,4BAAb,MAAuC;CACtC,OAAO,WAAW,QAAqC;EACtD,MAAM,aAA8B,CAAC;EAErC,MAAM,qBAAqB,QAAQ,OAAO,MAAA,IAAuC;EAEjF,IAAI,sBAAsB,mBAAmB;QACvC,MAAM,eAAe,mBAAmB,YAC5C,IAAI,YAAY,SAAA,MAAoC;IACnD,MAAM,aAAa,YAAY,cAAc,CAAC;IAE9C,MAAM,QAAQ;IACd,MAAM,UAAU,QAAQ,YAAA,IAA2C;IACnE,MAAM,UAAU,QAAQ,YAAA,IAA0C;IAClE,MAAM,aAAa,QAAQ,YAAA,IAA6C;IACxE,MAAM,WAAW,eAAe,YAAA,IAA2C;IAC3E,MAAM,cAAc,eAAe,YAAA,IAA0C;IAE7E,IAAI,SACH,WAAW,KAAK;KACf,IAAI,QAAQ,OAAQ,MAAgC,OAAO,CAAC,IAAI;KAChE,MAAM,QAAQ,SAAS,KAAK;KAC5B,MAAM,UAAU,QAAQ,SAAS,IAAI;KACrC,SAAS,aAAa,WAAW,SAAS,IAAI;KAC9C,OAAO,WAAW,OAAQ,SAAmC,OAAO,CAAC,IAAI;KACzE,UAAU,cAAc,OAAQ,YAAsC,OAAO,CAAC,IAAI;IACnF,CAAC;GAEH;;EAIF,OAAO,IAAI,oBAAoB,UAAU;CAC1C;AACD"}
@@ -0,0 +1,15 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ //#region src/request/ReloadSharedFilesRequest.ts
4
+ /**
5
+ * Reload Shared Files Request - Reload shared files list
6
+ */
7
+ var ReloadSharedFilesRequest = class extends Request {
8
+ constructor() {
9
+ super(35);
10
+ }
11
+ };
12
+ //#endregion
13
+ export { ReloadSharedFilesRequest };
14
+
15
+ //# sourceMappingURL=ReloadSharedFilesRequest-CPwAEJYG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReloadSharedFilesRequest-CPwAEJYG.mjs","names":[],"sources":["../src/request/ReloadSharedFilesRequest.ts"],"sourcesContent":["/**\n * Reload Shared Files Request - Reload shared files list\n */\n\nimport { Request } from './Request';\nimport { ECOpCode } from '../ec/Codes';\n\nexport class ReloadSharedFilesRequest extends Request {\n\tconstructor() {\n\t\tsuper(ECOpCode.EC_OP_SHAREDFILES_RELOAD);\n\t}\n}\n"],"mappings":";;;;;;AAOA,IAAa,2BAAb,cAA8C,QAAQ;CACrD,cAAc;EACb,MAAA,EAAuC;CACxC;AACD"}
@@ -0,0 +1,160 @@
1
+ //#region src/ec/packet/Flags.ts
2
+ /**
3
+ * Packet flags for EC protocol
4
+ */
5
+ var Flags = class Flags {
6
+ static FLAG_ACCEPTS = 16;
7
+ static FLAG_ZLIB = 1;
8
+ static FLAG_UTF8_NUMBERS = 2;
9
+ static FLAG_ALWAYS_SET = 32;
10
+ flags;
11
+ constructor(flags) {
12
+ this.flags = flags ?? 0;
13
+ }
14
+ /**
15
+ * Create flags from buffer
16
+ */
17
+ static fromBuffer(buffer, offset = 0) {
18
+ return new Flags(buffer.readUInt32BE(offset));
19
+ }
20
+ /**
21
+ * Write flags to buffer
22
+ */
23
+ writeToBuffer(buffer, offset = 0) {
24
+ buffer.writeUInt32BE(this.flags, offset);
25
+ }
26
+ /**
27
+ * Check if UTF-8 number encoding is supported/accepted
28
+ */
29
+ isUtf8NumbersAccepted() {
30
+ return (this.flags & Flags.FLAG_ACCEPTS) > 0 && (this.flags & Flags.FLAG_UTF8_NUMBERS) > 0;
31
+ }
32
+ /**
33
+ * Check if ZLIB compression is supported/accepted
34
+ */
35
+ isZlibAccepted() {
36
+ return (this.flags & Flags.FLAG_ACCEPTS) > 0 && (this.flags & Flags.FLAG_ZLIB) > 0;
37
+ }
38
+ /**
39
+ * Check if UTF-8 number encoding is used
40
+ */
41
+ isUtf8Numbers() {
42
+ return (this.flags & Flags.FLAG_UTF8_NUMBERS) > 0;
43
+ }
44
+ /**
45
+ * Check if ZLIB compression is used
46
+ */
47
+ isZlib() {
48
+ return (this.flags & Flags.FLAG_ZLIB) > 0;
49
+ }
50
+ /**
51
+ * Create flags accepting UTF-8 numbers and ZLIB
52
+ */
53
+ static accept() {
54
+ return new Flags(Flags.FLAG_ACCEPTS | Flags.FLAG_UTF8_NUMBERS | Flags.FLAG_ZLIB | Flags.FLAG_ALWAYS_SET);
55
+ }
56
+ /**
57
+ * Create flags using UTF-8 numbers
58
+ */
59
+ static useUtf8Numbers() {
60
+ return new Flags(Flags.FLAG_UTF8_NUMBERS | Flags.FLAG_ALWAYS_SET);
61
+ }
62
+ /**
63
+ * Create flags without UTF-8 numbers (required for search)
64
+ */
65
+ static noUtf8() {
66
+ return new Flags(Flags.FLAG_ALWAYS_SET);
67
+ }
68
+ /**
69
+ * Create flags using ZLIB compression
70
+ */
71
+ static useZlib() {
72
+ return new Flags(Flags.FLAG_ZLIB | Flags.FLAG_ALWAYS_SET);
73
+ }
74
+ /**
75
+ * Get numeric value of flags
76
+ */
77
+ getValue() {
78
+ return this.flags;
79
+ }
80
+ };
81
+ //#endregion
82
+ //#region src/ec/packet/Packet.ts
83
+ var Packet = class Packet {
84
+ opCode;
85
+ flags;
86
+ tags;
87
+ static EC_CURRENT_PROTOCOL_VERSION = 516;
88
+ constructor(opCode, flags = new Flags(), tags = []) {
89
+ this.opCode = opCode;
90
+ this.flags = flags;
91
+ this.tags = tags;
92
+ }
93
+ /**
94
+ * Add a tag to the packet
95
+ */
96
+ addTag(tag) {
97
+ this.tags.push(tag);
98
+ return this;
99
+ }
100
+ /**
101
+ * Add multiple tags to the packet
102
+ */
103
+ addTags(tags) {
104
+ this.tags.push(...tags);
105
+ return this;
106
+ }
107
+ /**
108
+ * Get protocol version
109
+ */
110
+ static getProtocolVersion() {
111
+ return Packet.EC_CURRENT_PROTOCOL_VERSION;
112
+ }
113
+ /**
114
+ * Find a tag by name
115
+ */
116
+ findTag(tagName) {
117
+ return this.tags.find((tag) => tag.name === tagName);
118
+ }
119
+ /**
120
+ * Get all tags with a specific name
121
+ */
122
+ findAllTags(tagName) {
123
+ return this.tags.filter((tag) => tag.name === tagName);
124
+ }
125
+ /**
126
+ * Check if packet has a specific tag
127
+ */
128
+ hasTag(tagName) {
129
+ return this.findTag(tagName) !== void 0;
130
+ }
131
+ };
132
+ //#endregion
133
+ //#region src/request/Request.ts
134
+ /**
135
+ * Base Request class
136
+ */
137
+ var Request = class {
138
+ opCode;
139
+ tags = [];
140
+ constructor(opCode) {
141
+ this.opCode = opCode;
142
+ }
143
+ /**
144
+ * Add a tag to the request
145
+ */
146
+ addTag(tag) {
147
+ this.tags.push(tag);
148
+ }
149
+ /**
150
+ * Build the packet for this request
151
+ */
152
+ buildPacket() {
153
+ const flags = Flags.useUtf8Numbers();
154
+ return new Packet(this.opCode, flags, this.tags);
155
+ }
156
+ };
157
+ //#endregion
158
+ export { Packet as n, Flags as r, Request as t };
159
+
160
+ //# sourceMappingURL=Request-C0UUuQIX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Request-C0UUuQIX.mjs","names":[],"sources":["../src/ec/packet/Flags.ts","../src/ec/packet/Packet.ts","../src/request/Request.ts"],"sourcesContent":["/**\n * Packet flags for EC protocol\n */\n\nexport class Flags {\n\tprivate static readonly FLAG_ACCEPTS = 0x10;\n\tprivate static readonly FLAG_ZLIB = 0x01;\n\tprivate static readonly FLAG_UTF8_NUMBERS = 0x02;\n\tprivate static readonly FLAG_ALWAYS_SET = 0x20; // Bit 5 always set to distinguish from older clients\n\n\tprivate readonly flags: number;\n\n\tconstructor(flags?: number) {\n\t\tthis.flags = flags ?? 0;\n\t}\n\n\t/**\n\t * Create flags from buffer\n\t */\n\tstatic fromBuffer(buffer: Buffer, offset: number = 0): Flags {\n\t\tconst flags = buffer.readUInt32BE(offset);\n\t\treturn new Flags(flags);\n\t}\n\n\t/**\n\t * Write flags to buffer\n\t */\n\twriteToBuffer(buffer: Buffer, offset: number = 0): void {\n\t\tbuffer.writeUInt32BE(this.flags, offset);\n\t}\n\n\t/**\n\t * Check if UTF-8 number encoding is supported/accepted\n\t */\n\tisUtf8NumbersAccepted(): boolean {\n\t\treturn (this.flags & Flags.FLAG_ACCEPTS) > 0 && (this.flags & Flags.FLAG_UTF8_NUMBERS) > 0;\n\t}\n\n\t/**\n\t * Check if ZLIB compression is supported/accepted\n\t */\n\tisZlibAccepted(): boolean {\n\t\treturn (this.flags & Flags.FLAG_ACCEPTS) > 0 && (this.flags & Flags.FLAG_ZLIB) > 0;\n\t}\n\n\t/**\n\t * Check if UTF-8 number encoding is used\n\t */\n\tisUtf8Numbers(): boolean {\n\t\treturn (this.flags & Flags.FLAG_UTF8_NUMBERS) > 0;\n\t}\n\n\t/**\n\t * Check if ZLIB compression is used\n\t */\n\tisZlib(): boolean {\n\t\treturn (this.flags & Flags.FLAG_ZLIB) > 0;\n\t}\n\n\t/**\n\t * Create flags accepting UTF-8 numbers and ZLIB\n\t */\n\tstatic accept(): Flags {\n\t\treturn new Flags(Flags.FLAG_ACCEPTS | Flags.FLAG_UTF8_NUMBERS | Flags.FLAG_ZLIB | Flags.FLAG_ALWAYS_SET);\n\t}\n\n\t/**\n\t * Create flags using UTF-8 numbers\n\t */\n\tstatic useUtf8Numbers(): Flags {\n\t\treturn new Flags(Flags.FLAG_UTF8_NUMBERS | Flags.FLAG_ALWAYS_SET);\n\t}\n\n\t/**\n\t * Create flags without UTF-8 numbers (required for search)\n\t */\n\tstatic noUtf8(): Flags {\n\t\treturn new Flags(Flags.FLAG_ALWAYS_SET);\n\t}\n\n\t/**\n\t * Create flags using ZLIB compression\n\t */\n\tstatic useZlib(): Flags {\n\t\treturn new Flags(Flags.FLAG_ZLIB | Flags.FLAG_ALWAYS_SET);\n\t}\n\n\t/**\n\t * Get numeric value of flags\n\t */\n\tgetValue(): number {\n\t\treturn this.flags;\n\t}\n}\n","/**\n * EC Packet structure\n */\n\nimport { ECOpCode } from '../Codes';\nimport { Flags } from './Flags';\nimport type { Tag } from '../tag/Tag';\n\nexport class Packet {\n\tprivate static readonly EC_CURRENT_PROTOCOL_VERSION = 0x0204;\n\n\tconstructor(\n\t\tpublic readonly opCode: ECOpCode,\n\t\tpublic readonly flags: Flags = new Flags(),\n\t\tpublic readonly tags: Tag<any>[] = []\n\t) {}\n\n\t/**\n\t * Add a tag to the packet\n\t */\n\taddTag(tag: Tag<any>): this {\n\t\tthis.tags.push(tag);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add multiple tags to the packet\n\t */\n\taddTags(tags: Tag<any>[]): this {\n\t\tthis.tags.push(...tags);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Get protocol version\n\t */\n\tstatic getProtocolVersion(): number {\n\t\treturn Packet.EC_CURRENT_PROTOCOL_VERSION;\n\t}\n\n\t/**\n\t * Find a tag by name\n\t */\n\tfindTag(tagName: number): Tag<any> | undefined {\n\t\treturn this.tags.find((tag) => tag.name === tagName);\n\t}\n\n\t/**\n\t * Get all tags with a specific name\n\t */\n\tfindAllTags(tagName: number): Tag<any>[] {\n\t\treturn this.tags.filter((tag) => tag.name === tagName);\n\t}\n\n\t/**\n\t * Check if packet has a specific tag\n\t */\n\thasTag(tagName: number): boolean {\n\t\treturn this.findTag(tagName) !== undefined;\n\t}\n}\n","/**\n * Base Request class\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { Flags } from '../ec/packet/Flags';\nimport { ECOpCode } from '../ec/Codes';\nimport type { Tag } from '../ec/tag/Tag';\n\nexport abstract class Request {\n\tprotected readonly opCode: ECOpCode;\n\tprotected readonly tags: Tag<any>[] = [];\n\n\tconstructor(opCode: ECOpCode) {\n\t\tthis.opCode = opCode;\n\t}\n\n\t/**\n\t * Add a tag to the request\n\t */\n\tprotected addTag(tag: Tag<any>): void {\n\t\tthis.tags.push(tag);\n\t}\n\n\t/**\n\t * Build the packet for this request\n\t */\n\tbuildPacket(): Packet {\n\t\tconst flags = Flags.useUtf8Numbers();\n\t\treturn new Packet(this.opCode, flags, this.tags);\n\t}\n}\n"],"mappings":";;;;AAIA,IAAa,QAAb,MAAa,MAAM;CAClB,OAAwB,eAAe;CACvC,OAAwB,YAAY;CACpC,OAAwB,oBAAoB;CAC5C,OAAwB,kBAAkB;CAE1C;CAEA,YAAY,OAAgB;EAC3B,KAAK,QAAQ,SAAS;CACvB;;;;CAKA,OAAO,WAAW,QAAgB,SAAiB,GAAU;EAE5D,OAAO,IAAI,MADG,OAAO,aAAa,MACb,CAAC;CACvB;;;;CAKA,cAAc,QAAgB,SAAiB,GAAS;EACvD,OAAO,cAAc,KAAK,OAAO,MAAM;CACxC;;;;CAKA,wBAAiC;EAChC,QAAQ,KAAK,QAAQ,MAAM,gBAAgB,MAAM,KAAK,QAAQ,MAAM,qBAAqB;CAC1F;;;;CAKA,iBAA0B;EACzB,QAAQ,KAAK,QAAQ,MAAM,gBAAgB,MAAM,KAAK,QAAQ,MAAM,aAAa;CAClF;;;;CAKA,gBAAyB;EACxB,QAAQ,KAAK,QAAQ,MAAM,qBAAqB;CACjD;;;;CAKA,SAAkB;EACjB,QAAQ,KAAK,QAAQ,MAAM,aAAa;CACzC;;;;CAKA,OAAO,SAAgB;EACtB,OAAO,IAAI,MAAM,MAAM,eAAe,MAAM,oBAAoB,MAAM,YAAY,MAAM,eAAe;CACxG;;;;CAKA,OAAO,iBAAwB;EAC9B,OAAO,IAAI,MAAM,MAAM,oBAAoB,MAAM,eAAe;CACjE;;;;CAKA,OAAO,SAAgB;EACtB,OAAO,IAAI,MAAM,MAAM,eAAe;CACvC;;;;CAKA,OAAO,UAAiB;EACvB,OAAO,IAAI,MAAM,MAAM,YAAY,MAAM,eAAe;CACzD;;;;CAKA,WAAmB;EAClB,OAAO,KAAK;CACb;AACD;;;ACrFA,IAAa,SAAb,MAAa,OAAO;CAIF;CACA;CACA;CALjB,OAAwB,8BAA8B;CAEtD,YACC,QACA,QAA+B,IAAI,MAAM,GACzC,OAAmC,CAAC,GACnC;EAHe,KAAA,SAAA;EACA,KAAA,QAAA;EACA,KAAA,OAAA;CACd;;;;CAKH,OAAO,KAAqB;EAC3B,KAAK,KAAK,KAAK,GAAG;EAClB,OAAO;CACR;;;;CAKA,QAAQ,MAAwB;EAC/B,KAAK,KAAK,KAAK,GAAG,IAAI;EACtB,OAAO;CACR;;;;CAKA,OAAO,qBAA6B;EACnC,OAAO,OAAO;CACf;;;;CAKA,QAAQ,SAAuC;EAC9C,OAAO,KAAK,KAAK,MAAM,QAAQ,IAAI,SAAS,OAAO;CACpD;;;;CAKA,YAAY,SAA6B;EACxC,OAAO,KAAK,KAAK,QAAQ,QAAQ,IAAI,SAAS,OAAO;CACtD;;;;CAKA,OAAO,SAA0B;EAChC,OAAO,KAAK,QAAQ,OAAO,MAAM,KAAA;CAClC;AACD;;;;;;ACnDA,IAAsB,UAAtB,MAA8B;CAC7B;CACA,OAAsC,CAAC;CAEvC,YAAY,QAAkB;EAC7B,KAAK,SAAS;CACf;;;;CAKA,OAAiB,KAAqB;EACrC,KAAK,KAAK,KAAK,GAAG;CACnB;;;;CAKA,cAAsB;EACrB,MAAM,QAAQ,MAAM,eAAe;EACnC,OAAO,IAAI,OAAO,KAAK,QAAQ,OAAO,KAAK,IAAI;CAChD;AACD"}
@@ -0,0 +1,17 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag } from "./Tag-CZF6BRMY.mjs";
3
+ //#region src/response/SearchProgressResponse.ts
4
+ var SearchProgressResponse = class SearchProgressResponse {
5
+ progress;
6
+ constructor(progress) {
7
+ this.progress = progress;
8
+ }
9
+ static fromPacket(packet) {
10
+ const progressTag = findNumericTag(packet.tags, 1800);
11
+ return new SearchProgressResponse(progressTag ? Number(progressTag.getValue()) / 100 : 0);
12
+ }
13
+ };
14
+ //#endregion
15
+ export { SearchProgressResponse };
16
+
17
+ //# sourceMappingURL=SearchProgressResponse-Bputc9Ww.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchProgressResponse-Bputc9Ww.mjs","names":[],"sources":["../src/response/SearchProgressResponse.ts"],"sourcesContent":["/**\n * Search Progress Response - Search status/progress\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findNumericTag } from '../ec/tag/Tag';\n\nexport class SearchProgressResponse {\n\tconstructor(public readonly progress: number) {}\n\n\tstatic fromPacket(packet: Packet): SearchProgressResponse {\n\t\tconst progressTag = findNumericTag(packet.tags, ECTagName.EC_TAG_SEARCH_STATUS);\n\t\tconst progress = progressTag ? Number(progressTag.getValue()) / 100.0 : 0;\n\n\t\treturn new SearchProgressResponse(progress);\n\t}\n}\n"],"mappings":";;;AAQA,IAAa,yBAAb,MAAa,uBAAuB;CACP;CAA5B,YAAY,UAAkC;EAAlB,KAAA,WAAA;CAAmB;CAE/C,OAAO,WAAW,QAAwC;EACzD,MAAM,cAAc,eAAe,OAAO,MAAA,IAAoC;EAG9E,OAAO,IAAI,uBAFM,cAAc,OAAO,YAAY,SAAS,CAAC,IAAI,MAAQ,CAE9B;CAC3C;AACD"}
@@ -0,0 +1,57 @@
1
+ import { n as Packet, r as Flags, t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { a as StringTag, l as UIntTag, s as UByteTag, u as ULongTag } from "./Tag-CZF6BRMY.mjs";
4
+ import "./index.mjs";
5
+ //#region src/request/SearchRequest.ts
6
+ /**
7
+ * Search Request - Start a search
8
+ *
9
+ * In the EC protocol, search is structured as:
10
+ * - EC_TAG_SEARCH_TYPE (UByte) containing subtag:
11
+ * - EC_TAG_SEARCH_NAME (String) with the search query
12
+ * - Uses non-UTF8 flags (Flags.noUtf8())
13
+ */
14
+ var SearchRequest = class extends Request {
15
+ query;
16
+ searchType;
17
+ filters;
18
+ constructor(query, searchType = 0, filters) {
19
+ super(38);
20
+ this.query = query;
21
+ this.searchType = searchType;
22
+ this.filters = filters;
23
+ }
24
+ /**
25
+ * Override buildPacket to use non-UTF8 flags and correct tag structure
26
+ */
27
+ buildPacket() {
28
+ const flags = Flags.noUtf8();
29
+ const tags = this.buildTags();
30
+ return new Packet(this.opCode, flags, tags);
31
+ }
32
+ buildTags() {
33
+ const tags = [];
34
+ const searchTypeTag = new UByteTag(1793, this.convertSearchType(this.searchType), [new StringTag(1794, this.query)]);
35
+ tags.push(searchTypeTag);
36
+ if (this.filters) {
37
+ if (this.filters.minSize !== void 0) tags.push(new ULongTag(1795, BigInt(this.filters.minSize)));
38
+ if (this.filters.maxSize !== void 0) tags.push(new ULongTag(1796, BigInt(this.filters.maxSize)));
39
+ if (this.filters.fileType !== void 0) tags.push(new StringTag(1797, this.filters.fileType));
40
+ if (this.filters.extension !== void 0) tags.push(new StringTag(1798, this.filters.extension));
41
+ if (this.filters.availability !== void 0) tags.push(new UIntTag(1799, this.filters.availability));
42
+ }
43
+ return tags;
44
+ }
45
+ convertSearchType(searchType) {
46
+ switch (searchType) {
47
+ case 0: return 0;
48
+ case 1: return 1;
49
+ case 2: return 2;
50
+ case 3: return 3;
51
+ }
52
+ }
53
+ };
54
+ //#endregion
55
+ export { SearchRequest };
56
+
57
+ //# sourceMappingURL=SearchRequest-CNqz-K1Z.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchRequest-CNqz-K1Z.mjs","names":[],"sources":["../src/request/SearchRequest.ts"],"sourcesContent":["/**\n * Search Request - Start a search\n *\n * In the EC protocol, search is structured as:\n * - EC_TAG_SEARCH_TYPE (UByte) containing subtag:\n * - EC_TAG_SEARCH_NAME (String) with the search query\n * - Uses non-UTF8 flags (Flags.noUtf8())\n */\n\nimport { Request } from './Request';\nimport { Packet } from '../ec/packet/Packet';\nimport { Flags } from '../ec/packet/Flags';\nimport { ECOpCode, ECTagName, ECSearchType } from '../ec/Codes';\nimport { StringTag, UByteTag, UIntTag, ULongTag } from '../ec/tag/Tag';\nimport { SearchType } from '../model';\nimport type { SearchFilters } from '../types';\n\nexport class SearchRequest extends Request {\n\tprivate readonly query: string;\n\tprivate readonly searchType: SearchType;\n\tprivate readonly filters?: SearchFilters;\n\n\tconstructor(query: string, searchType: SearchType = SearchType.LOCAL, filters?: SearchFilters) {\n\t\tsuper(ECOpCode.EC_OP_SEARCH_START);\n\t\tthis.query = query;\n\t\tthis.searchType = searchType;\n\t\tthis.filters = filters;\n\t}\n\n\t/**\n\t * Override buildPacket to use non-UTF8 flags and correct tag structure\n\t */\n\tbuildPacket(): Packet {\n\t\tconst flags = Flags.noUtf8();\n\t\tconst tags = this.buildTags();\n\t\treturn new Packet(this.opCode, flags, tags);\n\t}\n\n\tprivate buildTags(): any[] {\n\t\tconst tags: any[] = [];\n\n\t\t// EC_TAG_SEARCH_TYPE with EC_TAG_SEARCH_NAME as subtag\n\t\tconst ecSearchType = this.convertSearchType(this.searchType);\n\t\tconst searchNameTag = new StringTag(ECTagName.EC_TAG_SEARCH_NAME, this.query);\n\t\tconst searchTypeTag = new UByteTag(ECTagName.EC_TAG_SEARCH_TYPE, ecSearchType, [searchNameTag]);\n\t\ttags.push(searchTypeTag);\n\n\t\t// Add filters if provided\n\t\tif (this.filters) {\n\t\t\tif (this.filters.minSize !== undefined) {\n\t\t\t\ttags.push(new ULongTag(ECTagName.EC_TAG_SEARCH_MIN_SIZE, BigInt(this.filters.minSize)));\n\t\t\t}\n\t\t\tif (this.filters.maxSize !== undefined) {\n\t\t\t\ttags.push(new ULongTag(ECTagName.EC_TAG_SEARCH_MAX_SIZE, BigInt(this.filters.maxSize)));\n\t\t\t}\n\t\t\tif (this.filters.fileType !== undefined) {\n\t\t\t\ttags.push(new StringTag(ECTagName.EC_TAG_SEARCH_FILE_TYPE, this.filters.fileType));\n\t\t\t}\n\t\t\tif (this.filters.extension !== undefined) {\n\t\t\t\ttags.push(new StringTag(ECTagName.EC_TAG_SEARCH_EXTENSION, this.filters.extension));\n\t\t\t}\n\t\t\tif (this.filters.availability !== undefined) {\n\t\t\t\ttags.push(new UIntTag(ECTagName.EC_TAG_SEARCH_AVAILABILITY, this.filters.availability));\n\t\t\t}\n\t\t}\n\n\t\treturn tags;\n\t}\n\n\tprivate convertSearchType(searchType: SearchType): ECSearchType {\n\t\tswitch (searchType) {\n\t\t\tcase SearchType.LOCAL:\n\t\t\t\treturn ECSearchType.EC_SEARCH_LOCAL;\n\t\t\tcase SearchType.GLOBAL:\n\t\t\t\treturn ECSearchType.EC_SEARCH_GLOBAL;\n\t\t\tcase SearchType.KAD:\n\t\t\t\treturn ECSearchType.EC_SEARCH_KAD;\n\t\t\tcase SearchType.WEB:\n\t\t\t\treturn ECSearchType.EC_SEARCH_WEB;\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,IAAa,gBAAb,cAAmC,QAAQ;CAC1C;CACA;CACA;CAEA,YAAY,OAAe,aAAA,GAA2C,SAAyB;EAC9F,MAAA,EAAiC;EACjC,KAAK,QAAQ;EACb,KAAK,aAAa;EAClB,KAAK,UAAU;CAChB;;;;CAKA,cAAsB;EACrB,MAAM,QAAQ,MAAM,OAAO;EAC3B,MAAM,OAAO,KAAK,UAAU;EAC5B,OAAO,IAAI,OAAO,KAAK,QAAQ,OAAO,IAAI;CAC3C;CAEA,YAA2B;EAC1B,MAAM,OAAc,CAAC;EAKrB,MAAM,gBAAgB,IAAI,SAAA,MAFL,KAAK,kBAAkB,KAAK,UAEgB,GAAc,CAAC,IADtD,UAAA,MAAwC,KAAK,KACS,CAAa,CAAC;EAC9F,KAAK,KAAK,aAAa;EAGvB,IAAI,KAAK,SAAS;GACjB,IAAI,KAAK,QAAQ,YAAY,KAAA,GAC5B,KAAK,KAAK,IAAI,SAAA,MAA2C,OAAO,KAAK,QAAQ,OAAO,CAAC,CAAC;GAEvF,IAAI,KAAK,QAAQ,YAAY,KAAA,GAC5B,KAAK,KAAK,IAAI,SAAA,MAA2C,OAAO,KAAK,QAAQ,OAAO,CAAC,CAAC;GAEvF,IAAI,KAAK,QAAQ,aAAa,KAAA,GAC7B,KAAK,KAAK,IAAI,UAAA,MAA6C,KAAK,QAAQ,QAAQ,CAAC;GAElF,IAAI,KAAK,QAAQ,cAAc,KAAA,GAC9B,KAAK,KAAK,IAAI,UAAA,MAA6C,KAAK,QAAQ,SAAS,CAAC;GAEnF,IAAI,KAAK,QAAQ,iBAAiB,KAAA,GACjC,KAAK,KAAK,IAAI,QAAA,MAA8C,KAAK,QAAQ,YAAY,CAAC;EAExF;EAEA,OAAO;CACR;CAEA,kBAA0B,YAAsC;EAC/D,QAAQ,YAAR;GACC,KAAA,GACC,OAAA;GACD,KAAA,GACC,OAAA;GACD,KAAA,GACC,OAAA;GACD,KAAA,GACC,OAAA;EACF;CACD;AACD"}
@@ -0,0 +1,15 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ //#region src/request/SearchResultsRequest.ts
4
+ /**
5
+ * Search Results Request - Get search results
6
+ */
7
+ var SearchResultsRequest = class extends Request {
8
+ constructor() {
9
+ super(40);
10
+ }
11
+ };
12
+ //#endregion
13
+ export { SearchResultsRequest };
14
+
15
+ //# sourceMappingURL=SearchResultsRequest-DKG508KF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchResultsRequest-DKG508KF.mjs","names":[],"sources":["../src/request/SearchResultsRequest.ts"],"sourcesContent":["/**\n * Search Results Request - Get search results\n */\n\nimport { Request } from './Request';\nimport { ECOpCode } from '../ec/Codes';\n\nexport class SearchResultsRequest extends Request {\n\tconstructor() {\n\t\tsuper(ECOpCode.EC_OP_SEARCH_RESULTS);\n\t}\n}\n"],"mappings":";;;;;;AAOA,IAAa,uBAAb,cAA0C,QAAQ;CACjD,cAAc;EACb,MAAA,EAAmC;CACpC;AACD"}
@@ -0,0 +1,31 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag, p as findTag } from "./Tag-CZF6BRMY.mjs";
3
+ //#region src/response/SearchResultsResponse.ts
4
+ var SearchResultsResponseParser = class {
5
+ static fromPacket(packet) {
6
+ const files = [];
7
+ const searchFileTags = packet.tags.filter((tag) => tag.name === 1792);
8
+ for (const fileTag of searchFileTags) {
9
+ const nestedTags = fileTag.nestedTags || [];
10
+ const fileNameTag = findTag(nestedTags, 769);
11
+ const hashTag = findTag(nestedTags, 798);
12
+ const sizeTag = findNumericTag(nestedTags, 771);
13
+ const sourceCountTag = findNumericTag(nestedTags, 778);
14
+ const completeSourcesTag = findNumericTag(nestedTags, 781);
15
+ const downloadStatusTag = findNumericTag(nestedTags, 776);
16
+ if (fileNameTag && hashTag) files.push({
17
+ fileName: fileNameTag.getValue(),
18
+ hash: hashTag.getValue(),
19
+ sizeFull: sizeTag ? Number(sizeTag.getLong()) : 0,
20
+ downloadStatus: downloadStatusTag ? downloadStatusTag.getInt() : 0,
21
+ completeSourceCount: completeSourcesTag ? completeSourcesTag.getInt() : 0,
22
+ sourceCount: sourceCountTag ? sourceCountTag.getInt() : 0
23
+ });
24
+ }
25
+ return { files };
26
+ }
27
+ };
28
+ //#endregion
29
+ export { SearchResultsResponseParser };
30
+
31
+ //# sourceMappingURL=SearchResultsResponse-ChNrKJ6_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchResultsResponse-ChNrKJ6_.mjs","names":[],"sources":["../src/response/SearchResultsResponse.ts"],"sourcesContent":["/**\n * Search Results Response - Search results\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findNumericTag, findTag } from '../ec/tag/Tag';\nimport type { SearchResultsResponse } from '../client/AmuleClient';\n\nexport class SearchResultsResponseParser {\n\tstatic fromPacket(packet: Packet): SearchResultsResponse {\n\t\tconst files: SearchResultsResponse['files'] = [];\n\n\t\t// Find all search result tags\n\t\tconst searchFileTags = packet.tags.filter((tag) => tag.name === ECTagName.EC_TAG_SEARCHFILE);\n\n\t\tfor (const fileTag of searchFileTags) {\n\t\t\tconst nestedTags = fileTag.nestedTags || [];\n\n\t\t\t// Extract file information\n\t\t\tconst fileNameTag = findTag(nestedTags, ECTagName.EC_TAG_PARTFILE_NAME);\n\t\t\tconst hashTag = findTag(nestedTags, ECTagName.EC_TAG_PARTFILE_HASH);\n\t\t\tconst sizeTag = findNumericTag(nestedTags, ECTagName.EC_TAG_PARTFILE_SIZE_FULL);\n\t\t\tconst sourceCountTag = findNumericTag(nestedTags, ECTagName.EC_TAG_PARTFILE_SOURCE_COUNT);\n\t\t\tconst completeSourcesTag = findNumericTag(nestedTags, ECTagName.EC_TAG_PARTFILE_SOURCE_COUNT_XFER);\n\t\t\tconst downloadStatusTag = findNumericTag(nestedTags, ECTagName.EC_TAG_PARTFILE_STATUS);\n\n\t\t\tif (fileNameTag && hashTag) {\n\t\t\t\tfiles.push({\n\t\t\t\t\tfileName: fileNameTag.getValue(),\n\t\t\t\t\thash: hashTag.getValue(),\n\t\t\t\t\tsizeFull: sizeTag ? Number(sizeTag.getLong()) : 0,\n\t\t\t\t\tdownloadStatus: downloadStatusTag ? downloadStatusTag.getInt() : 0,\n\t\t\t\t\tcompleteSourceCount: completeSourcesTag ? completeSourcesTag.getInt() : 0,\n\t\t\t\t\tsourceCount: sourceCountTag ? sourceCountTag.getInt() : 0,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn { files };\n\t}\n}\n"],"mappings":";;;AASA,IAAa,8BAAb,MAAyC;CACxC,OAAO,WAAW,QAAuC;EACxD,MAAM,QAAwC,CAAC;EAG/C,MAAM,iBAAiB,OAAO,KAAK,QAAQ,QAAQ,IAAI,SAAA,IAAoC;EAE3F,KAAK,MAAM,WAAW,gBAAgB;GACrC,MAAM,aAAa,QAAQ,cAAc,CAAC;GAG1C,MAAM,cAAc,QAAQ,YAAA,GAA0C;GACtE,MAAM,UAAU,QAAQ,YAAA,GAA0C;GAClE,MAAM,UAAU,eAAe,YAAA,GAA+C;GAC9E,MAAM,iBAAiB,eAAe,YAAA,GAAkD;GACxF,MAAM,qBAAqB,eAAe,YAAA,GAAuD;GACjG,MAAM,oBAAoB,eAAe,YAAA,GAA4C;GAErF,IAAI,eAAe,SAClB,MAAM,KAAK;IACV,UAAU,YAAY,SAAS;IAC/B,MAAM,QAAQ,SAAS;IACvB,UAAU,UAAU,OAAO,QAAQ,QAAQ,CAAC,IAAI;IAChD,gBAAgB,oBAAoB,kBAAkB,OAAO,IAAI;IACjE,qBAAqB,qBAAqB,mBAAmB,OAAO,IAAI;IACxE,aAAa,iBAAiB,eAAe,OAAO,IAAI;GACzD,CAAC;EAEH;EAEA,OAAO,EAAE,MAAM;CAChB;AACD"}
@@ -0,0 +1,15 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ //#region src/request/SearchStatusRequest.ts
4
+ /**
5
+ * Search Status Request - Get search progress
6
+ */
7
+ var SearchStatusRequest = class extends Request {
8
+ constructor() {
9
+ super(41);
10
+ }
11
+ };
12
+ //#endregion
13
+ export { SearchStatusRequest };
14
+
15
+ //# sourceMappingURL=SearchStatusRequest-Bv6iaC9Y.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchStatusRequest-Bv6iaC9Y.mjs","names":[],"sources":["../src/request/SearchStatusRequest.ts"],"sourcesContent":["/**\n * Search Status Request - Get search progress\n */\n\nimport { Request } from './Request';\nimport { ECOpCode } from '../ec/Codes';\n\nexport class SearchStatusRequest extends Request {\n\tconstructor() {\n\t\tsuper(ECOpCode.EC_OP_SEARCH_PROGRESS);\n\t}\n}\n"],"mappings":";;;;;;AAOA,IAAa,sBAAb,cAAyC,QAAQ;CAChD,cAAc;EACb,MAAA,EAAoC;CACrC;AACD"}
@@ -0,0 +1,15 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ //#region src/request/SearchStopRequest.ts
4
+ /**
5
+ * Search Stop Request - Stop current search
6
+ */
7
+ var SearchStopRequest = class extends Request {
8
+ constructor() {
9
+ super(39);
10
+ }
11
+ };
12
+ //#endregion
13
+ export { SearchStopRequest };
14
+
15
+ //# sourceMappingURL=SearchStopRequest-rET-2Nsz.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchStopRequest-rET-2Nsz.mjs","names":[],"sources":["../src/request/SearchStopRequest.ts"],"sourcesContent":["/**\n * Search Stop Request - Stop current search\n */\n\nimport { Request } from './Request';\nimport { ECOpCode } from '../ec/Codes';\n\nexport class SearchStopRequest extends Request {\n\tconstructor() {\n\t\tsuper(ECOpCode.EC_OP_SEARCH_STOP);\n\t}\n}\n"],"mappings":";;;;;;AAOA,IAAa,oBAAb,cAAuC,QAAQ;CAC9C,cAAc;EACb,MAAA,EAAgC;CACjC;AACD"}
@@ -0,0 +1,20 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { i as Ipv4Tag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/ServerConnectRequest.ts
5
+ /**
6
+ * Server Connect Request - Connect to a specific server
7
+ */
8
+ var ServerConnectRequest = class extends Request {
9
+ constructor(ip, port) {
10
+ super(47);
11
+ if (ip && port) this.addTag(new Ipv4Tag(1280, {
12
+ address: ip,
13
+ port
14
+ }));
15
+ }
16
+ };
17
+ //#endregion
18
+ export { ServerConnectRequest };
19
+
20
+ //# sourceMappingURL=ServerConnectRequest-CcO2-Eqd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerConnectRequest-CcO2-Eqd.mjs","names":[],"sources":["../src/request/ServerConnectRequest.ts"],"sourcesContent":["/**\n * Server Connect Request - Connect to a specific server\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { Ipv4Tag } from '../ec/tag/Tag';\n\nexport class ServerConnectRequest extends Request {\n\tconstructor(ip?: string, port?: number) {\n\t\tsuper(ECOpCode.EC_OP_SERVER_CONNECT);\n\n\t\tif (ip && port) {\n\t\t\tthis.addTag(new Ipv4Tag(ECTagName.EC_TAG_SERVER, { address: ip, port }));\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,uBAAb,cAA0C,QAAQ;CACjD,YAAY,IAAa,MAAe;EACvC,MAAA,EAAmC;EAEnC,IAAI,MAAM,MACT,KAAK,OAAO,IAAI,QAAA,MAAiC;GAAE,SAAS;GAAI;EAAK,CAAC,CAAC;CAEzE;AACD"}
@@ -0,0 +1,15 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ //#region src/request/ServerDisconnectRequest.ts
4
+ /**
5
+ * Server Disconnect Request - Disconnect from the current server
6
+ */
7
+ var ServerDisconnectRequest = class extends Request {
8
+ constructor() {
9
+ super(46);
10
+ }
11
+ };
12
+ //#endregion
13
+ export { ServerDisconnectRequest };
14
+
15
+ //# sourceMappingURL=ServerDisconnectRequest-DEORM3SF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerDisconnectRequest-DEORM3SF.mjs","names":[],"sources":["../src/request/ServerDisconnectRequest.ts"],"sourcesContent":["/**\n * Server Disconnect Request - Disconnect from the current server\n */\n\nimport { Request } from './Request';\nimport { ECOpCode } from '../ec/Codes';\n\nexport class ServerDisconnectRequest extends Request {\n\tconstructor() {\n\t\tsuper(ECOpCode.EC_OP_SERVER_DISCONNECT);\n\t}\n}\n"],"mappings":";;;;;;AAOA,IAAa,0BAAb,cAA6C,QAAQ;CACpD,cAAc;EACb,MAAA,EAAsC;CACvC;AACD"}
@@ -0,0 +1,15 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ //#region src/request/ServerListRequest.ts
4
+ /**
5
+ * Server List Request - Request the list of servers
6
+ */
7
+ var ServerListRequest = class extends Request {
8
+ constructor() {
9
+ super(44);
10
+ }
11
+ };
12
+ //#endregion
13
+ export { ServerListRequest };
14
+
15
+ //# sourceMappingURL=ServerListRequest-FwFQBp12.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerListRequest-FwFQBp12.mjs","names":[],"sources":["../src/request/ServerListRequest.ts"],"sourcesContent":["/**\n * Server List Request - Request the list of servers\n */\n\nimport { Request } from './Request';\nimport { ECOpCode } from '../ec/Codes';\n\nexport class ServerListRequest extends Request {\n\tconstructor() {\n\t\tsuper(ECOpCode.EC_OP_GET_SERVER_LIST);\n\t}\n}\n"],"mappings":";;;;;;AAOA,IAAa,oBAAb,cAAuC,QAAQ;CAC9C,cAAc;EACb,MAAA,EAAoC;CACrC;AACD"}
@@ -0,0 +1,52 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag, p as findTag } from "./Tag-CZF6BRMY.mjs";
3
+ import { n as toOptionalBool, t as formatIp } from "./utils-DBnUQnZ-.mjs";
4
+ //#region src/response/ServerListResponse.ts
5
+ var ServerListResponseParser = class {
6
+ static fromPacket(packet) {
7
+ return this.fromTags(packet.tags);
8
+ }
9
+ static fromTags(allTags) {
10
+ const servers = [];
11
+ const serverTags = allTags.filter((tag) => tag.name === 1280);
12
+ for (const serverTag of serverTags) {
13
+ const nested = serverTag.nestedTags || [];
14
+ const ipv4Tag = findTag(nested, 1292) || findTag(nested, 1283) || (serverTag.constructor.name.includes("Ipv4") ? serverTag : null);
15
+ let ip = void 0;
16
+ let port = void 0;
17
+ if (ipv4Tag && ipv4Tag.getValue() && typeof ipv4Tag.getValue() === "object" && "address" in ipv4Tag.getValue()) {
18
+ const val = ipv4Tag.getValue();
19
+ ip = val.address;
20
+ port = val.port;
21
+ } else {
22
+ const ipNum = findNumericTag(nested, 1292)?.getInt() || findNumericTag(allTags, 1292)?.getInt();
23
+ port = findNumericTag(nested, 1293)?.getInt() || findNumericTag(allTags, 1293)?.getInt();
24
+ ip = ipNum !== void 0 ? formatIp(ipNum) : void 0;
25
+ }
26
+ if (port === void 0 || port === 0) {
27
+ const extraPort = findNumericTag(nested, 1293)?.getInt();
28
+ if (extraPort !== void 0) port = extraPort;
29
+ }
30
+ servers.push({
31
+ name: findTag(nested, 1281)?.getValue(),
32
+ description: findTag(nested, 1282)?.getValue(),
33
+ address: findTag(nested, 1283)?.getValue(),
34
+ ip,
35
+ port,
36
+ ping: findNumericTag(nested, 1284)?.getInt(),
37
+ users: findNumericTag(nested, 1285)?.getInt(),
38
+ maxUsers: findNumericTag(nested, 1286)?.getInt(),
39
+ files: findNumericTag(nested, 1287)?.getInt(),
40
+ priority: findNumericTag(nested, 1288)?.getInt(),
41
+ version: findTag(nested, 1291)?.getValue(),
42
+ isStatic: toOptionalBool(findNumericTag(nested, 1290)?.getInt()),
43
+ failedCount: findNumericTag(nested, 1289)?.getInt()
44
+ });
45
+ }
46
+ return { servers };
47
+ }
48
+ };
49
+ //#endregion
50
+ export { ServerListResponseParser };
51
+
52
+ //# sourceMappingURL=ServerListResponse-ZAKSSCPZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerListResponse-ZAKSSCPZ.mjs","names":[],"sources":["../src/response/ServerListResponse.ts"],"sourcesContent":["/**\n * Server List Response - Parse the list of servers\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findNumericTag, findTag } from '../ec/tag/Tag';\nimport { formatIp, toOptionalBool } from './utils';\nimport type { AmuleServer } from '../model';\n\nexport interface ServerListResponse {\n\tservers: AmuleServer[];\n}\n\nexport class ServerListResponseParser {\n\tstatic fromPacket(packet: Packet): ServerListResponse {\n\t\treturn this.fromTags(packet.tags);\n\t}\n\n\tstatic fromTags(allTags: any[]): ServerListResponse {\n\t\tconst servers: AmuleServer[] = [];\n\n\t\t// Find all server tags\n\t\tconst serverTags = allTags.filter((tag) => tag.name === ECTagName.EC_TAG_SERVER);\n\n\t\tfor (const serverTag of serverTags) {\n\t\t\tconst nested = serverTag.nestedTags || [];\n\n\t\t\t// aMule often sends IP and Port combined in an Ipv4Tag (6 bytes)\n\t\t\t// Or as separate UInt32/UInt16 tags.\n\t\t\t// In many cases, the top-level EC_TAG_SERVER itself IS the Ipv4Tag.\n\t\t\tconst ipv4Tag =\n\t\t\t\tfindTag(nested, ECTagName.EC_TAG_SERVER_IP) ||\n\t\t\t\tfindTag(nested, ECTagName.EC_TAG_SERVER_ADDRESS) ||\n\t\t\t\t(serverTag.constructor.name.includes('Ipv4') ? serverTag : null);\n\n\t\t\tlet ip: string | undefined = undefined;\n\t\t\tlet port: number | undefined = undefined;\n\n\t\t\tif (ipv4Tag && ipv4Tag.getValue() && typeof ipv4Tag.getValue() === 'object' && 'address' in (ipv4Tag.getValue() as any)) {\n\t\t\t\tconst val = ipv4Tag.getValue() as any;\n\t\t\t\tip = val.address;\n\t\t\t\tport = val.port;\n\t\t\t} else {\n\t\t\t\t// Fallback to separate tags if not combined or if top-level\n\t\t\t\tconst ipNum = findNumericTag(nested, ECTagName.EC_TAG_SERVER_IP)?.getInt() || findNumericTag(allTags, ECTagName.EC_TAG_SERVER_IP)?.getInt();\n\n\t\t\t\tport = findNumericTag(nested, ECTagName.EC_TAG_SERVER_PORT)?.getInt() || findNumericTag(allTags, ECTagName.EC_TAG_SERVER_PORT)?.getInt();\n\n\t\t\t\tip = ipNum !== undefined ? formatIp(ipNum) : undefined;\n\t\t\t}\n\n\t\t\t// Some servers might have port in EC_TAG_SERVER_PORT even if IP is in combined tag\n\t\t\tif (port === undefined || port === 0) {\n\t\t\t\tconst extraPort = findNumericTag(nested, ECTagName.EC_TAG_SERVER_PORT)?.getInt();\n\t\t\t\tif (extraPort !== undefined) port = extraPort;\n\t\t\t}\n\n\t\t\tservers.push({\n\t\t\t\tname: findTag(nested, ECTagName.EC_TAG_SERVER_NAME)?.getValue(),\n\t\t\t\tdescription: findTag(nested, ECTagName.EC_TAG_SERVER_DESC)?.getValue(),\n\t\t\t\taddress: findTag(nested, ECTagName.EC_TAG_SERVER_ADDRESS)?.getValue(),\n\t\t\t\tip: ip,\n\t\t\t\tport: port,\n\t\t\t\tping: findNumericTag(nested, ECTagName.EC_TAG_SERVER_PING)?.getInt(),\n\t\t\t\tusers: findNumericTag(nested, ECTagName.EC_TAG_SERVER_USERS)?.getInt(),\n\t\t\t\tmaxUsers: findNumericTag(nested, ECTagName.EC_TAG_SERVER_USERS_MAX)?.getInt(),\n\t\t\t\tfiles: findNumericTag(nested, ECTagName.EC_TAG_SERVER_FILES)?.getInt(),\n\t\t\t\tpriority: findNumericTag(nested, ECTagName.EC_TAG_SERVER_PRIO)?.getInt(),\n\t\t\t\tversion: findTag(nested, ECTagName.EC_TAG_SERVER_VERSION)?.getValue(),\n\t\t\t\tisStatic: toOptionalBool(findNumericTag(nested, ECTagName.EC_TAG_SERVER_STATIC)?.getInt()),\n\t\t\t\tfailedCount: findNumericTag(nested, ECTagName.EC_TAG_SERVER_FAILED)?.getInt(),\n\t\t\t});\n\t\t}\n\n\t\treturn { servers };\n\t}\n}\n"],"mappings":";;;;AAcA,IAAa,2BAAb,MAAsC;CACrC,OAAO,WAAW,QAAoC;EACrD,OAAO,KAAK,SAAS,OAAO,IAAI;CACjC;CAEA,OAAO,SAAS,SAAoC;EACnD,MAAM,UAAyB,CAAC;EAGhC,MAAM,aAAa,QAAQ,QAAQ,QAAQ,IAAI,SAAA,IAAgC;EAE/E,KAAK,MAAM,aAAa,YAAY;GACnC,MAAM,SAAS,UAAU,cAAc,CAAC;GAKxC,MAAM,UACL,QAAQ,QAAA,IAAkC,KAC1C,QAAQ,QAAA,IAAuC,MAC9C,UAAU,YAAY,KAAK,SAAS,MAAM,IAAI,YAAY;GAE5D,IAAI,KAAyB,KAAA;GAC7B,IAAI,OAA2B,KAAA;GAE/B,IAAI,WAAW,QAAQ,SAAS,KAAK,OAAO,QAAQ,SAAS,MAAM,YAAY,aAAc,QAAQ,SAAS,GAAW;IACxH,MAAM,MAAM,QAAQ,SAAS;IAC7B,KAAK,IAAI;IACT,OAAO,IAAI;GACZ,OAAO;IAEN,MAAM,QAAQ,eAAe,QAAA,IAAkC,CAAC,EAAE,OAAO,KAAK,eAAe,SAAA,IAAmC,CAAC,EAAE,OAAO;IAE1I,OAAO,eAAe,QAAA,IAAoC,CAAC,EAAE,OAAO,KAAK,eAAe,SAAA,IAAqC,CAAC,EAAE,OAAO;IAEvI,KAAK,UAAU,KAAA,IAAY,SAAS,KAAK,IAAI,KAAA;GAC9C;GAGA,IAAI,SAAS,KAAA,KAAa,SAAS,GAAG;IACrC,MAAM,YAAY,eAAe,QAAA,IAAoC,CAAC,EAAE,OAAO;IAC/E,IAAI,cAAc,KAAA,GAAW,OAAO;GACrC;GAEA,QAAQ,KAAK;IACZ,MAAM,QAAQ,QAAA,IAAoC,CAAC,EAAE,SAAS;IAC9D,aAAa,QAAQ,QAAA,IAAoC,CAAC,EAAE,SAAS;IACrE,SAAS,QAAQ,QAAA,IAAuC,CAAC,EAAE,SAAS;IAChE;IACE;IACN,MAAM,eAAe,QAAA,IAAoC,CAAC,EAAE,OAAO;IACnE,OAAO,eAAe,QAAA,IAAqC,CAAC,EAAE,OAAO;IACrE,UAAU,eAAe,QAAA,IAAyC,CAAC,EAAE,OAAO;IAC5E,OAAO,eAAe,QAAA,IAAqC,CAAC,EAAE,OAAO;IACrE,UAAU,eAAe,QAAA,IAAoC,CAAC,EAAE,OAAO;IACvE,SAAS,QAAQ,QAAA,IAAuC,CAAC,EAAE,SAAS;IACpE,UAAU,eAAe,eAAe,QAAA,IAAsC,CAAC,EAAE,OAAO,CAAC;IACzF,aAAa,eAAe,QAAA,IAAsC,CAAC,EAAE,OAAO;GAC7E,CAAC;EACF;EAEA,OAAO,EAAE,QAAQ;CAClB;AACD"}
@@ -0,0 +1,14 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { a as StringTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/ServerUpdateFromUrlRequest.ts
5
+ var ServerUpdateFromUrlRequest = class extends Request {
6
+ constructor(url) {
7
+ super(50);
8
+ this.addTag(new StringTag(5900, url));
9
+ }
10
+ };
11
+ //#endregion
12
+ export { ServerUpdateFromUrlRequest };
13
+
14
+ //# sourceMappingURL=ServerUpdateFromUrlRequest-D4xBqJDJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerUpdateFromUrlRequest-D4xBqJDJ.mjs","names":[],"sources":["../src/request/ServerUpdateFromUrlRequest.ts"],"sourcesContent":["import { ECOpCode, ECTagName } from '../ec/Codes';\nimport { StringTag } from '../ec/tag/Tag';\nimport { Request } from './Request';\n\nexport class ServerUpdateFromUrlRequest extends Request {\n\tconstructor(url: string) {\n\t\tsuper(ECOpCode.EC_OP_SERVER_UPDATE_FROM_URL);\n\t\tthis.addTag(new StringTag(ECTagName.EC_TAG_SERVERS_UPDATE_URL, url));\n\t}\n}\n"],"mappings":";;;;AAIA,IAAa,6BAAb,cAAgD,QAAQ;CACvD,YAAY,KAAa;EACxB,MAAA,EAA2C;EAC3C,KAAK,OAAO,IAAI,UAAA,MAA+C,GAAG,CAAC;CACpE;AACD"}
@@ -0,0 +1,17 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { r as Hash16Tag, s as UByteTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/SetFileCategoryRequest.ts
5
+ /**
6
+ * Set File Category Request - Change category of a file
7
+ */
8
+ var SetFileCategoryRequest = class extends Request {
9
+ constructor(hash, categoryId) {
10
+ super(30);
11
+ this.addTag(new Hash16Tag(768, hash, [new UByteTag(783, categoryId)]));
12
+ }
13
+ };
14
+ //#endregion
15
+ export { SetFileCategoryRequest };
16
+
17
+ //# sourceMappingURL=SetFileCategoryRequest-BwEPJVeR.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetFileCategoryRequest-BwEPJVeR.mjs","names":[],"sources":["../src/request/SetFileCategoryRequest.ts"],"sourcesContent":["/**\n * Set File Category Request - Change category of a file\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { Hash16Tag, UByteTag } from '../ec/tag/Tag';\n\nexport class SetFileCategoryRequest extends Request {\n\tconstructor(hash: Buffer, categoryId: number) {\n\t\tsuper(ECOpCode.EC_OP_PARTFILE_SET_CAT);\n\n\t\t// Hash tag with category as subtag\n\t\tthis.addTag(new Hash16Tag(ECTagName.EC_TAG_PARTFILE, hash, [new UByteTag(ECTagName.EC_TAG_PARTFILE_CAT, categoryId)]));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,yBAAb,cAA4C,QAAQ;CACnD,YAAY,MAAc,YAAoB;EAC7C,MAAA,EAAqC;EAGrC,KAAK,OAAO,IAAI,UAAA,KAAqC,MAAM,CAAC,IAAI,SAAA,KAAwC,UAAU,CAAC,CAAC,CAAC;CACtH;AACD"}