amule-ec-client 0.5.2 → 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 +4 -0
  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 -1020
  85. package/dist/index.js +0 -3157
  86. package/dist/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Codes-CjiW7Pdl.mjs","names":[],"sources":["../src/ec/Codes.ts"],"sourcesContent":["// EC Protocol constants and enumerations\n\nexport enum ProtocolVersion {\n\tEC_CURRENT_PROTOCOL_VERSION = 0x0204,\n}\n\nexport enum ECFlag {\n\tEC_FLAG_ZLIB = 0x00000001,\n\tEC_FLAG_UTF8_NUMBERS = 0x00000002,\n\tEC_FLAG_HAS_ID = 0x00000004,\n\tEC_FLAG_ACCEPTS = 0x00000010,\n\tEC_FLAG_UNKNOWN_MASK = 0xff7f7f08,\n}\n\nexport enum ECOpCode {\n\tEC_OP_NOOP = 0x01,\n\tEC_OP_AUTH_REQ = 0x02,\n\tEC_OP_AUTH_FAIL = 0x03,\n\tEC_OP_AUTH_OK = 0x04,\n\tEC_OP_FAILED = 0x05,\n\tEC_OP_STRINGS = 0x06,\n\tEC_OP_MISC_DATA = 0x07,\n\tEC_OP_SHUTDOWN = 0x08,\n\tEC_OP_ADD_LINK = 0x09,\n\tEC_OP_STAT_REQ = 0x0a,\n\tEC_OP_GET_CONNSTATE = 0x0b,\n\tEC_OP_STATS = 0x0c,\n\tEC_OP_GET_DLOAD_QUEUE = 0x0d,\n\tEC_OP_GET_ULOAD_QUEUE = 0x0e,\n\tEC_OP_GET_SHARED_FILES = 0x10,\n\tEC_OP_SHARED_SET_PRIO = 0x11,\n\tEC_OP_PARTFILE_SWAP_A4AF_THIS = 0x16,\n\tEC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO = 0x17,\n\tEC_OP_PARTFILE_SWAP_A4AF_OTHERS = 0x18,\n\tEC_OP_PARTFILE_PAUSE = 0x19,\n\tEC_OP_PARTFILE_RESUME = 0x1a,\n\tEC_OP_PARTFILE_STOP = 0x1b,\n\tEC_OP_PARTFILE_PRIO_SET = 0x1c,\n\tEC_OP_PARTFILE_DELETE = 0x1d,\n\tEC_OP_PARTFILE_SET_CAT = 0x1e,\n\tEC_OP_DLOAD_QUEUE = 0x1f,\n\tEC_OP_ULOAD_QUEUE = 0x20,\n\tEC_OP_SHARED_FILES = 0x22,\n\tEC_OP_SHAREDFILES_RELOAD = 0x23,\n\tEC_OP_RENAME_FILE = 0x25,\n\tEC_OP_SEARCH_START = 0x26,\n\tEC_OP_SEARCH_STOP = 0x27,\n\tEC_OP_SEARCH_RESULTS = 0x28,\n\tEC_OP_SEARCH_PROGRESS = 0x29,\n\tEC_OP_DOWNLOAD_SEARCH_RESULT = 0x2a,\n\tEC_OP_IPFILTER_RELOAD = 0x2b,\n\tEC_OP_GET_SERVER_LIST = 0x2c,\n\tEC_OP_SERVER_LIST = 0x2d,\n\tEC_OP_SERVER_DISCONNECT = 0x2e,\n\tEC_OP_SERVER_CONNECT = 0x2f,\n\tEC_OP_SERVER_REMOVE = 0x30,\n\tEC_OP_SERVER_ADD = 0x31,\n\tEC_OP_SERVER_UPDATE_FROM_URL = 0x32,\n\tEC_OP_ADDLOGLINE = 0x33,\n\tEC_OP_ADDDEBUGLOGLINE = 0x34,\n\tEC_OP_GET_LOG = 0x35,\n\tEC_OP_GET_DEBUGLOG = 0x36,\n\tEC_OP_GET_SERVERINFO = 0x37,\n\tEC_OP_LOG = 0x38,\n\tEC_OP_DEBUGLOG = 0x39,\n\tEC_OP_SERVERINFO = 0x3a,\n\tEC_OP_RESET_LOG = 0x3b,\n\tEC_OP_RESET_DEBUGLOG = 0x3c,\n\tEC_OP_CLEAR_SERVERINFO = 0x3d,\n\tEC_OP_GET_LAST_LOG_ENTRY = 0x3e,\n\tEC_OP_GET_PREFERENCES = 0x3f,\n\tEC_OP_SET_PREFERENCES = 0x40,\n\tEC_OP_CREATE_CATEGORY = 0x41,\n\tEC_OP_UPDATE_CATEGORY = 0x42,\n\tEC_OP_DELETE_CATEGORY = 0x43,\n\tEC_OP_GET_STATSGRAPHS = 0x44,\n\tEC_OP_STATSGRAPHS = 0x45,\n\tEC_OP_GET_STATSTREE = 0x46,\n\tEC_OP_STATSTREE = 0x47,\n\tEC_OP_KAD_START = 0x48,\n\tEC_OP_KAD_STOP = 0x49,\n\tEC_OP_CONNECT = 0x4a,\n\tEC_OP_DISCONNECT = 0x4b,\n\tEC_OP_KAD_UPDATE_FROM_URL = 0x4d,\n\tEC_OP_KAD_BOOTSTRAP_FROM_IP = 0x4e,\n\tEC_OP_AUTH_SALT = 0x4f,\n\tEC_OP_AUTH_PASSWD = 0x50,\n\tEC_OP_IPFILTER_UPDATE = 0x51,\n\tEC_OP_GET_UPDATE = 0x52,\n\tEC_OP_CLEAR_COMPLETED = 0x53,\n\tEC_OP_CLIENT_SWAP_TO_ANOTHER_FILE = 0x54,\n\tEC_OP_SHARED_FILE_SET_COMMENT = 0x55,\n\tEC_OP_SERVER_SET_STATIC_PRIO = 0x56,\n\tEC_OP_FRIEND = 0x57,\n}\n\nexport enum ECTagName {\n\tEC_TAG_STRING = 0x0000,\n\tEC_TAG_PASSWD_HASH = 0x0001,\n\tEC_TAG_PROTOCOL_VERSION = 0x0002,\n\tEC_TAG_VERSION_ID = 0x0003,\n\tEC_TAG_DETAIL_LEVEL = 0x0004,\n\tEC_TAG_CONNSTATE = 0x0005,\n\tEC_TAG_ED2K_ID = 0x0006,\n\tEC_TAG_LOG_TO_STATUS = 0x0007,\n\tEC_TAG_BOOTSTRAP_IP = 0x0008,\n\tEC_TAG_BOOTSTRAP_PORT = 0x0009,\n\tEC_TAG_CLIENT_ID = 0x000a,\n\tEC_TAG_PASSWD_SALT = 0x000b,\n\tEC_TAG_CAN_ZLIB = 0x000c,\n\tEC_TAG_CAN_UTF8_NUMBERS = 0x000d,\n\tEC_TAG_CAN_NOTIFY = 0x000e,\n\tEC_TAG_ECID = 0x000f,\n\tEC_TAG_KAD_ID = 0x0010,\n\tEC_TAG_CLIENT_NAME = 0x0100,\n\tEC_TAG_CLIENT_VERSION = 0x0101,\n\tEC_TAG_CLIENT_MOD = 0x0102,\n\tEC_TAG_STATS_UL_SPEED = 0x0200,\n\tEC_TAG_STATS_DL_SPEED = 0x0201,\n\tEC_TAG_STATS_UL_SPEED_LIMIT = 0x0202,\n\tEC_TAG_STATS_DL_SPEED_LIMIT = 0x0203,\n\tEC_TAG_STATS_UP_OVERHEAD = 0x0204,\n\tEC_TAG_STATS_DOWN_OVERHEAD = 0x0205,\n\tEC_TAG_STATS_TOTAL_SRC_COUNT = 0x0206,\n\tEC_TAG_STATS_BANNED_COUNT = 0x0207,\n\tEC_TAG_STATS_UL_QUEUE_LEN = 0x0208,\n\tEC_TAG_STATS_ED2K_USERS = 0x0209,\n\tEC_TAG_STATS_KAD_USERS = 0x020a,\n\tEC_TAG_STATS_ED2K_FILES = 0x020b,\n\tEC_TAG_STATS_KAD_FILES = 0x020c,\n\tEC_TAG_STATS_LOGGER_MESSAGE = 0x020d,\n\tEC_TAG_STATS_KAD_FIREWALLED_UDP = 0x020e,\n\tEC_TAG_STATS_KAD_INDEXED_SOURCES = 0x020f,\n\tEC_TAG_STATS_KAD_INDEXED_KEYWORDS = 0x0210,\n\tEC_TAG_STATS_KAD_INDEXED_NOTES = 0x0211,\n\tEC_TAG_STATS_KAD_INDEXED_LOAD = 0x0212,\n\tEC_TAG_STATS_KAD_IP_ADRESS = 0x0213,\n\tEC_TAG_STATS_BUDDY_STATUS = 0x0214,\n\tEC_TAG_STATS_BUDDY_IP = 0x0215,\n\tEC_TAG_STATS_BUDDY_PORT = 0x0216,\n\tEC_TAG_STATS_KAD_IN_LAN_MODE = 0x0217,\n\tEC_TAG_STATS_TOTAL_SENT_BYTES = 0x0218,\n\tEC_TAG_STATS_TOTAL_RECEIVED_BYTES = 0x0219,\n\tEC_TAG_STATS_SHARED_FILE_COUNT = 0x021a,\n\tEC_TAG_STATS_KAD_NODES = 0x021b,\n\tEC_TAG_PARTFILE = 0x0300,\n\tEC_TAG_PARTFILE_NAME = 0x0301,\n\tEC_TAG_PARTFILE_PARTMETID = 0x0302,\n\tEC_TAG_PARTFILE_SIZE_FULL = 0x0303,\n\tEC_TAG_PARTFILE_SIZE_XFER = 0x0304,\n\tEC_TAG_PARTFILE_SIZE_XFER_UP = 0x0305,\n\tEC_TAG_PARTFILE_SIZE_DONE = 0x0306,\n\tEC_TAG_PARTFILE_SPEED = 0x0307,\n\tEC_TAG_PARTFILE_STATUS = 0x0308,\n\tEC_TAG_PARTFILE_PRIO = 0x0309,\n\tEC_TAG_PARTFILE_SOURCE_COUNT = 0x030a,\n\tEC_TAG_PARTFILE_SOURCE_COUNT_A4AF = 0x030b,\n\tEC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT = 0x030c,\n\tEC_TAG_PARTFILE_SOURCE_COUNT_XFER = 0x030d,\n\tEC_TAG_PARTFILE_ED2K_LINK = 0x030e,\n\tEC_TAG_PARTFILE_CAT = 0x030f,\n\tEC_TAG_PARTFILE_LAST_RECV = 0x0310,\n\tEC_TAG_PARTFILE_LAST_SEEN_COMP = 0x0311,\n\tEC_TAG_PARTFILE_PART_STATUS = 0x0312,\n\tEC_TAG_PARTFILE_GAP_STATUS = 0x0313,\n\tEC_TAG_PARTFILE_REQ_STATUS = 0x0314,\n\tEC_TAG_PARTFILE_SOURCE_NAMES = 0x0315,\n\tEC_TAG_PARTFILE_COMMENTS = 0x0316,\n\tEC_TAG_PARTFILE_STOPPED = 0x0317,\n\tEC_TAG_PARTFILE_DOWNLOAD_ACTIVE = 0x0318,\n\tEC_TAG_PARTFILE_LOST_CORRUPTION = 0x0319,\n\tEC_TAG_PARTFILE_GAINED_COMPRESSION = 0x031a,\n\tEC_TAG_PARTFILE_SAVED_ICH = 0x031b,\n\tEC_TAG_PARTFILE_SOURCE_NAMES_COUNTS = 0x031c,\n\tEC_TAG_PARTFILE_AVAILABLE_PARTS = 0x031d,\n\tEC_TAG_PARTFILE_HASH = 0x031e,\n\tEC_TAG_PARTFILE_SHARED = 0x031f,\n\tEC_TAG_PARTFILE_HASHED_PART_COUNT = 0x0320,\n\tEC_TAG_PARTFILE_A4AFAUTO = 0x0321,\n\tEC_TAG_PARTFILE_A4AF_SOURCES = 0x0322,\n\tEC_TAG_KNOWNFILE = 0x0400,\n\tEC_TAG_KNOWNFILE_XFERRED = 0x0401,\n\tEC_TAG_KNOWNFILE_XFERRED_ALL = 0x0402,\n\tEC_TAG_KNOWNFILE_REQ_COUNT = 0x0403,\n\tEC_TAG_KNOWNFILE_REQ_COUNT_ALL = 0x0404,\n\tEC_TAG_KNOWNFILE_ACCEPT_COUNT = 0x0405,\n\tEC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL = 0x0406,\n\tEC_TAG_KNOWNFILE_AICH_MASTERHASH = 0x0407,\n\tEC_TAG_KNOWNFILE_FILENAME = 0x0408,\n\tEC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW = 0x0409,\n\tEC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH = 0x040a,\n\tEC_TAG_KNOWNFILE_PRIO = 0x040b,\n\tEC_TAG_KNOWNFILE_ON_QUEUE = 0x040c,\n\tEC_TAG_KNOWNFILE_COMPLETE_SOURCES = 0x040d,\n\tEC_TAG_KNOWNFILE_COMMENT = 0x040e,\n\tEC_TAG_KNOWNFILE_RATING = 0x040f,\n\tEC_TAG_SERVER = 0x0500,\n\tEC_TAG_SERVER_NAME = 0x0501,\n\tEC_TAG_SERVER_DESC = 0x0502,\n\tEC_TAG_SERVER_ADDRESS = 0x0503,\n\tEC_TAG_SERVER_PING = 0x0504,\n\tEC_TAG_SERVER_USERS = 0x0505,\n\tEC_TAG_SERVER_USERS_MAX = 0x0506,\n\tEC_TAG_SERVER_FILES = 0x0507,\n\tEC_TAG_SERVER_PRIO = 0x0508,\n\tEC_TAG_SERVER_FAILED = 0x0509,\n\tEC_TAG_SERVER_STATIC = 0x050a,\n\tEC_TAG_SERVER_VERSION = 0x050b,\n\tEC_TAG_SERVER_IP = 0x050c,\n\tEC_TAG_SERVER_PORT = 0x050d,\n\tEC_TAG_CLIENT = 0x0600,\n\tEC_TAG_CLIENT_SOFTWARE = 0x0601,\n\tEC_TAG_CLIENT_SCORE = 0x0602,\n\tEC_TAG_CLIENT_HASH = 0x0603,\n\tEC_TAG_CLIENT_FRIEND_SLOT = 0x0604,\n\tEC_TAG_CLIENT_WAIT_TIME = 0x0605,\n\tEC_TAG_CLIENT_XFER_TIME = 0x0606,\n\tEC_TAG_CLIENT_QUEUE_TIME = 0x0607,\n\tEC_TAG_CLIENT_LAST_TIME = 0x0608,\n\tEC_TAG_CLIENT_UPLOAD_SESSION = 0x0609,\n\tEC_TAG_CLIENT_UPLOAD_TOTAL = 0x060a,\n\tEC_TAG_CLIENT_DOWNLOAD_TOTAL = 0x060b,\n\tEC_TAG_CLIENT_DOWNLOAD_STATE = 0x060c,\n\tEC_TAG_CLIENT_UP_SPEED = 0x060d,\n\tEC_TAG_CLIENT_DOWN_SPEED = 0x060e,\n\tEC_TAG_CLIENT_FROM = 0x060f,\n\tEC_TAG_CLIENT_USER_IP = 0x0610,\n\tEC_TAG_CLIENT_USER_PORT = 0x0611,\n\tEC_TAG_CLIENT_SERVER_IP = 0x0612,\n\tEC_TAG_CLIENT_SERVER_PORT = 0x0613,\n\tEC_TAG_CLIENT_SERVER_NAME = 0x0614,\n\tEC_TAG_CLIENT_SOFT_VER_STR = 0x0615,\n\tEC_TAG_CLIENT_WAITING_POSITION = 0x0616,\n\tEC_TAG_CLIENT_IDENT_STATE = 0x0617,\n\tEC_TAG_CLIENT_OBFUSCATION_STATUS = 0x0618,\n\tEC_TAG_CLIENT_CURRENTLYUNUSED1 = 0x0619,\n\tEC_TAG_CLIENT_REMOTE_QUEUE_RANK = 0x061a,\n\tEC_TAG_CLIENT_DISABLE_VIEW_SHARED = 0x061b,\n\tEC_TAG_CLIENT_UPLOAD_STATE = 0x061c,\n\tEC_TAG_CLIENT_EXT_PROTOCOL = 0x061d,\n\tEC_TAG_CLIENT_USER_ID = 0x061e,\n\tEC_TAG_CLIENT_UPLOAD_FILE = 0x061f,\n\tEC_TAG_CLIENT_REQUEST_FILE = 0x0620,\n\tEC_TAG_CLIENT_A4AF_FILES = 0x0621,\n\tEC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK = 0x0622,\n\tEC_TAG_CLIENT_KAD_PORT = 0x0623,\n\tEC_TAG_CLIENT_PART_STATUS = 0x0624,\n\tEC_TAG_CLIENT_NEXT_REQUESTED_PART = 0x0625,\n\tEC_TAG_CLIENT_LAST_DOWNLOADING_PART = 0x0626,\n\tEC_TAG_CLIENT_REMOTE_FILENAME = 0x0627,\n\tEC_TAG_CLIENT_MOD_VERSION = 0x0628,\n\tEC_TAG_CLIENT_OS_INFO = 0x0629,\n\tEC_TAG_CLIENT_AVAILABLE_PARTS = 0x062a,\n\tEC_TAG_CLIENT_UPLOAD_PART_STATUS = 0x062b,\n\tEC_TAG_SEARCHFILE = 0x0700,\n\tEC_TAG_SEARCH_TYPE = 0x0701,\n\tEC_TAG_SEARCH_NAME = 0x0702,\n\tEC_TAG_SEARCH_MIN_SIZE = 0x0703,\n\tEC_TAG_SEARCH_MAX_SIZE = 0x0704,\n\tEC_TAG_SEARCH_FILE_TYPE = 0x0705,\n\tEC_TAG_SEARCH_EXTENSION = 0x0706,\n\tEC_TAG_SEARCH_AVAILABILITY = 0x0707,\n\tEC_TAG_SEARCH_STATUS = 0x0708,\n\tEC_TAG_SEARCH_PARENT = 0x0709,\n\tEC_TAG_FRIEND = 0x0800,\n\tEC_TAG_FRIEND_NAME = 0x0801,\n\tEC_TAG_FRIEND_HASH = 0x0802,\n\tEC_TAG_FRIEND_IP = 0x0803,\n\tEC_TAG_FRIEND_PORT = 0x0804,\n\tEC_TAG_FRIEND_CLIENT = 0x0805,\n\tEC_TAG_FRIEND_ADD = 0x0806,\n\tEC_TAG_FRIEND_REMOVE = 0x0807,\n\tEC_TAG_FRIEND_FRIENDSLOT = 0x0808,\n\tEC_TAG_FRIEND_SHARED = 0x0809,\n\tEC_TAG_SELECT_PREFS = 0x1000,\n\tEC_TAG_PREFS_CATEGORIES = 0x1100,\n\tEC_TAG_CATEGORY = 0x1101,\n\tEC_TAG_CATEGORY_TITLE = 0x1102,\n\tEC_TAG_CATEGORY_PATH = 0x1103,\n\tEC_TAG_CATEGORY_COMMENT = 0x1104,\n\tEC_TAG_CATEGORY_COLOR = 0x1105,\n\tEC_TAG_CATEGORY_PRIO = 0x1106,\n\tEC_TAG_PREFS_GENERAL = 0x1200,\n\tEC_TAG_USER_NICK = 0x1201,\n\tEC_TAG_USER_HASH = 0x1202,\n\tEC_TAG_USER_HOST = 0x1203,\n\tEC_TAG_GENERAL_CHECK_NEW_VERSION = 0x1204,\n\tEC_TAG_PREFS_CONNECTIONS = 0x1300,\n\tEC_TAG_CONN_DL_CAP = 0x1301,\n\tEC_TAG_CONN_UL_CAP = 0x1302,\n\tEC_TAG_CONN_MAX_DL = 0x1303,\n\tEC_TAG_CONN_MAX_UL = 0x1304,\n\tEC_TAG_CONN_SLOT_ALLOCATION = 0x1305,\n\tEC_TAG_CONN_TCP_PORT = 0x1306,\n\tEC_TAG_CONN_UDP_PORT = 0x1307,\n\tEC_TAG_CONN_UDP_DISABLE = 0x1308,\n\tEC_TAG_CONN_MAX_FILE_SOURCES = 0x1309,\n\tEC_TAG_CONN_MAX_CONN = 0x130a,\n\tEC_TAG_CONN_AUTOCONNECT = 0x130b,\n\tEC_TAG_CONN_RECONNECT = 0x130c,\n\tEC_TAG_NETWORK_ED2K = 0x130d,\n\tEC_TAG_NETWORK_KADEMLIA = 0x130e,\n\tEC_TAG_PREFS_MESSAGEFILTER = 0x1400,\n\tEC_TAG_MSGFILTER_ENABLED = 0x1401,\n\tEC_TAG_MSGFILTER_ALL = 0x1402,\n\tEC_TAG_MSGFILTER_FRIENDS = 0x1403,\n\tEC_TAG_MSGFILTER_SECURE = 0x1404,\n\tEC_TAG_MSGFILTER_BY_KEYWORD = 0x1405,\n\tEC_TAG_MSGFILTER_KEYWORDS = 0x1406,\n\tEC_TAG_PREFS_REMOTECTRL = 0x1500,\n\tEC_TAG_WEBSERVER_AUTORUN = 0x1501,\n\tEC_TAG_WEBSERVER_PORT = 0x1502,\n\tEC_TAG_WEBSERVER_GUEST = 0x1503,\n\tEC_TAG_WEBSERVER_USEGZIP = 0x1504,\n\tEC_TAG_WEBSERVER_REFRESH = 0x1505,\n\tEC_TAG_WEBSERVER_TEMPLATE = 0x1506,\n\tEC_TAG_PREFS_ONLINESIG = 0x1600,\n\tEC_TAG_ONLINESIG_ENABLED = 0x1601,\n\tEC_TAG_PREFS_SERVERS = 0x1700,\n\tEC_TAG_SERVERS_REMOVE_DEAD = 0x1701,\n\tEC_TAG_SERVERS_DEAD_SERVER_RETRIES = 0x1702,\n\tEC_TAG_SERVERS_AUTO_UPDATE = 0x1703,\n\tEC_TAG_SERVERS_URL_LIST = 0x1704,\n\tEC_TAG_SERVERS_ADD_FROM_SERVER = 0x1705,\n\tEC_TAG_SERVERS_ADD_FROM_CLIENT = 0x1706,\n\tEC_TAG_SERVERS_USE_SCORE_SYSTEM = 0x1707,\n\tEC_TAG_SERVERS_SMART_ID_CHECK = 0x1708,\n\tEC_TAG_SERVERS_SAFE_SERVER_CONNECT = 0x1709,\n\tEC_TAG_SERVERS_AUTOCONN_STATIC_ONLY = 0x170a,\n\tEC_TAG_SERVERS_MANUAL_HIGH_PRIO = 0x170b,\n\tEC_TAG_SERVERS_UPDATE_URL = 0x170c,\n\tEC_TAG_PREFS_FILES = 0x1800,\n\tEC_TAG_FILES_ICH_ENABLED = 0x1801,\n\tEC_TAG_FILES_AICH_TRUST = 0x1802,\n\tEC_TAG_FILES_NEW_PAUSED = 0x1803,\n\tEC_TAG_FILES_NEW_AUTO_DL_PRIO = 0x1804,\n\tEC_TAG_FILES_PREVIEW_PRIO = 0x1805,\n\tEC_TAG_FILES_NEW_AUTO_UL_PRIO = 0x1806,\n\tEC_TAG_FILES_UL_FULL_CHUNKS = 0x1807,\n\tEC_TAG_FILES_START_NEXT_PAUSED = 0x1808,\n\tEC_TAG_FILES_RESUME_SAME_CAT = 0x1809,\n\tEC_TAG_FILES_SAVE_SOURCES = 0x180a,\n\tEC_TAG_FILES_EXTRACT_METADATA = 0x180b,\n\tEC_TAG_FILES_ALLOC_FULL_SIZE = 0x180c,\n\tEC_TAG_FILES_CHECK_FREE_SPACE = 0x180d,\n\tEC_TAG_FILES_MIN_FREE_SPACE = 0x180e,\n\tEC_TAG_FILES_CREATE_NORMAL = 0x180f,\n\tEC_TAG_PREFS_DIRECTORIES = 0x1a00,\n\tEC_TAG_DIRECTORIES_INCOMING = 0x1a01,\n\tEC_TAG_DIRECTORIES_TEMP = 0x1a02,\n\tEC_TAG_DIRECTORIES_SHARED = 0x1a03,\n\tEC_TAG_DIRECTORIES_SHARE_HIDDEN = 0x1a04,\n\tEC_TAG_PREFS_STATISTICS = 0x1b00,\n\tEC_TAG_STATSGRAPH_WIDTH = 0x1b01,\n\tEC_TAG_STATSGRAPH_SCALE = 0x1b02,\n\tEC_TAG_STATSGRAPH_LAST = 0x1b03,\n\tEC_TAG_STATSGRAPH_DATA = 0x1b04,\n\tEC_TAG_STATTREE_CAPPING = 0x1b05,\n\tEC_TAG_STATTREE_NODE = 0x1b06,\n\tEC_TAG_STAT_NODE_VALUE = 0x1b07,\n\tEC_TAG_STAT_VALUE_TYPE = 0x1b08,\n\tEC_TAG_STATTREE_NODEID = 0x1b09,\n\tEC_TAG_PREFS_SECURITY = 0x1c00,\n\tEC_TAG_SECURITY_CAN_SEE_SHARES = 0x1c01,\n\tEC_TAG_IPFILTER_CLIENTS = 0x1c02,\n\tEC_TAG_IPFILTER_SERVERS = 0x1c03,\n\tEC_TAG_IPFILTER_AUTO_UPDATE = 0x1c04,\n\tEC_TAG_IPFILTER_UPDATE_URL = 0x1c05,\n\tEC_TAG_IPFILTER_LEVEL = 0x1c06,\n\tEC_TAG_IPFILTER_FILTER_LAN = 0x1c07,\n\tEC_TAG_SECURITY_USE_SECIDENT = 0x1c08,\n\tEC_TAG_SECURITY_OBFUSCATION_SUPPORTED = 0x1c09,\n\tEC_TAG_SECURITY_OBFUSCATION_REQUESTED = 0x1c0a,\n\tEC_TAG_SECURITY_OBFUSCATION_REQUIRED = 0x1c0b,\n\tEC_TAG_PREFS_CORETWEAKS = 0x1d00,\n\tEC_TAG_CORETW_MAX_CONN_PER_FIVE = 0x1d01,\n\tEC_TAG_CORETW_VERBOSE = 0x1d02,\n\tEC_TAG_CORETW_FILEBUFFER = 0x1d03,\n\tEC_TAG_CORETW_UL_QUEUE = 0x1d04,\n\tEC_TAG_CORETW_SRV_KEEPALIVE_TIMEOUT = 0x1d05,\n\tEC_TAG_PREFS_KADEMLIA = 0x1e00,\n\tEC_TAG_KADEMLIA_UPDATE_URL = 0x1e01,\n\tEC_TAG_UNKNOWN = 0xffff,\n}\n\nexport enum ECDetailLevel {\n\tEC_DETAIL_CMD = 0x00,\n\tEC_DETAIL_WEB = 0x01,\n\tEC_DETAIL_FULL = 0x02,\n\tEC_DETAIL_UPDATE = 0x03,\n\tEC_DETAIL_INC_UPDATE = 0x04,\n}\n\nexport enum ECSearchType {\n\tEC_SEARCH_LOCAL = 0x00,\n\tEC_SEARCH_GLOBAL = 0x01,\n\tEC_SEARCH_KAD = 0x02,\n\tEC_SEARCH_WEB = 0x03,\n}\n\nexport enum ECSearchFileDownloadStatus {\n\tNEW = 0,\n\tDOWNLOADED = 1,\n\tQUEUED = 2,\n\tCANCELED = 3,\n\tQUEUEDCANCELED = 4,\n}\n\nexport enum ECStatTreeNodeValueType {\n\tEC_VALUE_INTEGER = 0x00,\n\tEC_VALUE_ISTRING = 0x01,\n\tEC_VALUE_BYTES = 0x02,\n\tEC_VALUE_ISHORT = 0x03,\n\tEC_VALUE_TIME = 0x04,\n\tEC_VALUE_SPEED = 0x05,\n\tEC_VALUE_STRING = 0x06,\n\tEC_VALUE_DOUBLE = 0x07,\n}\n\nexport enum EcPrefs {\n\tEC_PREFS_CATEGORIES = 0x00000001,\n\tEC_PREFS_GENERAL = 0x00000002,\n\tEC_PREFS_CONNECTIONS = 0x00000004,\n\tEC_PREFS_MESSAGEFILTER = 0x00000008,\n\tEC_PREFS_REMOTECONTROLS = 0x00000010,\n\tEC_PREFS_ONLINESIG = 0x00000020,\n\tEC_PREFS_SERVERS = 0x00000040,\n\tEC_PREFS_FILES = 0x00000080,\n\tEC_PREFS_DIRECTORIES = 0x00000200,\n\tEC_PREFS_STATISTICS = 0x00000400,\n\tEC_PREFS_SECURITY = 0x00000800,\n\tEC_PREFS_CORETWEAKS = 0x00001000,\n\tEC_PREFS_KADEMLIA = 0x00002000,\n}\n\nexport enum ECTagType {\n\tEC_TAGTYPE_UNKNOWN = 0,\n\tEC_TAGTYPE_CUSTOM = 1,\n\tEC_TAGTYPE_UINT8 = 2,\n\tEC_TAGTYPE_UINT16 = 3,\n\tEC_TAGTYPE_UINT32 = 4,\n\tEC_TAGTYPE_UINT64 = 5,\n\tEC_TAGTYPE_STRING = 6,\n\tEC_TAGTYPE_DOUBLE = 7,\n\tEC_TAGTYPE_IPV4 = 8,\n\tEC_TAGTYPE_HASH16 = 9,\n\tEC_TAGTYPE_UINT128 = 10,\n}\n\n// Type sizes\nexport const LEN_UBYTE = 1;\nexport const LEN_USHORT = 2;\nexport const LEN_UINT = 4;\nexport const LEN_ULONG = 8;\nexport const LEN_UINT128 = 16;\n"],"mappings":"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"}
@@ -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/CreateCategoryRequest.ts
5
+ /**
6
+ * Create Category Request - Create a new category
7
+ */
8
+ var CreateCategoryRequest = class extends Request {
9
+ constructor(category) {
10
+ super(65);
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, 0, subtags));
19
+ }
20
+ };
21
+ //#endregion
22
+ export { CreateCategoryRequest };
23
+
24
+ //# sourceMappingURL=CreateCategoryRequest-Br6yfDhZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateCategoryRequest-Br6yfDhZ.mjs","names":[],"sources":["../src/request/CreateCategoryRequest.ts"],"sourcesContent":["/**\n * Create Category Request - Create a new category\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { StringTag, UByteTag, UIntTag } from '../ec/tag/Tag';\nimport type { AmuleCategory } from '../model';\n\nexport class CreateCategoryRequest extends Request {\n\tconstructor(category: AmuleCategory) {\n\t\tsuper(ECOpCode.EC_OP_CREATE_CATEGORY);\n\n\t\tconst subtags = [\n\t\t\tnew StringTag(ECTagName.EC_TAG_CATEGORY_TITLE, category.name),\n\t\t\tnew StringTag(ECTagName.EC_TAG_CATEGORY_PATH, category.path),\n\t\t\tnew StringTag(ECTagName.EC_TAG_CATEGORY_COMMENT, category.comment),\n\t\t\tnew UIntTag(ECTagName.EC_TAG_CATEGORY_COLOR, category.color),\n\t\t\tnew UByteTag(ECTagName.EC_TAG_CATEGORY_PRIO, category.priority),\n\t\t];\n\n\t\t// Category tag is a container for all category properties\n\t\tthis.addTag(new UIntTag(ECTagName.EC_TAG_CATEGORY, 0, subtags));\n\t}\n}\n"],"mappings":";;;;;;;AASA,IAAa,wBAAb,cAA2C,QAAQ;CAClD,YAAY,UAAyB;EACpC,MAAA,EAAoC;EAEpC,MAAM,UAAU;GACf,IAAI,UAAA,MAA2C,SAAS,IAAI;GAC5D,IAAI,UAAA,MAA0C,SAAS,IAAI;GAC3D,IAAI,UAAA,MAA6C,SAAS,OAAO;GACjE,IAAI,QAAA,MAAyC,SAAS,KAAK;GAC3D,IAAI,SAAA,MAAyC,SAAS,QAAQ;EAC/D;EAGA,KAAK,OAAO,IAAI,QAAA,MAAmC,GAAG,OAAO,CAAC;CAC/D;AACD"}
@@ -0,0 +1,17 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { l as UIntTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/DeleteCategoryRequest.ts
5
+ /**
6
+ * Delete Category Request - Delete an existing category
7
+ */
8
+ var DeleteCategoryRequest = class extends Request {
9
+ constructor(id) {
10
+ super(67);
11
+ this.addTag(new UIntTag(4353, id));
12
+ }
13
+ };
14
+ //#endregion
15
+ export { DeleteCategoryRequest };
16
+
17
+ //# sourceMappingURL=DeleteCategoryRequest-C2-p6sx0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteCategoryRequest-C2-p6sx0.mjs","names":[],"sources":["../src/request/DeleteCategoryRequest.ts"],"sourcesContent":["/**\n * Delete Category Request - Delete an existing category\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { UIntTag } from '../ec/tag/Tag';\n\nexport class DeleteCategoryRequest extends Request {\n\tconstructor(id: number) {\n\t\tsuper(ECOpCode.EC_OP_DELETE_CATEGORY);\n\n\t\tthis.addTag(new UIntTag(ECTagName.EC_TAG_CATEGORY, id));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,wBAAb,cAA2C,QAAQ;CAClD,YAAY,IAAY;EACvB,MAAA,EAAoC;EAEpC,KAAK,OAAO,IAAI,QAAA,MAAmC,EAAE,CAAC;CACvD;AACD"}
@@ -0,0 +1,31 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { r as Hash16Tag } from "./Tag-CZF6BRMY.mjs";
4
+ import "./index.mjs";
5
+ //#region src/request/DownloadCommandRequest.ts
6
+ /**
7
+ * Download Command Request - Send commands to files in download queue
8
+ * Commands: PAUSE, RESUME, STOP, DELETE, SWAP_A4AF_THIS, etc.
9
+ */
10
+ var DownloadCommandRequest = class DownloadCommandRequest extends Request {
11
+ constructor(hash, command) {
12
+ super(DownloadCommandRequest.commandToOpCode(command));
13
+ this.addTag(new Hash16Tag(768, hash));
14
+ }
15
+ static commandToOpCode(command) {
16
+ switch (command) {
17
+ case 22: return 22;
18
+ case 23: return 23;
19
+ case 24: return 24;
20
+ case 25: return 25;
21
+ case 26: return 26;
22
+ case 27: return 27;
23
+ case 29: return 29;
24
+ default: throw new Error(`Unknown download command: ${command}`);
25
+ }
26
+ }
27
+ };
28
+ //#endregion
29
+ export { DownloadCommandRequest };
30
+
31
+ //# sourceMappingURL=DownloadCommandRequest-CaULjfNi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DownloadCommandRequest-CaULjfNi.mjs","names":[],"sources":["../src/request/DownloadCommandRequest.ts"],"sourcesContent":["/**\n * Download Command Request - Send commands to files in download queue\n * Commands: PAUSE, RESUME, STOP, DELETE, SWAP_A4AF_THIS, etc.\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { Hash16Tag } from '../ec/tag/Tag';\nimport { DownloadCommand } from '../model';\n\nexport class DownloadCommandRequest extends Request {\n\tconstructor(hash: Buffer, command: DownloadCommand) {\n\t\t// The command IS the opcode\n\t\tsuper(DownloadCommandRequest.commandToOpCode(command));\n\n\t\tthis.addTag(new Hash16Tag(ECTagName.EC_TAG_PARTFILE, hash));\n\t}\n\n\tprivate static commandToOpCode(command: DownloadCommand): ECOpCode {\n\t\tswitch (command) {\n\t\t\tcase DownloadCommand.SWAP_A4AF_THIS:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_SWAP_A4AF_THIS;\n\t\t\tcase DownloadCommand.SWAP_A4AF_THIS_AUTO:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_SWAP_A4AF_THIS_AUTO;\n\t\t\tcase DownloadCommand.SWAP_A4AF_OTHERS:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_SWAP_A4AF_OTHERS;\n\t\t\tcase DownloadCommand.PAUSE:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_PAUSE;\n\t\t\tcase DownloadCommand.RESUME:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_RESUME;\n\t\t\tcase DownloadCommand.STOP:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_STOP;\n\t\t\tcase DownloadCommand.DELETE:\n\t\t\t\treturn ECOpCode.EC_OP_PARTFILE_DELETE;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown download command: ${command}`);\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;AAUA,IAAa,yBAAb,MAAa,+BAA+B,QAAQ;CACnD,YAAY,MAAc,SAA0B;EAEnD,MAAM,uBAAuB,gBAAgB,OAAO,CAAC;EAErD,KAAK,OAAO,IAAI,UAAA,KAAqC,IAAI,CAAC;CAC3D;CAEA,OAAe,gBAAgB,SAAoC;EAClE,QAAQ,SAAR;GACC,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,KAAA,IACC,OAAA;GACD,SACC,MAAM,IAAI,MAAM,6BAA6B,SAAS;EACxD;CACD;AACD"}
@@ -0,0 +1,20 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { r as Hash16Tag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/DownloadFileRequest.ts
5
+ /**
6
+ * Download File Request - Download a file from search results
7
+ *
8
+ * This request downloads a file that was found in search results.
9
+ * It uses the file hash to identify the file to download.
10
+ */
11
+ var DownloadFileRequest = class extends Request {
12
+ constructor(hash) {
13
+ super(42);
14
+ this.addTag(new Hash16Tag(768, hash));
15
+ }
16
+ };
17
+ //#endregion
18
+ export { DownloadFileRequest };
19
+
20
+ //# sourceMappingURL=DownloadFileRequest-CcNqsBo7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DownloadFileRequest-CcNqsBo7.mjs","names":[],"sources":["../src/request/DownloadFileRequest.ts"],"sourcesContent":["/**\n * Download File Request - Download a file from search results\n *\n * This request downloads a file that was found in search results.\n * It uses the file hash to identify the file to download.\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName } from '../ec/Codes';\nimport { Hash16Tag } from '../ec/tag/Tag';\n\nexport class DownloadFileRequest extends Request {\n\tconstructor(hash: Buffer) {\n\t\tsuper(ECOpCode.EC_OP_DOWNLOAD_SEARCH_RESULT);\n\n\t\t// Only send the hash - same as jamule DownloadSearchResultRequest\n\t\tthis.addTag(new Hash16Tag(ECTagName.EC_TAG_PARTFILE, hash));\n\t}\n}\n"],"mappings":";;;;;;;;;;AAWA,IAAa,sBAAb,cAAyC,QAAQ;CAChD,YAAY,MAAc;EACzB,MAAA,EAA2C;EAG3C,KAAK,OAAO,IAAI,UAAA,KAAqC,IAAI,CAAC;CAC3D;AACD"}
@@ -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/DownloadQueueRequest.ts
5
+ /**
6
+ * Download Queue Request - Get download queue
7
+ */
8
+ var DownloadQueueRequest = class extends Request {
9
+ constructor(detailLevel = 2) {
10
+ super(13);
11
+ this.addTag(new UByteTag(4, detailLevel));
12
+ }
13
+ };
14
+ //#endregion
15
+ export { DownloadQueueRequest };
16
+
17
+ //# sourceMappingURL=DownloadQueueRequest-bd7lFiMj.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DownloadQueueRequest-bd7lFiMj.mjs","names":[],"sources":["../src/request/DownloadQueueRequest.ts"],"sourcesContent":["/**\n * Download Queue Request - Get download queue\n */\n\nimport { Request } from './Request';\nimport { ECOpCode, ECTagName, ECDetailLevel } from '../ec/Codes';\nimport { UByteTag } from '../ec/tag/Tag';\n\nexport class DownloadQueueRequest extends Request {\n\tconstructor(detailLevel: ECDetailLevel = ECDetailLevel.EC_DETAIL_FULL) {\n\t\tsuper(ECOpCode.EC_OP_GET_DLOAD_QUEUE);\n\n\t\tthis.addTag(new UByteTag(ECTagName.EC_TAG_DETAIL_LEVEL, detailLevel));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,uBAAb,cAA0C,QAAQ;CACjD,YAAY,cAAA,GAA2D;EACtE,MAAA,EAAoC;EAEpC,KAAK,OAAO,IAAI,SAAA,GAAwC,WAAW,CAAC;CACrE;AACD"}
@@ -0,0 +1,261 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag, p as findTag } from "./Tag-CZF6BRMY.mjs";
3
+ import { n as PARTSIZE, t as ChunkStatus } from "./download-details-OM0FJUhZ.mjs";
4
+ import { i as toOptionalNumber, n as toOptionalBool, t as formatIp } from "./utils-DBnUQnZ-.mjs";
5
+ //#region src/response/DownloadDetailsResponse.ts
6
+ function rleDecode(buf) {
7
+ const output = [];
8
+ let index = 0;
9
+ while (index < buf.length) if (index < buf.length - 2 && buf[index + 1] === buf[index]) {
10
+ const value = buf[index];
11
+ const count = buf[index + 2];
12
+ for (let i = 0; i < count; i++) output.push(value);
13
+ index += 3;
14
+ } else {
15
+ output.push(buf[index]);
16
+ index += 1;
17
+ }
18
+ return Buffer.from(output);
19
+ }
20
+ function decodePartStatus(buf) {
21
+ const decoded = rleDecode(buf);
22
+ const result = new Array(decoded.length);
23
+ for (let i = 0; i < decoded.length; i++) result[i] = decoded[i];
24
+ return result;
25
+ }
26
+ function decodeUint64Array(buf) {
27
+ const decoded = rleDecode(buf);
28
+ if (decoded.length === 0 || decoded.length % 8 !== 0) return [];
29
+ const valueCount = decoded.length / 8;
30
+ const values = new Array(valueCount);
31
+ for (let i = 0; i < valueCount; i++) {
32
+ let value = 0;
33
+ for (let byte = 7; byte >= 0; byte--) value = value * 256 + decoded[i + byte * valueCount];
34
+ values[i] = value;
35
+ }
36
+ return values;
37
+ }
38
+ function stringValue(tag) {
39
+ if (!tag) return "";
40
+ const value = tag.getValue();
41
+ return typeof value === "string" ? value : "";
42
+ }
43
+ function bufferValue(tag) {
44
+ if (!tag) return;
45
+ const value = tag.getValue();
46
+ return Buffer.isBuffer(value) ? value : void 0;
47
+ }
48
+ function nestedTag(parent, tagName) {
49
+ return parent.nestedTags ? findTag(parent.nestedTags, tagName) : void 0;
50
+ }
51
+ function nestedNumeric(parent, tagName) {
52
+ if (!parent.nestedTags) return 0;
53
+ const numeric = findNumericTag(parent.nestedTags, tagName);
54
+ if (numeric) return Number(numeric.getValue());
55
+ const tag = findTag(parent.nestedTags, tagName);
56
+ if (!tag) return 0;
57
+ const value = tag.getValue();
58
+ if (typeof value === "number") return value;
59
+ if (typeof value === "bigint") return Number(value);
60
+ return 0;
61
+ }
62
+ function nestedString(parent, tagName) {
63
+ if (!parent.nestedTags) return "";
64
+ return stringValue(findTag(parent.nestedTags, tagName));
65
+ }
66
+ function nestedIp(parent, tagName) {
67
+ const ipAsNumber = nestedNumeric(parent, tagName);
68
+ if (ipAsNumber === 0) return "";
69
+ return formatIp(ipAsNumber);
70
+ }
71
+ var DownloadChunkDetailsResponseParser = class {
72
+ static fromPacket(packet) {
73
+ const result = {};
74
+ const partfileTags = packet.tags.filter((tag) => tag.name === 768);
75
+ for (const fileTag of partfileTags) {
76
+ const hash = bufferValue(nestedTag(fileTag, 798));
77
+ if (!hash) continue;
78
+ const fileHash = hash.toString("hex");
79
+ const sizeFull = nestedNumeric(fileTag, 771);
80
+ const partCount = sizeFull > 0 ? Math.ceil(sizeFull / PARTSIZE) : 0;
81
+ const partStatusBuf = bufferValue(nestedTag(fileTag, 786));
82
+ const gapStatusBuf = bufferValue(nestedTag(fileTag, 787));
83
+ const reqStatusBuf = bufferValue(nestedTag(fileTag, 788));
84
+ const availability = new Array(partCount).fill(0);
85
+ if (partStatusBuf && partStatusBuf.length > 0) {
86
+ const decodedAvailability = decodePartStatus(partStatusBuf);
87
+ for (let i = 0; i < Math.min(decodedAvailability.length, partCount); i++) availability[i] = decodedAvailability[i];
88
+ }
89
+ const chunks = new Array(partCount).fill(ChunkStatus.COMPLETE);
90
+ if (partCount > 0 && gapStatusBuf && gapStatusBuf.length > 0) {
91
+ const gapValues = decodeUint64Array(gapStatusBuf);
92
+ for (let i = 0; i + 1 < gapValues.length; i += 2) {
93
+ const gapStart = gapValues[i];
94
+ const gapEnd = gapValues[i + 1];
95
+ if (gapStart > sizeFull || gapEnd > sizeFull || gapStart >= gapEnd) continue;
96
+ const startPart = Math.floor(gapStart / PARTSIZE);
97
+ const endPart = Math.min(Math.floor(gapEnd / PARTSIZE) + 1, partCount);
98
+ for (let part = startPart; part < endPart; part++) {
99
+ const chunkStart = part * PARTSIZE;
100
+ if (gapStart < Math.min((part + 1) * 9728e3, sizeFull) && gapEnd > chunkStart) chunks[part] = availability[part] > 0 ? ChunkStatus.AVAILABLE : ChunkStatus.UNAVAILABLE;
101
+ }
102
+ }
103
+ }
104
+ if (partCount > 0 && reqStatusBuf && reqStatusBuf.length > 0) {
105
+ const reqValues = decodeUint64Array(reqStatusBuf);
106
+ for (let i = 0; i + 1 < reqValues.length; i += 2) {
107
+ const reqStart = reqValues[i];
108
+ const reqEnd = reqValues[i + 1];
109
+ if (reqStart > sizeFull || reqEnd > sizeFull || reqStart >= reqEnd) continue;
110
+ const startPart = Math.floor(reqStart / PARTSIZE);
111
+ const endPart = Math.min(Math.floor(reqEnd / PARTSIZE) + 1, partCount);
112
+ for (let part = startPart; part < endPart; part++) {
113
+ if (chunks[part] === ChunkStatus.COMPLETE) continue;
114
+ const chunkStart = part * PARTSIZE;
115
+ if (reqStart < Math.min((part + 1) * 9728e3, sizeFull) && reqEnd > chunkStart) chunks[part] = ChunkStatus.DOWNLOADING;
116
+ }
117
+ }
118
+ }
119
+ result[fileHash] = {
120
+ chunks,
121
+ availability,
122
+ partCount,
123
+ sizeFull
124
+ };
125
+ }
126
+ return result;
127
+ }
128
+ };
129
+ var DownloadSourceDetailsResponseParser = class {
130
+ static fromPacket(packet) {
131
+ const result = {};
132
+ const partfileTags = packet.tags.filter((tag) => tag.name === 768);
133
+ for (const fileTag of partfileTags) {
134
+ const hash = bufferValue(nestedTag(fileTag, 798));
135
+ if (!hash) continue;
136
+ const fileHash = hash.toString("hex");
137
+ const sourceNames = [];
138
+ const sources = [];
139
+ for (const nested of fileTag.nestedTags || []) {
140
+ if (nested.name !== 1536) continue;
141
+ sources.push({
142
+ clientName: nestedString(nested, 256) || "Unknown",
143
+ userHash: bufferValue(nestedTag(nested, 1539))?.toString("hex") || "",
144
+ software: nestedString(nested, 1537),
145
+ softwareVersion: nestedString(nested, 1557),
146
+ score: nestedNumeric(nested, 1538),
147
+ uploadSpeed: nestedNumeric(nested, 1549),
148
+ downloadSpeed: nestedNumeric(nested, 1550),
149
+ uploadState: nestedNumeric(nested, 1564),
150
+ downloadState: nestedNumeric(nested, 1548),
151
+ ip: nestedIp(nested, 1552),
152
+ port: nestedNumeric(nested, 1553),
153
+ remoteQueueRank: nestedNumeric(nested, 1562),
154
+ waitingPosition: nestedNumeric(nested, 1558),
155
+ identState: nestedNumeric(nested, 1559),
156
+ obfuscationStatus: nestedNumeric(nested, 1560),
157
+ remoteFilename: nestedString(nested, 1575),
158
+ availableParts: nestedNumeric(nested, 1578),
159
+ sourceFrom: nestedNumeric(nested, 1551)
160
+ });
161
+ }
162
+ const namesTag = nestedTag(fileTag, 789);
163
+ const countsTag = nestedTag(fileTag, 796);
164
+ const nameTags = namesTag?.nestedTags || [];
165
+ const countTags = countsTag?.nestedTags || [];
166
+ for (let i = 0; i < nameTags.length; i++) {
167
+ const name = stringValue(nameTags[i]);
168
+ if (!name) continue;
169
+ const rawCount = countTags[i]?.getValue();
170
+ const count = typeof rawCount === "number" ? rawCount : typeof rawCount === "bigint" ? Number(rawCount) : 1;
171
+ sourceNames.push({
172
+ name,
173
+ count
174
+ });
175
+ }
176
+ result[fileHash] = {
177
+ sources,
178
+ sourceNames
179
+ };
180
+ }
181
+ return result;
182
+ }
183
+ };
184
+ //#endregion
185
+ //#region src/response/DownloadQueueResponse.ts
186
+ var DownloadQueueResponseParser = class {
187
+ static fromPacket(packet) {
188
+ const files = [];
189
+ const chunkDetailsByHash = DownloadChunkDetailsResponseParser.fromPacket(packet);
190
+ const sourceDetailsByHash = DownloadSourceDetailsResponseParser.fromPacket(packet);
191
+ const partfileTags = packet.tags.filter((tag) => tag.name === 768);
192
+ for (const fileTag of partfileTags) {
193
+ const tags = fileTag.nestedTags || [];
194
+ const hashTag = findTag(tags, 798);
195
+ const fileNameTag = findTag(tags, 769);
196
+ let a4afSources = void 0;
197
+ const a4afSourcesTag = findTag(tags, 802);
198
+ if (a4afSourcesTag) {
199
+ a4afSources = [];
200
+ a4afSourcesTag.nestedTags = a4afSourcesTag.nestedTags || [];
201
+ for (const sourceTag of a4afSourcesTag.nestedTags) if (sourceTag.name === 15) a4afSources.push(sourceTag.getValue());
202
+ }
203
+ const file = {
204
+ fileHashHexString: hashTag ? hashTag.getValue().toString("hex") : void 0,
205
+ fileName: fileNameTag ? fileNameTag.getValue() : void 0,
206
+ filePath: findTag(tags, 1032)?.getValue(),
207
+ sizeFull: toOptionalNumber(findNumericTag(tags, 771)?.getLong()),
208
+ fileEd2kLink: findTag(tags, 782)?.getValue(),
209
+ partMetID: findNumericTag(tags, 770)?.getShort(),
210
+ sizeXfer: toOptionalNumber(findNumericTag(tags, 772)?.getLong()),
211
+ sizeDone: toOptionalNumber(findNumericTag(tags, 774)?.getLong()),
212
+ fileStatus: findNumericTag(tags, 776)?.getInt(),
213
+ stopped: toOptionalBool(findNumericTag(tags, 791)?.getInt()),
214
+ sourceCount: findNumericTag(tags, 778)?.getShort(),
215
+ sourceNotCurrCount: findNumericTag(tags, 780)?.getShort(),
216
+ sourceXferCount: findNumericTag(tags, 781)?.getShort(),
217
+ sourceCountA4AF: findNumericTag(tags, 779)?.getShort(),
218
+ speed: toOptionalNumber(findNumericTag(tags, 775)?.getLong()),
219
+ downPrio: findNumericTag(tags, 777)?.getInt(),
220
+ fileCat: toOptionalNumber(findNumericTag(tags, 783)?.getLong()),
221
+ lastSeenComplete: toOptionalNumber(findNumericTag(tags, 785)?.getLong()),
222
+ lastDateChanged: toOptionalNumber(findNumericTag(tags, 784)?.getLong()),
223
+ downloadActiveTime: findNumericTag(tags, 792)?.getInt(),
224
+ availablePartCount: findNumericTag(tags, 797)?.getShort(),
225
+ a4AFAuto: toOptionalBool(findNumericTag(tags, 801)?.getInt()),
226
+ hashingProgress: toOptionalBool(findNumericTag(tags, 800)?.getInt()),
227
+ getLostDueToCorruption: toOptionalNumber(findNumericTag(tags, 793)?.getLong()),
228
+ getGainDueToCompression: toOptionalNumber(findNumericTag(tags, 794)?.getLong()),
229
+ totalPacketsSavedDueToICH: findNumericTag(tags, 795)?.getInt(),
230
+ upPrio: findNumericTag(tags, 1035)?.getInt(),
231
+ getRequests: findNumericTag(tags, 1027)?.getShort(),
232
+ getAllRequests: findNumericTag(tags, 1028)?.getInt(),
233
+ getAccepts: findNumericTag(tags, 1029)?.getShort(),
234
+ getAllAccepts: findNumericTag(tags, 1030)?.getInt(),
235
+ getXferred: toOptionalNumber(findNumericTag(tags, 1025)?.getLong()),
236
+ getAllXferred: toOptionalNumber(findNumericTag(tags, 1026)?.getLong()),
237
+ getCompleteSourcesLow: findNumericTag(tags, 1033)?.getShort(),
238
+ getCompleteSourcesHigh: findNumericTag(tags, 1034)?.getShort(),
239
+ getCompleteSources: findNumericTag(tags, 1037)?.getShort(),
240
+ getOnQueue: findNumericTag(tags, 1036)?.getShort(),
241
+ getComment: findTag(tags, 1038)?.getValue(),
242
+ getRating: findNumericTag(tags, 1039)?.getInt(),
243
+ a4afSources
244
+ };
245
+ if (file.fileHashHexString) {
246
+ file.chunkInfo = chunkDetailsByHash[file.fileHashHexString];
247
+ const sourceDetails = sourceDetailsByHash[file.fileHashHexString];
248
+ if (sourceDetails) {
249
+ file.sources = sourceDetails.sources;
250
+ file.sourceNames = sourceDetails.sourceNames;
251
+ }
252
+ }
253
+ files.push(file);
254
+ }
255
+ return { files };
256
+ }
257
+ };
258
+ //#endregion
259
+ export { DownloadQueueResponseParser };
260
+
261
+ //# sourceMappingURL=DownloadQueueResponse-DyP1rLTV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DownloadQueueResponse-DyP1rLTV.mjs","names":[],"sources":["../src/response/DownloadDetailsResponse.ts","../src/response/DownloadQueueResponse.ts"],"sourcesContent":["import { ECTagName } from '../ec/Codes';\nimport { Packet } from '../ec/packet/Packet';\nimport { findNumericTag, findTag, type Tag } from '../ec/tag/Tag';\nimport { ChunkStatus, PARTSIZE, SourceInfo, type ChunkInfo, type ParsedSource, type SourceNameCount } from '../types/download-details';\nimport { formatIp } from './utils';\n\nfunction rleDecode(buf: Buffer): Buffer {\n\tconst output: number[] = [];\n\tlet index = 0;\n\n\twhile (index < buf.length) {\n\t\tif (index < buf.length - 2 && buf[index + 1] === buf[index]) {\n\t\t\tconst value = buf[index];\n\t\t\tconst count = buf[index + 2];\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t\tindex += 3;\n\t\t} else {\n\t\t\toutput.push(buf[index]);\n\t\t\tindex += 1;\n\t\t}\n\t}\n\n\treturn Buffer.from(output);\n}\n\nfunction decodePartStatus(buf: Buffer): number[] {\n\tconst decoded = rleDecode(buf);\n\tconst result = new Array<number>(decoded.length);\n\tfor (let i = 0; i < decoded.length; i++) {\n\t\tresult[i] = decoded[i];\n\t}\n\treturn result;\n}\n\nfunction decodeUint64Array(buf: Buffer): number[] {\n\tconst decoded = rleDecode(buf);\n\tif (decoded.length === 0 || decoded.length % 8 !== 0) {\n\t\treturn [];\n\t}\n\n\tconst valueCount = decoded.length / 8;\n\tconst values = new Array<number>(valueCount);\n\tfor (let i = 0; i < valueCount; i++) {\n\t\tlet value = 0;\n\t\tfor (let byte = 7; byte >= 0; byte--) {\n\t\t\tvalue = value * 256 + decoded[i + byte * valueCount];\n\t\t}\n\t\tvalues[i] = value;\n\t}\n\treturn values;\n}\n\nfunction stringValue(tag: Tag<any> | undefined): string {\n\tif (!tag) {\n\t\treturn '';\n\t}\n\tconst value = tag.getValue();\n\treturn typeof value === 'string' ? value : '';\n}\n\nfunction bufferValue(tag: Tag<any> | undefined): Buffer | undefined {\n\tif (!tag) {\n\t\treturn undefined;\n\t}\n\tconst value = tag.getValue();\n\treturn Buffer.isBuffer(value) ? value : undefined;\n}\n\nfunction nestedTag(parent: Tag<any>, tagName: ECTagName): Tag<any> | undefined {\n\treturn parent.nestedTags ? findTag(parent.nestedTags, tagName) : undefined;\n}\n\nfunction nestedNumeric(parent: Tag<any>, tagName: ECTagName): number {\n\tif (!parent.nestedTags) {\n\t\treturn 0;\n\t}\n\tconst numeric = findNumericTag(parent.nestedTags, tagName);\n\tif (numeric) {\n\t\treturn Number(numeric.getValue());\n\t}\n\tconst tag = findTag(parent.nestedTags, tagName);\n\tif (!tag) return 0;\n\n\tconst value = tag.getValue();\n\tif (typeof value === 'number') return value;\n\tif (typeof value === 'bigint') return Number(value);\n\n\treturn 0;\n}\n\nfunction nestedString(parent: Tag<any>, tagName: ECTagName): string {\n\tif (!parent.nestedTags) {\n\t\treturn '';\n\t}\n\treturn stringValue(findTag(parent.nestedTags, tagName));\n}\n\nfunction nestedIp(parent: Tag<any>, tagName: ECTagName): string {\n\tconst ipAsNumber = nestedNumeric(parent, tagName);\n\tif (ipAsNumber === 0) {\n\t\treturn '';\n\t}\n\treturn formatIp(ipAsNumber);\n}\n\nexport class DownloadChunkDetailsResponseParser {\n\tstatic fromPacket(packet: Packet): Record<string, ChunkInfo> {\n\t\tconst result: Record<string, ChunkInfo> = {};\n\t\tconst partfileTags = packet.tags.filter((tag) => tag.name === ECTagName.EC_TAG_PARTFILE);\n\n\t\tfor (const fileTag of partfileTags) {\n\t\t\tconst hash = bufferValue(nestedTag(fileTag, ECTagName.EC_TAG_PARTFILE_HASH));\n\t\t\tif (!hash) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst fileHash = hash.toString('hex');\n\n\t\t\tconst sizeFull = nestedNumeric(fileTag, ECTagName.EC_TAG_PARTFILE_SIZE_FULL);\n\t\t\tconst partCount = sizeFull > 0 ? Math.ceil(sizeFull / PARTSIZE) : 0;\n\n\t\t\tconst partStatusBuf = bufferValue(nestedTag(fileTag, ECTagName.EC_TAG_PARTFILE_PART_STATUS));\n\t\t\tconst gapStatusBuf = bufferValue(nestedTag(fileTag, ECTagName.EC_TAG_PARTFILE_GAP_STATUS));\n\t\t\tconst reqStatusBuf = bufferValue(nestedTag(fileTag, ECTagName.EC_TAG_PARTFILE_REQ_STATUS));\n\n\t\t\tconst availability = new Array<number>(partCount).fill(0);\n\t\t\tif (partStatusBuf && partStatusBuf.length > 0) {\n\t\t\t\tconst decodedAvailability = decodePartStatus(partStatusBuf);\n\t\t\t\tfor (let i = 0; i < Math.min(decodedAvailability.length, partCount); i++) {\n\t\t\t\t\tavailability[i] = decodedAvailability[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst chunks = new Array<number>(partCount).fill(ChunkStatus.COMPLETE);\n\t\t\tif (partCount > 0 && gapStatusBuf && gapStatusBuf.length > 0) {\n\t\t\t\tconst gapValues = decodeUint64Array(gapStatusBuf);\n\t\t\t\tfor (let i = 0; i + 1 < gapValues.length; i += 2) {\n\t\t\t\t\tconst gapStart = gapValues[i];\n\t\t\t\t\tconst gapEnd = gapValues[i + 1];\n\t\t\t\t\tif (gapStart > sizeFull || gapEnd > sizeFull || gapStart >= gapEnd) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst startPart = Math.floor(gapStart / PARTSIZE);\n\t\t\t\t\tconst endPart = Math.min(Math.floor(gapEnd / PARTSIZE) + 1, partCount);\n\t\t\t\t\tfor (let part = startPart; part < endPart; part++) {\n\t\t\t\t\t\tconst chunkStart = part * PARTSIZE;\n\t\t\t\t\t\tconst chunkEnd = Math.min((part + 1) * PARTSIZE, sizeFull);\n\t\t\t\t\t\tif (gapStart < chunkEnd && gapEnd > chunkStart) {\n\t\t\t\t\t\t\tchunks[part] = availability[part] > 0 ? ChunkStatus.AVAILABLE : ChunkStatus.UNAVAILABLE;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (partCount > 0 && reqStatusBuf && reqStatusBuf.length > 0) {\n\t\t\t\tconst reqValues = decodeUint64Array(reqStatusBuf);\n\t\t\t\tfor (let i = 0; i + 1 < reqValues.length; i += 2) {\n\t\t\t\t\tconst reqStart = reqValues[i];\n\t\t\t\t\tconst reqEnd = reqValues[i + 1];\n\t\t\t\t\tif (reqStart > sizeFull || reqEnd > sizeFull || reqStart >= reqEnd) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst startPart = Math.floor(reqStart / PARTSIZE);\n\t\t\t\t\tconst endPart = Math.min(Math.floor(reqEnd / PARTSIZE) + 1, partCount);\n\t\t\t\t\tfor (let part = startPart; part < endPart; part++) {\n\t\t\t\t\t\tif (chunks[part] === ChunkStatus.COMPLETE) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst chunkStart = part * PARTSIZE;\n\t\t\t\t\t\tconst chunkEnd = Math.min((part + 1) * PARTSIZE, sizeFull);\n\t\t\t\t\t\tif (reqStart < chunkEnd && reqEnd > chunkStart) {\n\t\t\t\t\t\t\tchunks[part] = ChunkStatus.DOWNLOADING;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult[fileHash] = { chunks, availability, partCount, sizeFull };\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport class DownloadSourceDetailsResponseParser {\n\tstatic fromPacket(packet: Packet): Record<string, SourceInfo> {\n\t\tconst result: Record<string, SourceInfo> = {};\n\t\tconst partfileTags = packet.tags.filter((tag) => tag.name === ECTagName.EC_TAG_PARTFILE);\n\n\t\tfor (const fileTag of partfileTags) {\n\t\t\tconst hash = bufferValue(nestedTag(fileTag, ECTagName.EC_TAG_PARTFILE_HASH));\n\t\t\tif (!hash) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst fileHash = hash.toString('hex');\n\t\t\tconst sourceNames: SourceNameCount[] = [];\n\t\t\tconst sources: ParsedSource[] = [];\n\n\t\t\tfor (const nested of fileTag.nestedTags || []) {\n\t\t\t\tif (nested.name !== ECTagName.EC_TAG_CLIENT) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tsources.push({\n\t\t\t\t\tclientName: nestedString(nested, ECTagName.EC_TAG_CLIENT_NAME) || 'Unknown',\n\t\t\t\t\tuserHash: bufferValue(nestedTag(nested, ECTagName.EC_TAG_CLIENT_HASH))?.toString('hex') || '',\n\t\t\t\t\tsoftware: nestedString(nested, ECTagName.EC_TAG_CLIENT_SOFTWARE),\n\t\t\t\t\tsoftwareVersion: nestedString(nested, ECTagName.EC_TAG_CLIENT_SOFT_VER_STR),\n\t\t\t\t\tscore: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_SCORE),\n\t\t\t\t\tuploadSpeed: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_UP_SPEED),\n\t\t\t\t\tdownloadSpeed: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_DOWN_SPEED),\n\t\t\t\t\tuploadState: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_UPLOAD_STATE),\n\t\t\t\t\tdownloadState: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_DOWNLOAD_STATE),\n\t\t\t\t\tip: nestedIp(nested, ECTagName.EC_TAG_CLIENT_USER_IP),\n\t\t\t\t\tport: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_USER_PORT),\n\t\t\t\t\tremoteQueueRank: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_REMOTE_QUEUE_RANK),\n\t\t\t\t\twaitingPosition: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_WAITING_POSITION),\n\t\t\t\t\tidentState: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_IDENT_STATE),\n\t\t\t\t\tobfuscationStatus: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_OBFUSCATION_STATUS),\n\t\t\t\t\tremoteFilename: nestedString(nested, ECTagName.EC_TAG_CLIENT_REMOTE_FILENAME),\n\t\t\t\t\tavailableParts: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_AVAILABLE_PARTS),\n\t\t\t\t\tsourceFrom: nestedNumeric(nested, ECTagName.EC_TAG_CLIENT_FROM),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst namesTag = nestedTag(fileTag, ECTagName.EC_TAG_PARTFILE_SOURCE_NAMES);\n\t\t\tconst countsTag = nestedTag(fileTag, ECTagName.EC_TAG_PARTFILE_SOURCE_NAMES_COUNTS);\n\t\t\tconst nameTags = namesTag?.nestedTags || [];\n\t\t\tconst countTags = countsTag?.nestedTags || [];\n\n\t\t\tfor (let i = 0; i < nameTags.length; i++) {\n\t\t\t\tconst name = stringValue(nameTags[i]);\n\t\t\t\tif (!name) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst countTag = countTags[i];\n\t\t\t\tconst rawCount = countTag?.getValue();\n\t\t\t\tconst count = typeof rawCount === 'number' ? rawCount : typeof rawCount === 'bigint' ? Number(rawCount) : 1;\n\t\t\t\tsourceNames.push({ name, count });\n\t\t\t}\n\n\t\t\tresult[fileHash] = { sources, sourceNames };\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","/**\n * Download Queue Response - Parse download queue\n */\n\nimport { Packet } from '../ec/packet/Packet';\nimport { ECTagName } from '../ec/Codes';\nimport { findNumericTag, findTag } from '../ec/tag/Tag';\nimport type { AmuleTransferringFile, FileStatus } from '../model';\nimport { DownloadChunkDetailsResponseParser, DownloadSourceDetailsResponseParser } from './DownloadDetailsResponse';\nimport { toOptionalBool, toOptionalNumber } from './utils';\n\nexport interface DownloadQueueResponse {\n\tfiles: AmuleTransferringFile[];\n}\n\nexport class DownloadQueueResponseParser {\n\tstatic fromPacket(packet: Packet): DownloadQueueResponse {\n\t\tconst files: AmuleTransferringFile[] = [];\n\t\tconst chunkDetailsByHash = DownloadChunkDetailsResponseParser.fromPacket(packet);\n\t\tconst sourceDetailsByHash = DownloadSourceDetailsResponseParser.fromPacket(packet);\n\n\t\t// Find all partfile tags\n\t\tconst partfileTags = packet.tags.filter((tag) => tag.name === ECTagName.EC_TAG_PARTFILE);\n\n\t\tfor (const fileTag of partfileTags) {\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\tlet a4afSources: number[] | undefined = undefined; // Will be filled if A4AF sources are present\n\t\t\tconst a4afSourcesTag = findTag(tags, ECTagName.EC_TAG_PARTFILE_A4AF_SOURCES);\n\t\t\tif (a4afSourcesTag) {\n\t\t\t\ta4afSources = [];\n\t\t\t\ta4afSourcesTag.nestedTags = a4afSourcesTag.nestedTags || [];\n\t\t\t\tfor (const sourceTag of a4afSourcesTag.nestedTags) {\n\t\t\t\t\tif (sourceTag.name === ECTagName.EC_TAG_ECID) {\n\t\t\t\t\t\ta4afSources.push(sourceTag.getValue());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Basic file info\n\t\t\tconst file: AmuleTransferringFile = {\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\t// Transfer info\n\t\t\t\tpartMetID: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_PARTMETID)?.getShort(),\n\t\t\t\tsizeXfer: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SIZE_XFER)?.getLong()),\n\t\t\t\tsizeDone: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SIZE_DONE)?.getLong()),\n\t\t\t\tfileStatus: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_STATUS)?.getInt() as FileStatus | undefined,\n\t\t\t\tstopped: toOptionalBool(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_STOPPED)?.getInt()),\n\t\t\t\tsourceCount: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SOURCE_COUNT)?.getShort(),\n\t\t\t\tsourceNotCurrCount: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT)?.getShort(),\n\t\t\t\tsourceXferCount: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SOURCE_COUNT_XFER)?.getShort(),\n\t\t\t\tsourceCountA4AF: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SOURCE_COUNT_A4AF)?.getShort(),\n\t\t\t\tspeed: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SPEED)?.getLong()),\n\t\t\t\tdownPrio: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_PRIO)?.getInt(),\n\t\t\t\tfileCat: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_CAT)?.getLong()),\n\t\t\t\tlastSeenComplete: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_LAST_SEEN_COMP)?.getLong()),\n\t\t\t\tlastDateChanged: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_LAST_RECV)?.getLong()),\n\t\t\t\tdownloadActiveTime: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_DOWNLOAD_ACTIVE)?.getInt(),\n\t\t\t\tavailablePartCount: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_AVAILABLE_PARTS)?.getShort(),\n\t\t\t\ta4AFAuto: toOptionalBool(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_A4AFAUTO)?.getInt()),\n\t\t\t\thashingProgress: toOptionalBool(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_HASHED_PART_COUNT)?.getInt()),\n\n\t\t\t\t// Statistics\n\t\t\t\tgetLostDueToCorruption: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_LOST_CORRUPTION)?.getLong()),\n\t\t\t\tgetGainDueToCompression: toOptionalNumber(findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_GAINED_COMPRESSION)?.getLong()),\n\t\t\t\ttotalPacketsSavedDueToICH: findNumericTag(tags, ECTagName.EC_TAG_PARTFILE_SAVED_ICH)?.getInt(),\n\n\t\t\t\t// Known file shared info\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\ta4afSources,\n\t\t\t};\n\n\t\t\tif (file.fileHashHexString) {\n\t\t\t\tfile.chunkInfo = chunkDetailsByHash[file.fileHashHexString];\n\t\t\t\tconst sourceDetails = sourceDetailsByHash[file.fileHashHexString];\n\t\t\t\tif (sourceDetails) {\n\t\t\t\t\tfile.sources = sourceDetails.sources;\n\t\t\t\t\tfile.sourceNames = sourceDetails.sourceNames;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfiles.push(file);\n\t\t}\n\n\t\treturn { files };\n\t}\n}\n"],"mappings":";;;;;AAMA,SAAS,UAAU,KAAqB;CACvC,MAAM,SAAmB,CAAC;CAC1B,IAAI,QAAQ;CAEZ,OAAO,QAAQ,IAAI,QAClB,IAAI,QAAQ,IAAI,SAAS,KAAK,IAAI,QAAQ,OAAO,IAAI,QAAQ;EAC5D,MAAM,QAAQ,IAAI;EAClB,MAAM,QAAQ,IAAI,QAAQ;EAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAC1B,OAAO,KAAK,KAAK;EAElB,SAAS;CACV,OAAO;EACN,OAAO,KAAK,IAAI,MAAM;EACtB,SAAS;CACV;CAGD,OAAO,OAAO,KAAK,MAAM;AAC1B;AAEA,SAAS,iBAAiB,KAAuB;CAChD,MAAM,UAAU,UAAU,GAAG;CAC7B,MAAM,SAAS,IAAI,MAAc,QAAQ,MAAM;CAC/C,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KACnC,OAAO,KAAK,QAAQ;CAErB,OAAO;AACR;AAEA,SAAS,kBAAkB,KAAuB;CACjD,MAAM,UAAU,UAAU,GAAG;CAC7B,IAAI,QAAQ,WAAW,KAAK,QAAQ,SAAS,MAAM,GAClD,OAAO,CAAC;CAGT,MAAM,aAAa,QAAQ,SAAS;CACpC,MAAM,SAAS,IAAI,MAAc,UAAU;CAC3C,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;EACpC,IAAI,QAAQ;EACZ,KAAK,IAAI,OAAO,GAAG,QAAQ,GAAG,QAC7B,QAAQ,QAAQ,MAAM,QAAQ,IAAI,OAAO;EAE1C,OAAO,KAAK;CACb;CACA,OAAO;AACR;AAEA,SAAS,YAAY,KAAmC;CACvD,IAAI,CAAC,KACJ,OAAO;CAER,MAAM,QAAQ,IAAI,SAAS;CAC3B,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC5C;AAEA,SAAS,YAAY,KAA+C;CACnE,IAAI,CAAC,KACJ;CAED,MAAM,QAAQ,IAAI,SAAS;CAC3B,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ,KAAA;AACzC;AAEA,SAAS,UAAU,QAAkB,SAA0C;CAC9E,OAAO,OAAO,aAAa,QAAQ,OAAO,YAAY,OAAO,IAAI,KAAA;AAClE;AAEA,SAAS,cAAc,QAAkB,SAA4B;CACpE,IAAI,CAAC,OAAO,YACX,OAAO;CAER,MAAM,UAAU,eAAe,OAAO,YAAY,OAAO;CACzD,IAAI,SACH,OAAO,OAAO,QAAQ,SAAS,CAAC;CAEjC,MAAM,MAAM,QAAQ,OAAO,YAAY,OAAO;CAC9C,IAAI,CAAC,KAAK,OAAO;CAEjB,MAAM,QAAQ,IAAI,SAAS;CAC3B,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,IAAI,OAAO,UAAU,UAAU,OAAO,OAAO,KAAK;CAElD,OAAO;AACR;AAEA,SAAS,aAAa,QAAkB,SAA4B;CACnE,IAAI,CAAC,OAAO,YACX,OAAO;CAER,OAAO,YAAY,QAAQ,OAAO,YAAY,OAAO,CAAC;AACvD;AAEA,SAAS,SAAS,QAAkB,SAA4B;CAC/D,MAAM,aAAa,cAAc,QAAQ,OAAO;CAChD,IAAI,eAAe,GAClB,OAAO;CAER,OAAO,SAAS,UAAU;AAC3B;AAEA,IAAa,qCAAb,MAAgD;CAC/C,OAAO,WAAW,QAA2C;EAC5D,MAAM,SAAoC,CAAC;EAC3C,MAAM,eAAe,OAAO,KAAK,QAAQ,QAAQ,IAAI,SAAA,GAAkC;EAEvF,KAAK,MAAM,WAAW,cAAc;GACnC,MAAM,OAAO,YAAY,UAAU,SAAA,GAAuC,CAAC;GAC3E,IAAI,CAAC,MACJ;GAGD,MAAM,WAAW,KAAK,SAAS,KAAK;GAEpC,MAAM,WAAW,cAAc,SAAA,GAA4C;GAC3E,MAAM,YAAY,WAAW,IAAI,KAAK,KAAK,WAAW,QAAQ,IAAI;GAElE,MAAM,gBAAgB,YAAY,UAAU,SAAA,GAA8C,CAAC;GAC3F,MAAM,eAAe,YAAY,UAAU,SAAA,GAA6C,CAAC;GACzF,MAAM,eAAe,YAAY,UAAU,SAAA,GAA6C,CAAC;GAEzF,MAAM,eAAe,IAAI,MAAc,SAAS,CAAC,CAAC,KAAK,CAAC;GACxD,IAAI,iBAAiB,cAAc,SAAS,GAAG;IAC9C,MAAM,sBAAsB,iBAAiB,aAAa;IAC1D,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,oBAAoB,QAAQ,SAAS,GAAG,KACpE,aAAa,KAAK,oBAAoB;GAExC;GAEA,MAAM,SAAS,IAAI,MAAc,SAAS,CAAC,CAAC,KAAK,YAAY,QAAQ;GACrE,IAAI,YAAY,KAAK,gBAAgB,aAAa,SAAS,GAAG;IAC7D,MAAM,YAAY,kBAAkB,YAAY;IAChD,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,UAAU,QAAQ,KAAK,GAAG;KACjD,MAAM,WAAW,UAAU;KAC3B,MAAM,SAAS,UAAU,IAAI;KAC7B,IAAI,WAAW,YAAY,SAAS,YAAY,YAAY,QAC3D;KAGD,MAAM,YAAY,KAAK,MAAM,WAAW,QAAQ;KAChD,MAAM,UAAU,KAAK,IAAI,KAAK,MAAM,SAAS,QAAQ,IAAI,GAAG,SAAS;KACrE,KAAK,IAAI,OAAO,WAAW,OAAO,SAAS,QAAQ;MAClD,MAAM,aAAa,OAAO;MAE1B,IAAI,WADa,KAAK,KAAK,OAAO,KAAA,QAAe,QAC3B,KAAK,SAAS,YACnC,OAAO,QAAQ,aAAa,QAAQ,IAAI,YAAY,YAAY,YAAY;KAE9E;IACD;GACD;GAEA,IAAI,YAAY,KAAK,gBAAgB,aAAa,SAAS,GAAG;IAC7D,MAAM,YAAY,kBAAkB,YAAY;IAChD,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,UAAU,QAAQ,KAAK,GAAG;KACjD,MAAM,WAAW,UAAU;KAC3B,MAAM,SAAS,UAAU,IAAI;KAC7B,IAAI,WAAW,YAAY,SAAS,YAAY,YAAY,QAC3D;KAGD,MAAM,YAAY,KAAK,MAAM,WAAW,QAAQ;KAChD,MAAM,UAAU,KAAK,IAAI,KAAK,MAAM,SAAS,QAAQ,IAAI,GAAG,SAAS;KACrE,KAAK,IAAI,OAAO,WAAW,OAAO,SAAS,QAAQ;MAClD,IAAI,OAAO,UAAU,YAAY,UAChC;MAED,MAAM,aAAa,OAAO;MAE1B,IAAI,WADa,KAAK,KAAK,OAAO,KAAA,QAAe,QAC3B,KAAK,SAAS,YACnC,OAAO,QAAQ,YAAY;KAE7B;IACD;GACD;GAEA,OAAO,YAAY;IAAE;IAAQ;IAAc;IAAW;GAAS;EAChE;EAEA,OAAO;CACR;AACD;AAEA,IAAa,sCAAb,MAAiD;CAChD,OAAO,WAAW,QAA4C;EAC7D,MAAM,SAAqC,CAAC;EAC5C,MAAM,eAAe,OAAO,KAAK,QAAQ,QAAQ,IAAI,SAAA,GAAkC;EAEvF,KAAK,MAAM,WAAW,cAAc;GACnC,MAAM,OAAO,YAAY,UAAU,SAAA,GAAuC,CAAC;GAC3E,IAAI,CAAC,MACJ;GAGD,MAAM,WAAW,KAAK,SAAS,KAAK;GACpC,MAAM,cAAiC,CAAC;GACxC,MAAM,UAA0B,CAAC;GAEjC,KAAK,MAAM,UAAU,QAAQ,cAAc,CAAC,GAAG;IAC9C,IAAI,OAAO,SAAA,MACV;IAGD,QAAQ,KAAK;KACZ,YAAY,aAAa,QAAA,GAAoC,KAAK;KAClE,UAAU,YAAY,UAAU,QAAA,IAAoC,CAAC,CAAC,EAAE,SAAS,KAAK,KAAK;KAC3F,UAAU,aAAa,QAAA,IAAwC;KAC/D,iBAAiB,aAAa,QAAA,IAA4C;KAC1E,OAAO,cAAc,QAAA,IAAqC;KAC1D,aAAa,cAAc,QAAA,IAAwC;KACnE,eAAe,cAAc,QAAA,IAA0C;KACvE,aAAa,cAAc,QAAA,IAA4C;KACvE,eAAe,cAAc,QAAA,IAA8C;KAC3E,IAAI,SAAS,QAAA,IAAuC;KACpD,MAAM,cAAc,QAAA,IAAyC;KAC7D,iBAAiB,cAAc,QAAA,IAAiD;KAChF,iBAAiB,cAAc,QAAA,IAAgD;KAC/E,YAAY,cAAc,QAAA,IAA2C;KACrE,mBAAmB,cAAc,QAAA,IAAkD;KACnF,gBAAgB,aAAa,QAAA,IAA+C;KAC5E,gBAAgB,cAAc,QAAA,IAA+C;KAC7E,YAAY,cAAc,QAAA,IAAoC;IAC/D,CAAC;GACF;GAEA,MAAM,WAAW,UAAU,SAAA,GAA+C;GAC1E,MAAM,YAAY,UAAU,SAAA,GAAsD;GAClF,MAAM,WAAW,UAAU,cAAc,CAAC;GAC1C,MAAM,YAAY,WAAW,cAAc,CAAC;GAE5C,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;IACzC,MAAM,OAAO,YAAY,SAAS,EAAE;IACpC,IAAI,CAAC,MACJ;IAGD,MAAM,WADW,UAAU,EACF,EAAE,SAAS;IACpC,MAAM,QAAQ,OAAO,aAAa,WAAW,WAAW,OAAO,aAAa,WAAW,OAAO,QAAQ,IAAI;IAC1G,YAAY,KAAK;KAAE;KAAM;IAAM,CAAC;GACjC;GAEA,OAAO,YAAY;IAAE;IAAS;GAAY;EAC3C;EAEA,OAAO;CACR;AACD;;;AC5OA,IAAa,8BAAb,MAAyC;CACxC,OAAO,WAAW,QAAuC;EACxD,MAAM,QAAiC,CAAC;EACxC,MAAM,qBAAqB,mCAAmC,WAAW,MAAM;EAC/E,MAAM,sBAAsB,oCAAoC,WAAW,MAAM;EAGjF,MAAM,eAAe,OAAO,KAAK,QAAQ,QAAQ,IAAI,SAAA,GAAkC;EAEvF,KAAK,MAAM,WAAW,cAAc;GACnC,MAAM,OAAO,QAAQ,cAAc,CAAC;GAEpC,MAAM,UAAU,QAAQ,MAAA,GAAoC;GAC5D,MAAM,cAAc,QAAQ,MAAA,GAAoC;GAEhE,IAAI,cAAoC,KAAA;GACxC,MAAM,iBAAiB,QAAQ,MAAA,GAA4C;GAC3E,IAAI,gBAAgB;IACnB,cAAc,CAAC;IACf,eAAe,aAAa,eAAe,cAAc,CAAC;IAC1D,KAAK,MAAM,aAAa,eAAe,YACtC,IAAI,UAAU,SAAA,IACb,YAAY,KAAK,UAAU,SAAS,CAAC;GAGxC;GAGA,MAAM,OAA8B;IACnC,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;IAG3E,WAAW,eAAe,MAAA,GAAyC,CAAC,EAAE,SAAS;IAC/E,UAAU,iBAAiB,eAAe,MAAA,GAAyC,CAAC,EAAE,QAAQ,CAAC;IAC/F,UAAU,iBAAiB,eAAe,MAAA,GAAyC,CAAC,EAAE,QAAQ,CAAC;IAC/F,YAAY,eAAe,MAAA,GAAsC,CAAC,EAAE,OAAO;IAC3E,SAAS,eAAe,eAAe,MAAA,GAAuC,CAAC,EAAE,OAAO,CAAC;IACzF,aAAa,eAAe,MAAA,GAA4C,CAAC,EAAE,SAAS;IACpF,oBAAoB,eAAe,MAAA,GAAwD,CAAC,EAAE,SAAS;IACvG,iBAAiB,eAAe,MAAA,GAAiD,CAAC,EAAE,SAAS;IAC7F,iBAAiB,eAAe,MAAA,GAAiD,CAAC,EAAE,SAAS;IAC7F,OAAO,iBAAiB,eAAe,MAAA,GAAqC,CAAC,EAAE,QAAQ,CAAC;IACxF,UAAU,eAAe,MAAA,GAAoC,CAAC,EAAE,OAAO;IACvE,SAAS,iBAAiB,eAAe,MAAA,GAAmC,CAAC,EAAE,QAAQ,CAAC;IACxF,kBAAkB,iBAAiB,eAAe,MAAA,GAA8C,CAAC,EAAE,QAAQ,CAAC;IAC5G,iBAAiB,iBAAiB,eAAe,MAAA,GAAyC,CAAC,EAAE,QAAQ,CAAC;IACtG,oBAAoB,eAAe,MAAA,GAA+C,CAAC,EAAE,OAAO;IAC5F,oBAAoB,eAAe,MAAA,GAA+C,CAAC,EAAE,SAAS;IAC9F,UAAU,eAAe,eAAe,MAAA,GAAwC,CAAC,EAAE,OAAO,CAAC;IAC3F,iBAAiB,eAAe,eAAe,MAAA,GAAiD,CAAC,EAAE,OAAO,CAAC;IAG3G,wBAAwB,iBAAiB,eAAe,MAAA,GAA+C,CAAC,EAAE,QAAQ,CAAC;IACnH,yBAAyB,iBAAiB,eAAe,MAAA,GAAkD,CAAC,EAAE,QAAQ,CAAC;IACvH,2BAA2B,eAAe,MAAA,GAAyC,CAAC,EAAE,OAAO;IAG7F,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;IAC3E;GACD;GAEA,IAAI,KAAK,mBAAmB;IAC3B,KAAK,YAAY,mBAAmB,KAAK;IACzC,MAAM,gBAAgB,oBAAoB,KAAK;IAC/C,IAAI,eAAe;KAClB,KAAK,UAAU,cAAc;KAC7B,KAAK,cAAc,cAAc;IAClC;GACD;GAEA,MAAM,KAAK,IAAI;EAChB;EAEA,OAAO,EAAE,MAAM;CAChB;AACD"}
@@ -0,0 +1,18 @@
1
+ import { t as Request } from "./Request-C0UUuQIX.mjs";
2
+ import "./Codes-CjiW7Pdl.mjs";
3
+ import { l as UIntTag, s as UByteTag } from "./Tag-CZF6BRMY.mjs";
4
+ //#region src/request/GetPreferencesRequest.ts
5
+ /**
6
+ * Preferences Request - Get preferences
7
+ */
8
+ var GetPreferencesRequest = class extends Request {
9
+ constructor(pref) {
10
+ super(63);
11
+ this.addTag(new UByteTag(4, 2));
12
+ this.addTag(new UIntTag(4096, pref));
13
+ }
14
+ };
15
+ //#endregion
16
+ export { GetPreferencesRequest };
17
+
18
+ //# sourceMappingURL=GetPreferencesRequest-C94Su9IH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetPreferencesRequest-C94Su9IH.mjs","names":[],"sources":["../src/request/GetPreferencesRequest.ts"],"sourcesContent":["/**\n * Preferences Request - Get preferences\n */\n\nimport { Request } from './Request';\nimport { ECDetailLevel, ECOpCode, EcPrefs, ECTagName } from '../ec/Codes';\nimport { UByteTag, UIntTag } from '../ec/tag/Tag';\n\nexport class GetPreferencesRequest extends Request {\n\tconstructor(pref: EcPrefs) {\n\t\tsuper(ECOpCode.EC_OP_GET_PREFERENCES);\n\t\tthis.addTag(new UByteTag(ECTagName.EC_TAG_DETAIL_LEVEL, ECDetailLevel.EC_DETAIL_FULL));\n\t\tthis.addTag(new UIntTag(ECTagName.EC_TAG_SELECT_PREFS, pref));\n\t}\n}\n"],"mappings":";;;;;;;AAQA,IAAa,wBAAb,cAA2C,QAAQ;CAClD,YAAY,MAAe;EAC1B,MAAA,EAAoC;EACpC,KAAK,OAAO,IAAI,SAAA,GAAA,CAAoE,CAAC;EACrF,KAAK,OAAO,IAAI,QAAA,MAAuC,IAAI,CAAC;CAC7D;AACD"}
@@ -0,0 +1,96 @@
1
+ import "./Codes-CjiW7Pdl.mjs";
2
+ import { f as findNumericTag, p as findTag } from "./Tag-CZF6BRMY.mjs";
3
+ //#region src/response/PreferencesDetailsResponse.ts
4
+ var PreferencesDetailsResponse = class {
5
+ preferences;
6
+ constructor(preferences) {
7
+ this.preferences = preferences;
8
+ }
9
+ };
10
+ function getNestedTag(parent, name) {
11
+ if (!parent?.nestedTags) return;
12
+ return findTag(parent.nestedTags, name);
13
+ }
14
+ function getNestedNumber(parent, name, fallback) {
15
+ if (!parent?.nestedTags) return fallback;
16
+ const numeric = findNumericTag(parent.nestedTags, name);
17
+ if (numeric) return Number(numeric.getValue());
18
+ const tag = findTag(parent.nestedTags, name);
19
+ if (!tag) return fallback;
20
+ const value = tag.getValue();
21
+ if (typeof value === "number") return value;
22
+ if (typeof value === "bigint") return Number(value);
23
+ return fallback;
24
+ }
25
+ function getNestedBool(parent, name, fallback) {
26
+ const tag = getNestedTag(parent, name);
27
+ if (!tag) return fallback;
28
+ const value = tag.getValue();
29
+ if (typeof value === "boolean") return value;
30
+ if (typeof value === "number") return value !== 0;
31
+ if (typeof value === "bigint") return value !== 0n;
32
+ if (Buffer.isBuffer(value)) return value.length === 0 || value.some((byte) => byte !== 0);
33
+ return true;
34
+ }
35
+ function getNestedString(parent, name, fallback) {
36
+ const tag = getNestedTag(parent, name);
37
+ if (!tag) return fallback;
38
+ const value = tag.getValue();
39
+ return typeof value === "string" ? value : fallback;
40
+ }
41
+ var PreferencesDetailsResponseParser = class {
42
+ static fromPacket(packet) {
43
+ const generalTag = findTag(packet.tags, 4608);
44
+ const connectionTag = findTag(packet.tags, 4864);
45
+ const serversTag = findTag(packet.tags, 5888);
46
+ const securityTag = findTag(packet.tags, 7168);
47
+ return new PreferencesDetailsResponse({
48
+ general: {
49
+ userNick: getNestedString(generalTag, 4609, ""),
50
+ checkNewVersion: getNestedBool(generalTag, 4612, false)
51
+ },
52
+ connection: {
53
+ uploadCapacity: getNestedNumber(connectionTag, 4866, 0),
54
+ downloadCapacity: getNestedNumber(connectionTag, 4865, 0),
55
+ maxUploadSpeed: getNestedNumber(connectionTag, 4868, 0),
56
+ maxDownloadSpeed: getNestedNumber(connectionTag, 4867, 0),
57
+ slotAllocation: getNestedNumber(connectionTag, 4869, 2),
58
+ tcpPort: getNestedNumber(connectionTag, 4870, 4662),
59
+ udpPort: getNestedNumber(connectionTag, 4871, 4672),
60
+ maxFileSources: getNestedNumber(connectionTag, 4873, 300),
61
+ maxConnections: getNestedNumber(connectionTag, 4874, 500),
62
+ autoconnect: getNestedBool(connectionTag, 4875, false),
63
+ reconnect: getNestedBool(connectionTag, 4876, false),
64
+ networkED2K: getNestedBool(connectionTag, 4877, true),
65
+ networkKademlia: getNestedBool(connectionTag, 4878, false)
66
+ },
67
+ servers: {
68
+ removeDead: getNestedBool(serversTag, 5889, true),
69
+ deadRetries: getNestedNumber(serversTag, 5890, 3),
70
+ useScoreSystem: getNestedBool(serversTag, 5895, true),
71
+ smartIdCheck: getNestedBool(serversTag, 5896, true),
72
+ updateUrl: getNestedString(serversTag, 5900, "")
73
+ },
74
+ security: {
75
+ canSeeShares: getNestedNumber(securityTag, 7169, 2),
76
+ ipFilterClients: getNestedBool(securityTag, 7170, true),
77
+ ipFilterServers: getNestedBool(securityTag, 7171, true),
78
+ ipFilterAutoUpdate: getNestedBool(securityTag, 7172, false),
79
+ ipFilterUpdateUrl: getNestedString(securityTag, 7173, ""),
80
+ ipFilterLevel: getNestedNumber(securityTag, 7174, 127),
81
+ filterLan: getNestedBool(securityTag, 7175, true),
82
+ useSecIdent: getNestedBool(securityTag, 7176, true),
83
+ obfuscationSupported: getNestedBool(securityTag, 7177, true),
84
+ obfuscationRequested: getNestedBool(securityTag, 7178, false),
85
+ obfuscationRequired: getNestedBool(securityTag, 7179, false)
86
+ }
87
+ });
88
+ }
89
+ static preferenceMaskForAllSections() {
90
+ return 2118;
91
+ }
92
+ };
93
+ //#endregion
94
+ export { PreferencesDetailsResponseParser };
95
+
96
+ //# sourceMappingURL=PreferencesDetailsResponse-BjMxbvVY.mjs.map