amule-ec-client 0.4.2 → 0.5.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.
package/dist/index.js CHANGED
@@ -1015,6 +1015,370 @@ var init_StatsResponse = __esm({
1015
1015
  }
1016
1016
  });
1017
1017
 
1018
+ // src/request/UpdateRequest.ts
1019
+ var UpdateRequest_exports = {};
1020
+ __export(UpdateRequest_exports, {
1021
+ UpdateRequest: () => UpdateRequest
1022
+ });
1023
+ var UpdateRequest;
1024
+ var init_UpdateRequest = __esm({
1025
+ "src/request/UpdateRequest.ts"() {
1026
+ "use strict";
1027
+ init_Request();
1028
+ init_Codes();
1029
+ init_Tag();
1030
+ UpdateRequest = class extends Request {
1031
+ constructor(detailLevel = 4 /* EC_DETAIL_INC_UPDATE */) {
1032
+ super(82 /* EC_OP_GET_UPDATE */);
1033
+ this.addTag(new UByteTag(4 /* EC_TAG_DETAIL_LEVEL */, detailLevel));
1034
+ }
1035
+ };
1036
+ }
1037
+ });
1038
+
1039
+ // src/response/utils.ts
1040
+ function formatIp(ip) {
1041
+ if (ip === void 0) return "";
1042
+ return [ip >>> 24 & 255, ip >>> 16 & 255, ip >>> 8 & 255, ip & 255].join(".");
1043
+ }
1044
+ function toOptionalNumber(value) {
1045
+ if (value === void 0) return void 0;
1046
+ return typeof value === "bigint" ? Number(value) : value;
1047
+ }
1048
+ function toOptionalBool(value) {
1049
+ if (value === void 0) return void 0;
1050
+ return value !== 0;
1051
+ }
1052
+ function toOptionalIp(value) {
1053
+ if (value === void 0) return void 0;
1054
+ return formatIp(value);
1055
+ }
1056
+ var init_utils = __esm({
1057
+ "src/response/utils.ts"() {
1058
+ "use strict";
1059
+ }
1060
+ });
1061
+
1062
+ // src/response/SharedFilesResponse.ts
1063
+ var SharedFilesResponse_exports = {};
1064
+ __export(SharedFilesResponse_exports, {
1065
+ SharedFilesResponseParser: () => SharedFilesResponseParser
1066
+ });
1067
+ var SharedFilesResponseParser;
1068
+ var init_SharedFilesResponse = __esm({
1069
+ "src/response/SharedFilesResponse.ts"() {
1070
+ "use strict";
1071
+ init_Codes();
1072
+ init_Tag();
1073
+ init_utils();
1074
+ SharedFilesResponseParser = class {
1075
+ static fromPacket(packet) {
1076
+ const files = [];
1077
+ const knownfileTags = packet.tags.filter((tag) => tag.name === 1024 /* EC_TAG_KNOWNFILE */);
1078
+ for (const fileTag of knownfileTags) {
1079
+ const tags = fileTag.nestedTags || [];
1080
+ const hashTag = findTag(tags, 798 /* EC_TAG_PARTFILE_HASH */);
1081
+ const fileNameTag = findTag(tags, 769 /* EC_TAG_PARTFILE_NAME */);
1082
+ const file = {
1083
+ fileHashHexString: hashTag ? hashTag.getValue().toString("hex") : void 0,
1084
+ fileName: fileNameTag ? fileNameTag.getValue() : void 0,
1085
+ filePath: findTag(tags, 1032 /* EC_TAG_KNOWNFILE_FILENAME */)?.getValue(),
1086
+ sizeFull: toOptionalNumber(findNumericTag(tags, 771 /* EC_TAG_PARTFILE_SIZE_FULL */)?.getLong()),
1087
+ fileEd2kLink: findTag(tags, 782 /* EC_TAG_PARTFILE_ED2K_LINK */)?.getValue(),
1088
+ upPrio: findNumericTag(tags, 1035 /* EC_TAG_KNOWNFILE_PRIO */)?.getInt(),
1089
+ getRequests: findNumericTag(tags, 1027 /* EC_TAG_KNOWNFILE_REQ_COUNT */)?.getShort(),
1090
+ getAllRequests: findNumericTag(tags, 1028 /* EC_TAG_KNOWNFILE_REQ_COUNT_ALL */)?.getInt(),
1091
+ getAccepts: findNumericTag(tags, 1029 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT */)?.getShort(),
1092
+ getAllAccepts: findNumericTag(tags, 1030 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL */)?.getInt(),
1093
+ getXferred: toOptionalNumber(findNumericTag(tags, 1025 /* EC_TAG_KNOWNFILE_XFERRED */)?.getLong()),
1094
+ getAllXferred: toOptionalNumber(findNumericTag(tags, 1026 /* EC_TAG_KNOWNFILE_XFERRED_ALL */)?.getLong()),
1095
+ getCompleteSourcesLow: findNumericTag(tags, 1033 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW */)?.getShort(),
1096
+ getCompleteSourcesHigh: findNumericTag(tags, 1034 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH */)?.getShort(),
1097
+ getCompleteSources: findNumericTag(tags, 1037 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES */)?.getShort(),
1098
+ getOnQueue: findNumericTag(tags, 1036 /* EC_TAG_KNOWNFILE_ON_QUEUE */)?.getShort(),
1099
+ getComment: findTag(tags, 1038 /* EC_TAG_KNOWNFILE_COMMENT */)?.getValue(),
1100
+ getRating: findNumericTag(tags, 1039 /* EC_TAG_KNOWNFILE_RATING */)?.getInt()
1101
+ };
1102
+ files.push(file);
1103
+ }
1104
+ return { files };
1105
+ }
1106
+ };
1107
+ }
1108
+ });
1109
+
1110
+ // src/response/DownloadQueueResponse.ts
1111
+ var DownloadQueueResponse_exports = {};
1112
+ __export(DownloadQueueResponse_exports, {
1113
+ DownloadQueueResponseParser: () => DownloadQueueResponseParser
1114
+ });
1115
+ var DownloadQueueResponseParser;
1116
+ var init_DownloadQueueResponse = __esm({
1117
+ "src/response/DownloadQueueResponse.ts"() {
1118
+ "use strict";
1119
+ init_Codes();
1120
+ init_Tag();
1121
+ init_utils();
1122
+ DownloadQueueResponseParser = class {
1123
+ static fromPacket(packet) {
1124
+ const files = [];
1125
+ const partfileTags = packet.tags.filter((tag) => tag.name === 768 /* EC_TAG_PARTFILE */);
1126
+ for (const fileTag of partfileTags) {
1127
+ const tags = fileTag.nestedTags || [];
1128
+ const hashTag = findTag(tags, 798 /* EC_TAG_PARTFILE_HASH */);
1129
+ const fileNameTag = findTag(tags, 769 /* EC_TAG_PARTFILE_NAME */);
1130
+ let a4afSources = void 0;
1131
+ const a4afSourcesTag = findTag(tags, 802 /* EC_TAG_PARTFILE_A4AF_SOURCES */);
1132
+ if (a4afSourcesTag) {
1133
+ a4afSources = [];
1134
+ a4afSourcesTag.nestedTags = a4afSourcesTag.nestedTags || [];
1135
+ for (const sourceTag of a4afSourcesTag.nestedTags) {
1136
+ if (sourceTag.name === 15 /* EC_TAG_ECID */) {
1137
+ a4afSources.push(sourceTag.getValue());
1138
+ }
1139
+ }
1140
+ }
1141
+ const file = {
1142
+ fileHashHexString: hashTag ? hashTag.getValue().toString("hex") : void 0,
1143
+ fileName: fileNameTag ? fileNameTag.getValue() : void 0,
1144
+ filePath: findTag(tags, 1032 /* EC_TAG_KNOWNFILE_FILENAME */)?.getValue(),
1145
+ sizeFull: toOptionalNumber(findNumericTag(tags, 771 /* EC_TAG_PARTFILE_SIZE_FULL */)?.getLong()),
1146
+ fileEd2kLink: findTag(tags, 782 /* EC_TAG_PARTFILE_ED2K_LINK */)?.getValue(),
1147
+ // Transfer info
1148
+ partMetID: findNumericTag(tags, 770 /* EC_TAG_PARTFILE_PARTMETID */)?.getShort(),
1149
+ sizeXfer: toOptionalNumber(findNumericTag(tags, 772 /* EC_TAG_PARTFILE_SIZE_XFER */)?.getLong()),
1150
+ sizeDone: toOptionalNumber(findNumericTag(tags, 774 /* EC_TAG_PARTFILE_SIZE_DONE */)?.getLong()),
1151
+ fileStatus: findNumericTag(tags, 776 /* EC_TAG_PARTFILE_STATUS */)?.getInt(),
1152
+ stopped: toOptionalBool(findNumericTag(tags, 791 /* EC_TAG_PARTFILE_STOPPED */)?.getInt()),
1153
+ sourceCount: findNumericTag(tags, 778 /* EC_TAG_PARTFILE_SOURCE_COUNT */)?.getShort(),
1154
+ sourceNotCurrCount: findNumericTag(tags, 780 /* EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT */)?.getShort(),
1155
+ sourceXferCount: findNumericTag(tags, 781 /* EC_TAG_PARTFILE_SOURCE_COUNT_XFER */)?.getShort(),
1156
+ sourceCountA4AF: findNumericTag(tags, 779 /* EC_TAG_PARTFILE_SOURCE_COUNT_A4AF */)?.getShort(),
1157
+ speed: toOptionalNumber(findNumericTag(tags, 775 /* EC_TAG_PARTFILE_SPEED */)?.getLong()),
1158
+ downPrio: findNumericTag(tags, 777 /* EC_TAG_PARTFILE_PRIO */)?.getInt(),
1159
+ fileCat: toOptionalNumber(findNumericTag(tags, 783 /* EC_TAG_PARTFILE_CAT */)?.getLong()),
1160
+ lastSeenComplete: toOptionalNumber(findNumericTag(tags, 785 /* EC_TAG_PARTFILE_LAST_SEEN_COMP */)?.getLong()),
1161
+ lastDateChanged: toOptionalNumber(findNumericTag(tags, 784 /* EC_TAG_PARTFILE_LAST_RECV */)?.getLong()),
1162
+ downloadActiveTime: findNumericTag(tags, 792 /* EC_TAG_PARTFILE_DOWNLOAD_ACTIVE */)?.getInt(),
1163
+ availablePartCount: findNumericTag(tags, 797 /* EC_TAG_PARTFILE_AVAILABLE_PARTS */)?.getShort(),
1164
+ a4AFAuto: toOptionalBool(findNumericTag(tags, 801 /* EC_TAG_PARTFILE_A4AFAUTO */)?.getInt()),
1165
+ hashingProgress: toOptionalBool(findNumericTag(tags, 800 /* EC_TAG_PARTFILE_HASHED_PART_COUNT */)?.getInt()),
1166
+ // Statistics
1167
+ getLostDueToCorruption: toOptionalNumber(findNumericTag(tags, 793 /* EC_TAG_PARTFILE_LOST_CORRUPTION */)?.getLong()),
1168
+ getGainDueToCompression: toOptionalNumber(findNumericTag(tags, 794 /* EC_TAG_PARTFILE_GAINED_COMPRESSION */)?.getLong()),
1169
+ totalPacketsSavedDueToICH: findNumericTag(tags, 795 /* EC_TAG_PARTFILE_SAVED_ICH */)?.getInt(),
1170
+ // Known file shared info
1171
+ upPrio: findNumericTag(tags, 1035 /* EC_TAG_KNOWNFILE_PRIO */)?.getInt(),
1172
+ getRequests: findNumericTag(tags, 1027 /* EC_TAG_KNOWNFILE_REQ_COUNT */)?.getShort(),
1173
+ getAllRequests: findNumericTag(tags, 1028 /* EC_TAG_KNOWNFILE_REQ_COUNT_ALL */)?.getInt(),
1174
+ getAccepts: findNumericTag(tags, 1029 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT */)?.getShort(),
1175
+ getAllAccepts: findNumericTag(tags, 1030 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL */)?.getInt(),
1176
+ getXferred: toOptionalNumber(findNumericTag(tags, 1025 /* EC_TAG_KNOWNFILE_XFERRED */)?.getLong()),
1177
+ getAllXferred: toOptionalNumber(findNumericTag(tags, 1026 /* EC_TAG_KNOWNFILE_XFERRED_ALL */)?.getLong()),
1178
+ getCompleteSourcesLow: findNumericTag(tags, 1033 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW */)?.getShort(),
1179
+ getCompleteSourcesHigh: findNumericTag(tags, 1034 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH */)?.getShort(),
1180
+ getCompleteSources: findNumericTag(tags, 1037 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES */)?.getShort(),
1181
+ getOnQueue: findNumericTag(tags, 1036 /* EC_TAG_KNOWNFILE_ON_QUEUE */)?.getShort(),
1182
+ getComment: findTag(tags, 1038 /* EC_TAG_KNOWNFILE_COMMENT */)?.getValue(),
1183
+ getRating: findNumericTag(tags, 1039 /* EC_TAG_KNOWNFILE_RATING */)?.getInt(),
1184
+ a4afSources
1185
+ };
1186
+ files.push(file);
1187
+ }
1188
+ return { files };
1189
+ }
1190
+ };
1191
+ }
1192
+ });
1193
+
1194
+ // src/response/ClientQueueResponse.ts
1195
+ var ClientQueueResponse_exports = {};
1196
+ __export(ClientQueueResponse_exports, {
1197
+ ClientQueueResponseParser: () => ClientQueueResponseParser
1198
+ });
1199
+ var ClientQueueResponseParser;
1200
+ var init_ClientQueueResponse = __esm({
1201
+ "src/response/ClientQueueResponse.ts"() {
1202
+ "use strict";
1203
+ init_Codes();
1204
+ init_Tag();
1205
+ init_utils();
1206
+ ClientQueueResponseParser = class {
1207
+ static fromPacket(packet) {
1208
+ return this.fromTags(packet.tags);
1209
+ }
1210
+ static fromTags(allTags) {
1211
+ const clients = [];
1212
+ const clientTags = allTags.filter((tag) => tag.name === 1536 /* EC_TAG_CLIENT */);
1213
+ for (const clientTag of clientTags) {
1214
+ const tags = clientTag.nestedTags || [];
1215
+ const client = {
1216
+ clientName: findTag(tags, 256 /* EC_TAG_CLIENT_NAME */)?.getValue(),
1217
+ userHashHexString: findTag(tags, 1539 /* EC_TAG_CLIENT_HASH */)?.getValue()?.toString("hex"),
1218
+ userID: findNumericTag(tags, 1566 /* EC_TAG_CLIENT_USER_ID */)?.getInt(),
1219
+ score: findNumericTag(tags, 1538 /* EC_TAG_CLIENT_SCORE */)?.getInt(),
1220
+ software: findTag(tags, 1537 /* EC_TAG_CLIENT_SOFTWARE */)?.getValue(),
1221
+ softVerStr: findTag(tags, 1557 /* EC_TAG_CLIENT_SOFT_VER_STR */)?.getValue(),
1222
+ userIP: toOptionalIp(findNumericTag(tags, 1552 /* EC_TAG_CLIENT_USER_IP */)?.getInt()),
1223
+ userPort: findNumericTag(tags, 1553 /* EC_TAG_CLIENT_USER_PORT */)?.getInt(),
1224
+ sourceFrom: toOptionalNumber(findNumericTag(tags, 1551 /* EC_TAG_CLIENT_FROM */)?.getLong()),
1225
+ serverIP: toOptionalIp(findNumericTag(tags, 1554 /* EC_TAG_CLIENT_SERVER_IP */)?.getInt()),
1226
+ serverPort: findNumericTag(tags, 1555 /* EC_TAG_CLIENT_SERVER_PORT */)?.getInt(),
1227
+ serverName: findTag(tags, 1556 /* EC_TAG_CLIENT_SERVER_NAME */)?.getValue(),
1228
+ upSpeed: toOptionalNumber(findNumericTag(tags, 1549 /* EC_TAG_CLIENT_UP_SPEED */)?.getLong()),
1229
+ downSpeed: toOptionalNumber(findNumericTag(tags, 1550 /* EC_TAG_CLIENT_DOWN_SPEED */)?.getLong()),
1230
+ uploadSession: toOptionalNumber(findNumericTag(tags, 1545 /* EC_TAG_CLIENT_UPLOAD_SESSION */)?.getLong()),
1231
+ transferredDown: toOptionalNumber(findNumericTag(tags, 772 /* EC_TAG_PARTFILE_SIZE_XFER */)?.getLong()),
1232
+ uploadedTotal: toOptionalNumber(findNumericTag(tags, 1546 /* EC_TAG_CLIENT_UPLOAD_TOTAL */)?.getLong()),
1233
+ downloadedTotal: toOptionalNumber(findNumericTag(tags, 1547 /* EC_TAG_CLIENT_DOWNLOAD_TOTAL */)?.getLong()),
1234
+ uploadState: findNumericTag(tags, 1564 /* EC_TAG_CLIENT_UPLOAD_STATE */)?.getInt(),
1235
+ downloadState: findNumericTag(tags, 1548 /* EC_TAG_CLIENT_DOWNLOAD_STATE */)?.getInt(),
1236
+ identState: findNumericTag(tags, 1559 /* EC_TAG_CLIENT_IDENT_STATE */)?.getInt(),
1237
+ extProtocol: findNumericTag(tags, 1565 /* EC_TAG_CLIENT_EXT_PROTOCOL */)?.getInt(),
1238
+ waitingPosition: findNumericTag(tags, 1558 /* EC_TAG_CLIENT_WAITING_POSITION */)?.getInt(),
1239
+ remoteQueueRank: findNumericTag(tags, 1562 /* EC_TAG_CLIENT_REMOTE_QUEUE_RANK */)?.getInt(),
1240
+ oldRemoteQueueRank: findNumericTag(tags, 1570 /* EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK */)?.getInt(),
1241
+ obfuscationStatus: findNumericTag(tags, 1560 /* EC_TAG_CLIENT_OBFUSCATION_STATUS */)?.getInt(),
1242
+ kadPort: findNumericTag(tags, 1571 /* EC_TAG_CLIENT_KAD_PORT */)?.getInt(),
1243
+ friendSlot: findNumericTag(tags, 1540 /* EC_TAG_CLIENT_FRIEND_SLOT */)?.getInt(),
1244
+ uploadFileId: toOptionalNumber(findNumericTag(tags, 1567 /* EC_TAG_CLIENT_UPLOAD_FILE */)?.getLong()),
1245
+ uploadFilename: findTag(tags, 769 /* EC_TAG_PARTFILE_NAME */)?.getValue(),
1246
+ requestFileId: toOptionalNumber(findNumericTag(tags, 1568 /* EC_TAG_CLIENT_REQUEST_FILE */)?.getLong()),
1247
+ remoteFilename: findTag(tags, 1575 /* EC_TAG_CLIENT_REMOTE_FILENAME */)?.getValue(),
1248
+ disableViewShared: toOptionalBool(findNumericTag(tags, 1563 /* EC_TAG_CLIENT_DISABLE_VIEW_SHARED */)?.getInt()),
1249
+ version: findNumericTag(tags, 257 /* EC_TAG_CLIENT_VERSION */)?.getInt(),
1250
+ modVersion: findTag(tags, 1576 /* EC_TAG_CLIENT_MOD_VERSION */)?.getValue(),
1251
+ osInfo: findTag(tags, 1577 /* EC_TAG_CLIENT_OS_INFO */)?.getValue(),
1252
+ availableParts: findNumericTag(tags, 1578 /* EC_TAG_CLIENT_AVAILABLE_PARTS */)?.getInt(),
1253
+ partStatus: findTag(tags, 1572 /* EC_TAG_CLIENT_PART_STATUS */)?.getValue(),
1254
+ nextRequestedPart: findNumericTag(tags, 1573 /* EC_TAG_CLIENT_NEXT_REQUESTED_PART */)?.getInt(),
1255
+ lastDownloadingPart: findNumericTag(tags, 1574 /* EC_TAG_CLIENT_LAST_DOWNLOADING_PART */)?.getInt(),
1256
+ uploadPartStatus: findTag(tags, 1579 /* EC_TAG_CLIENT_UPLOAD_PART_STATUS */)?.getValue()
1257
+ // Additional fields can be added here as needed
1258
+ };
1259
+ clients.push(client);
1260
+ }
1261
+ return { clients };
1262
+ }
1263
+ };
1264
+ }
1265
+ });
1266
+
1267
+ // src/response/ServerListResponse.ts
1268
+ var ServerListResponse_exports = {};
1269
+ __export(ServerListResponse_exports, {
1270
+ ServerListResponseParser: () => ServerListResponseParser
1271
+ });
1272
+ var ServerListResponseParser;
1273
+ var init_ServerListResponse = __esm({
1274
+ "src/response/ServerListResponse.ts"() {
1275
+ "use strict";
1276
+ init_Codes();
1277
+ init_Tag();
1278
+ init_utils();
1279
+ ServerListResponseParser = class {
1280
+ static fromPacket(packet) {
1281
+ return this.fromTags(packet.tags);
1282
+ }
1283
+ static fromTags(allTags) {
1284
+ const servers = [];
1285
+ const serverTags = allTags.filter((tag) => tag.name === 1280 /* EC_TAG_SERVER */);
1286
+ for (const serverTag of serverTags) {
1287
+ const nested = serverTag.nestedTags || [];
1288
+ const ipv4Tag = findTag(nested, 1292 /* EC_TAG_SERVER_IP */) || findTag(nested, 1283 /* EC_TAG_SERVER_ADDRESS */) || (serverTag.constructor.name.includes("Ipv4") ? serverTag : null);
1289
+ let ip = void 0;
1290
+ let port = void 0;
1291
+ if (ipv4Tag && ipv4Tag.getValue() && typeof ipv4Tag.getValue() === "object" && "address" in ipv4Tag.getValue()) {
1292
+ const val = ipv4Tag.getValue();
1293
+ ip = val.address;
1294
+ port = val.port;
1295
+ } else {
1296
+ const ipNum = findNumericTag(nested, 1292 /* EC_TAG_SERVER_IP */)?.getInt() || findNumericTag(allTags, 1292 /* EC_TAG_SERVER_IP */)?.getInt();
1297
+ port = findNumericTag(nested, 1293 /* EC_TAG_SERVER_PORT */)?.getInt() || findNumericTag(allTags, 1293 /* EC_TAG_SERVER_PORT */)?.getInt();
1298
+ ip = ipNum !== void 0 ? formatIp(ipNum) : void 0;
1299
+ }
1300
+ if (port === void 0 || port === 0) {
1301
+ const extraPort = findNumericTag(nested, 1293 /* EC_TAG_SERVER_PORT */)?.getInt();
1302
+ if (extraPort !== void 0) port = extraPort;
1303
+ }
1304
+ servers.push({
1305
+ name: findTag(nested, 1281 /* EC_TAG_SERVER_NAME */)?.getValue(),
1306
+ description: findTag(nested, 1282 /* EC_TAG_SERVER_DESC */)?.getValue(),
1307
+ address: findTag(nested, 1283 /* EC_TAG_SERVER_ADDRESS */)?.getValue(),
1308
+ ip,
1309
+ port,
1310
+ ping: findNumericTag(nested, 1284 /* EC_TAG_SERVER_PING */)?.getInt(),
1311
+ users: findNumericTag(nested, 1285 /* EC_TAG_SERVER_USERS */)?.getInt(),
1312
+ maxUsers: findNumericTag(nested, 1286 /* EC_TAG_SERVER_USERS_MAX */)?.getInt(),
1313
+ files: findNumericTag(nested, 1287 /* EC_TAG_SERVER_FILES */)?.getInt(),
1314
+ priority: findNumericTag(nested, 1288 /* EC_TAG_SERVER_PRIO */)?.getInt(),
1315
+ version: findTag(nested, 1291 /* EC_TAG_SERVER_VERSION */)?.getValue(),
1316
+ isStatic: toOptionalBool(findNumericTag(nested, 1290 /* EC_TAG_SERVER_STATIC */)?.getInt()),
1317
+ failedCount: findNumericTag(nested, 1289 /* EC_TAG_SERVER_FAILED */)?.getInt()
1318
+ });
1319
+ }
1320
+ return { servers };
1321
+ }
1322
+ };
1323
+ }
1324
+ });
1325
+
1326
+ // src/response/UpdateResponse.ts
1327
+ var UpdateResponse_exports = {};
1328
+ __export(UpdateResponse_exports, {
1329
+ UpdateResponseParser: () => UpdateResponseParser
1330
+ });
1331
+ var UpdateResponseParser;
1332
+ var init_UpdateResponse = __esm({
1333
+ "src/response/UpdateResponse.ts"() {
1334
+ "use strict";
1335
+ init_Codes();
1336
+ init_Tag();
1337
+ init_utils();
1338
+ init_SharedFilesResponse();
1339
+ init_DownloadQueueResponse();
1340
+ init_ClientQueueResponse();
1341
+ init_ServerListResponse();
1342
+ UpdateResponseParser = class {
1343
+ static fromPacket(packet) {
1344
+ const sharedFiles = SharedFilesResponseParser.fromPacket(packet).files;
1345
+ const downloadQueue = DownloadQueueResponseParser.fromPacket(packet).files;
1346
+ const clientContainer = findTag(packet.tags, 1536 /* EC_TAG_CLIENT */);
1347
+ const clients = clientContainer && clientContainer.nestedTags ? ClientQueueResponseParser.fromTags(clientContainer.nestedTags).clients : [];
1348
+ const serverContainer = findTag(packet.tags, 1280 /* EC_TAG_SERVER */);
1349
+ const servers = serverContainer && serverContainer.nestedTags ? ServerListResponseParser.fromTags(serverContainer.nestedTags).servers : [];
1350
+ const friendContainer = findTag(packet.tags, 2048 /* EC_TAG_FRIEND */);
1351
+ const friends = friendContainer && friendContainer.nestedTags ? this.parseFriends(friendContainer.nestedTags) : [];
1352
+ return {
1353
+ sharedFiles,
1354
+ downloadQueue,
1355
+ clients,
1356
+ servers,
1357
+ friends
1358
+ };
1359
+ }
1360
+ static parseFriends(tags) {
1361
+ const friends = [];
1362
+ const friendTags = tags.filter((t) => t.name === 2048 /* EC_TAG_FRIEND */);
1363
+ for (const friendTag of friendTags) {
1364
+ const nested = friendTag.nestedTags || [];
1365
+ friends.push({
1366
+ name: findTag(nested, 2049 /* EC_TAG_FRIEND_NAME */)?.getValue(),
1367
+ userHashHexString: findTag(nested, 2050 /* EC_TAG_FRIEND_HASH */)?.getValue()?.toString("hex"),
1368
+ ip: toOptionalIp(findNumericTag(nested, 2051 /* EC_TAG_FRIEND_IP */)?.getInt()),
1369
+ port: findNumericTag(nested, 2052 /* EC_TAG_FRIEND_PORT */)?.getInt(),
1370
+ friendSlot: toOptionalBool(findNumericTag(nested, 2056 /* EC_TAG_FRIEND_FRIENDSLOT */)?.getInt()),
1371
+ shared: toOptionalBool(findNumericTag(nested, 2057 /* EC_TAG_FRIEND_SHARED */)?.getInt()),
1372
+ // Friend client information might be nested as a client tag
1373
+ client: ClientQueueResponseParser.fromTags(nested).clients[0]
1374
+ });
1375
+ }
1376
+ return friends;
1377
+ }
1378
+ };
1379
+ }
1380
+ });
1381
+
1018
1382
  // src/model/index.ts
1019
1383
  var model_exports = {};
1020
1384
  __export(model_exports, {
@@ -1318,92 +1682,6 @@ var init_DownloadQueueRequest = __esm({
1318
1682
  }
1319
1683
  });
1320
1684
 
1321
- // src/response/DownloadQueueResponse.ts
1322
- var DownloadQueueResponse_exports = {};
1323
- __export(DownloadQueueResponse_exports, {
1324
- DownloadQueueResponseParser: () => DownloadQueueResponseParser
1325
- });
1326
- function toNumber(value, defaultValue = 0) {
1327
- if (value === void 0) return defaultValue;
1328
- return typeof value === "bigint" ? Number(value) : value;
1329
- }
1330
- var DownloadQueueResponseParser;
1331
- var init_DownloadQueueResponse = __esm({
1332
- "src/response/DownloadQueueResponse.ts"() {
1333
- "use strict";
1334
- init_Codes();
1335
- init_Tag();
1336
- DownloadQueueResponseParser = class {
1337
- static fromPacket(packet) {
1338
- const files = [];
1339
- const partfileTags = packet.tags.filter((tag) => tag.name === 768 /* EC_TAG_PARTFILE */);
1340
- for (const fileTag of partfileTags) {
1341
- const tags = fileTag.nestedTags || [];
1342
- const hashTag = findTag(tags, 798 /* EC_TAG_PARTFILE_HASH */);
1343
- const fileNameTag = findTag(tags, 769 /* EC_TAG_PARTFILE_NAME */);
1344
- const a4afSources = [];
1345
- const a4afSourcesTag = findTag(tags, 802 /* EC_TAG_PARTFILE_A4AF_SOURCES */);
1346
- if (a4afSourcesTag) {
1347
- a4afSourcesTag.nestedTags = a4afSourcesTag.nestedTags || [];
1348
- for (const sourceTag of a4afSourcesTag.nestedTags) {
1349
- if (sourceTag.name === 15 /* EC_TAG_ECID */) {
1350
- a4afSources.push(sourceTag.getValue());
1351
- }
1352
- }
1353
- }
1354
- const file = {
1355
- fileHashHexString: hashTag ? hashTag.getValue().toString("hex") : void 0,
1356
- fileName: fileNameTag ? fileNameTag.getValue() : void 0,
1357
- filePath: findTag(tags, 1032 /* EC_TAG_KNOWNFILE_FILENAME */)?.getValue(),
1358
- sizeFull: toNumber(findNumericTag(tags, 771 /* EC_TAG_PARTFILE_SIZE_FULL */)?.getLong()),
1359
- fileEd2kLink: findTag(tags, 782 /* EC_TAG_PARTFILE_ED2K_LINK */)?.getValue(),
1360
- // Transfer info
1361
- partMetID: findNumericTag(tags, 770 /* EC_TAG_PARTFILE_PARTMETID */)?.getShort(),
1362
- sizeXfer: toNumber(findNumericTag(tags, 772 /* EC_TAG_PARTFILE_SIZE_XFER */)?.getLong()),
1363
- sizeDone: toNumber(findNumericTag(tags, 774 /* EC_TAG_PARTFILE_SIZE_DONE */)?.getLong()),
1364
- fileStatus: findNumericTag(tags, 776 /* EC_TAG_PARTFILE_STATUS */)?.getInt() ?? 0,
1365
- stopped: (findNumericTag(tags, 791 /* EC_TAG_PARTFILE_STOPPED */)?.getInt() ?? 0) !== 0,
1366
- sourceCount: findNumericTag(tags, 778 /* EC_TAG_PARTFILE_SOURCE_COUNT */)?.getShort() ?? 0,
1367
- sourceNotCurrCount: findNumericTag(tags, 780 /* EC_TAG_PARTFILE_SOURCE_COUNT_NOT_CURRENT */)?.getShort() ?? 0,
1368
- sourceXferCount: findNumericTag(tags, 781 /* EC_TAG_PARTFILE_SOURCE_COUNT_XFER */)?.getShort() ?? 0,
1369
- sourceCountA4AF: findNumericTag(tags, 779 /* EC_TAG_PARTFILE_SOURCE_COUNT_A4AF */)?.getShort() ?? 0,
1370
- speed: toNumber(findNumericTag(tags, 775 /* EC_TAG_PARTFILE_SPEED */)?.getLong()),
1371
- downPrio: findNumericTag(tags, 777 /* EC_TAG_PARTFILE_PRIO */)?.getInt() ?? 0,
1372
- fileCat: toNumber(findNumericTag(tags, 783 /* EC_TAG_PARTFILE_CAT */)?.getLong()),
1373
- lastSeenComplete: toNumber(findNumericTag(tags, 785 /* EC_TAG_PARTFILE_LAST_SEEN_COMP */)?.getLong()),
1374
- lastDateChanged: toNumber(findNumericTag(tags, 784 /* EC_TAG_PARTFILE_LAST_RECV */)?.getLong()),
1375
- downloadActiveTime: findNumericTag(tags, 792 /* EC_TAG_PARTFILE_DOWNLOAD_ACTIVE */)?.getInt() ?? 0,
1376
- availablePartCount: findNumericTag(tags, 797 /* EC_TAG_PARTFILE_AVAILABLE_PARTS */)?.getShort() ?? 0,
1377
- a4AFAuto: (findNumericTag(tags, 801 /* EC_TAG_PARTFILE_A4AFAUTO */)?.getInt() ?? 0) !== 0,
1378
- hashingProgress: (findNumericTag(tags, 800 /* EC_TAG_PARTFILE_HASHED_PART_COUNT */)?.getInt() ?? 0) !== 0,
1379
- // Statistics
1380
- getLostDueToCorruption: toNumber(findNumericTag(tags, 793 /* EC_TAG_PARTFILE_LOST_CORRUPTION */)?.getLong()),
1381
- getGainDueToCompression: toNumber(findNumericTag(tags, 794 /* EC_TAG_PARTFILE_GAINED_COMPRESSION */)?.getLong()),
1382
- totalPacketsSavedDueToICH: findNumericTag(tags, 795 /* EC_TAG_PARTFILE_SAVED_ICH */)?.getInt() ?? 0,
1383
- // Known file shared info (defaults)
1384
- upPrio: findNumericTag(tags, 1035 /* EC_TAG_KNOWNFILE_PRIO */)?.getInt() ?? 0,
1385
- getRequests: findNumericTag(tags, 1027 /* EC_TAG_KNOWNFILE_REQ_COUNT */)?.getShort() ?? 0,
1386
- getAllRequests: findNumericTag(tags, 1028 /* EC_TAG_KNOWNFILE_REQ_COUNT_ALL */)?.getInt() ?? 0,
1387
- getAccepts: findNumericTag(tags, 1029 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT */)?.getShort() ?? 0,
1388
- getAllAccepts: findNumericTag(tags, 1030 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL */)?.getInt() ?? 0,
1389
- getXferred: toNumber(findNumericTag(tags, 1025 /* EC_TAG_KNOWNFILE_XFERRED */)?.getLong()),
1390
- getAllXferred: toNumber(findNumericTag(tags, 1026 /* EC_TAG_KNOWNFILE_XFERRED_ALL */)?.getLong()),
1391
- getCompleteSourcesLow: findNumericTag(tags, 1033 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW */)?.getShort() ?? 0,
1392
- getCompleteSourcesHigh: findNumericTag(tags, 1034 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH */)?.getShort() ?? 0,
1393
- getCompleteSources: findNumericTag(tags, 1037 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES */)?.getShort() ?? 0,
1394
- getOnQueue: findNumericTag(tags, 1036 /* EC_TAG_KNOWNFILE_ON_QUEUE */)?.getShort() ?? 0,
1395
- getComment: findTag(tags, 1038 /* EC_TAG_KNOWNFILE_COMMENT */)?.getValue(),
1396
- getRating: findNumericTag(tags, 1039 /* EC_TAG_KNOWNFILE_RATING */)?.getInt(),
1397
- a4afSources
1398
- };
1399
- files.push(file);
1400
- }
1401
- return { files };
1402
- }
1403
- };
1404
- }
1405
- });
1406
-
1407
1685
  // src/request/SharedFilesRequest.ts
1408
1686
  var SharedFilesRequest_exports = {};
1409
1687
  __export(SharedFilesRequest_exports, {
@@ -1425,57 +1703,6 @@ var init_SharedFilesRequest = __esm({
1425
1703
  }
1426
1704
  });
1427
1705
 
1428
- // src/response/SharedFilesResponse.ts
1429
- var SharedFilesResponse_exports = {};
1430
- __export(SharedFilesResponse_exports, {
1431
- SharedFilesResponseParser: () => SharedFilesResponseParser
1432
- });
1433
- function toNumber2(value, defaultValue = 0) {
1434
- if (value === void 0) return defaultValue;
1435
- return typeof value === "bigint" ? Number(value) : value;
1436
- }
1437
- var SharedFilesResponseParser;
1438
- var init_SharedFilesResponse = __esm({
1439
- "src/response/SharedFilesResponse.ts"() {
1440
- "use strict";
1441
- init_Codes();
1442
- init_Tag();
1443
- SharedFilesResponseParser = class {
1444
- static fromPacket(packet) {
1445
- const files = [];
1446
- const knownfileTags = packet.tags.filter((tag) => tag.name === 1024 /* EC_TAG_KNOWNFILE */);
1447
- for (const fileTag of knownfileTags) {
1448
- const tags = fileTag.nestedTags || [];
1449
- const hashTag = findTag(tags, 798 /* EC_TAG_PARTFILE_HASH */);
1450
- const fileNameTag = findTag(tags, 769 /* EC_TAG_PARTFILE_NAME */);
1451
- const file = {
1452
- fileHashHexString: hashTag ? hashTag.getValue().toString("hex") : void 0,
1453
- fileName: fileNameTag ? fileNameTag.getValue() : void 0,
1454
- filePath: findTag(tags, 1032 /* EC_TAG_KNOWNFILE_FILENAME */)?.getValue(),
1455
- sizeFull: toNumber2(findNumericTag(tags, 771 /* EC_TAG_PARTFILE_SIZE_FULL */)?.getLong()),
1456
- fileEd2kLink: findTag(tags, 782 /* EC_TAG_PARTFILE_ED2K_LINK */)?.getValue(),
1457
- upPrio: findNumericTag(tags, 1035 /* EC_TAG_KNOWNFILE_PRIO */)?.getInt() ?? 0,
1458
- getRequests: findNumericTag(tags, 1027 /* EC_TAG_KNOWNFILE_REQ_COUNT */)?.getShort() ?? 0,
1459
- getAllRequests: findNumericTag(tags, 1028 /* EC_TAG_KNOWNFILE_REQ_COUNT_ALL */)?.getInt() ?? 0,
1460
- getAccepts: findNumericTag(tags, 1029 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT */)?.getShort() ?? 0,
1461
- getAllAccepts: findNumericTag(tags, 1030 /* EC_TAG_KNOWNFILE_ACCEPT_COUNT_ALL */)?.getInt() ?? 0,
1462
- getXferred: toNumber2(findNumericTag(tags, 1025 /* EC_TAG_KNOWNFILE_XFERRED */)?.getLong()),
1463
- getAllXferred: toNumber2(findNumericTag(tags, 1026 /* EC_TAG_KNOWNFILE_XFERRED_ALL */)?.getLong()),
1464
- getCompleteSourcesLow: findNumericTag(tags, 1033 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_LOW */)?.getShort() ?? 0,
1465
- getCompleteSourcesHigh: findNumericTag(tags, 1034 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES_HIGH */)?.getShort() ?? 0,
1466
- getCompleteSources: findNumericTag(tags, 1037 /* EC_TAG_KNOWNFILE_COMPLETE_SOURCES */)?.getShort() ?? 0,
1467
- getOnQueue: findNumericTag(tags, 1036 /* EC_TAG_KNOWNFILE_ON_QUEUE */)?.getShort() ?? 0,
1468
- getComment: findTag(tags, 1038 /* EC_TAG_KNOWNFILE_COMMENT */)?.getValue(),
1469
- getRating: findNumericTag(tags, 1039 /* EC_TAG_KNOWNFILE_RATING */)?.getInt()
1470
- };
1471
- files.push(file);
1472
- }
1473
- return { files };
1474
- }
1475
- };
1476
- }
1477
- });
1478
-
1479
1706
  // src/request/ClientQueueRequest.ts
1480
1707
  var ClientQueueRequest_exports = {};
1481
1708
  __export(ClientQueueRequest_exports, {
@@ -1497,91 +1724,6 @@ var init_ClientQueueRequest = __esm({
1497
1724
  }
1498
1725
  });
1499
1726
 
1500
- // src/response/utils.ts
1501
- function formatIp(ip) {
1502
- if (ip === void 0) return "";
1503
- return [ip >>> 24 & 255, ip >>> 16 & 255, ip >>> 8 & 255, ip & 255].join(".");
1504
- }
1505
- var init_utils = __esm({
1506
- "src/response/utils.ts"() {
1507
- "use strict";
1508
- }
1509
- });
1510
-
1511
- // src/response/ClientQueueResponse.ts
1512
- var ClientQueueResponse_exports = {};
1513
- __export(ClientQueueResponse_exports, {
1514
- ClientQueueResponseParser: () => ClientQueueResponseParser
1515
- });
1516
- function toNumber3(value, defaultValue = 0) {
1517
- if (value === void 0) return defaultValue;
1518
- return typeof value === "bigint" ? Number(value) : value;
1519
- }
1520
- var ClientQueueResponseParser;
1521
- var init_ClientQueueResponse = __esm({
1522
- "src/response/ClientQueueResponse.ts"() {
1523
- "use strict";
1524
- init_Codes();
1525
- init_Tag();
1526
- init_utils();
1527
- ClientQueueResponseParser = class {
1528
- static fromPacket(packet) {
1529
- const clients = [];
1530
- const clientTags = packet.tags.filter((tag) => tag.name === 1536 /* EC_TAG_CLIENT */);
1531
- for (const clientTag of clientTags) {
1532
- const tags = clientTag.nestedTags || [];
1533
- const client = {
1534
- clientName: findTag(tags, 256 /* EC_TAG_CLIENT_NAME */)?.getValue(),
1535
- userHashHexString: findTag(tags, 1539 /* EC_TAG_CLIENT_HASH */)?.getValue().toString("hex"),
1536
- userID: findNumericTag(tags, 1566 /* EC_TAG_CLIENT_USER_ID */)?.getInt(),
1537
- score: findNumericTag(tags, 1538 /* EC_TAG_CLIENT_SCORE */)?.getInt(),
1538
- software: findTag(tags, 1537 /* EC_TAG_CLIENT_SOFTWARE */)?.getValue(),
1539
- softVerStr: findTag(tags, 1557 /* EC_TAG_CLIENT_SOFT_VER_STR */)?.getValue(),
1540
- userIP: formatIp(findNumericTag(tags, 1552 /* EC_TAG_CLIENT_USER_IP */)?.getInt()),
1541
- userPort: findNumericTag(tags, 1553 /* EC_TAG_CLIENT_USER_PORT */)?.getInt(),
1542
- sourceFrom: toNumber3(findNumericTag(tags, 1551 /* EC_TAG_CLIENT_FROM */)?.getLong()),
1543
- serverIP: formatIp(findNumericTag(tags, 1554 /* EC_TAG_CLIENT_SERVER_IP */)?.getInt()),
1544
- serverPort: findNumericTag(tags, 1555 /* EC_TAG_CLIENT_SERVER_PORT */)?.getInt(),
1545
- serverName: findTag(tags, 1556 /* EC_TAG_CLIENT_SERVER_NAME */)?.getValue(),
1546
- upSpeed: toNumber3(findNumericTag(tags, 1549 /* EC_TAG_CLIENT_UP_SPEED */)?.getLong()),
1547
- downSpeed: toNumber3(findNumericTag(tags, 1550 /* EC_TAG_CLIENT_DOWN_SPEED */)?.getLong()),
1548
- uploadSession: toNumber3(findNumericTag(tags, 1545 /* EC_TAG_CLIENT_UPLOAD_SESSION */)?.getLong()),
1549
- transferredDown: toNumber3(findNumericTag(tags, 772 /* EC_TAG_PARTFILE_SIZE_XFER */)?.getLong()),
1550
- uploadedTotal: toNumber3(findNumericTag(tags, 1546 /* EC_TAG_CLIENT_UPLOAD_TOTAL */)?.getLong()),
1551
- downloadedTotal: toNumber3(findNumericTag(tags, 1547 /* EC_TAG_CLIENT_DOWNLOAD_TOTAL */)?.getLong()),
1552
- uploadState: findNumericTag(tags, 1564 /* EC_TAG_CLIENT_UPLOAD_STATE */)?.getInt(),
1553
- downloadState: findNumericTag(tags, 1548 /* EC_TAG_CLIENT_DOWNLOAD_STATE */)?.getInt(),
1554
- identState: findNumericTag(tags, 1559 /* EC_TAG_CLIENT_IDENT_STATE */)?.getInt(),
1555
- extProtocol: findNumericTag(tags, 1565 /* EC_TAG_CLIENT_EXT_PROTOCOL */)?.getInt(),
1556
- waitingPosition: findNumericTag(tags, 1558 /* EC_TAG_CLIENT_WAITING_POSITION */)?.getInt(),
1557
- remoteQueueRank: findNumericTag(tags, 1562 /* EC_TAG_CLIENT_REMOTE_QUEUE_RANK */)?.getInt(),
1558
- oldRemoteQueueRank: findNumericTag(tags, 1570 /* EC_TAG_CLIENT_OLD_REMOTE_QUEUE_RANK */)?.getInt(),
1559
- obfuscationStatus: findNumericTag(tags, 1560 /* EC_TAG_CLIENT_OBFUSCATION_STATUS */)?.getInt(),
1560
- kadPort: findNumericTag(tags, 1571 /* EC_TAG_CLIENT_KAD_PORT */)?.getInt(),
1561
- friendSlot: findNumericTag(tags, 1540 /* EC_TAG_CLIENT_FRIEND_SLOT */)?.getInt(),
1562
- uploadFileId: toNumber3(findNumericTag(tags, 1567 /* EC_TAG_CLIENT_UPLOAD_FILE */)?.getLong()),
1563
- uploadFilename: findTag(tags, 769 /* EC_TAG_PARTFILE_NAME */)?.getValue(),
1564
- requestFileId: toNumber3(findNumericTag(tags, 1568 /* EC_TAG_CLIENT_REQUEST_FILE */)?.getLong()),
1565
- remoteFilename: findTag(tags, 1575 /* EC_TAG_CLIENT_REMOTE_FILENAME */)?.getValue(),
1566
- disableViewShared: !!findNumericTag(tags, 1563 /* EC_TAG_CLIENT_DISABLE_VIEW_SHARED */)?.getInt(),
1567
- version: findNumericTag(tags, 257 /* EC_TAG_CLIENT_VERSION */)?.getInt(),
1568
- modVersion: findTag(tags, 1576 /* EC_TAG_CLIENT_MOD_VERSION */)?.getValue(),
1569
- osInfo: findTag(tags, 1577 /* EC_TAG_CLIENT_OS_INFO */)?.getValue(),
1570
- availableParts: findNumericTag(tags, 1578 /* EC_TAG_CLIENT_AVAILABLE_PARTS */)?.getInt(),
1571
- partStatus: findTag(tags, 1572 /* EC_TAG_CLIENT_PART_STATUS */)?.getValue(),
1572
- nextRequestedPart: findNumericTag(tags, 1573 /* EC_TAG_CLIENT_NEXT_REQUESTED_PART */)?.getInt(),
1573
- lastDownloadingPart: findNumericTag(tags, 1574 /* EC_TAG_CLIENT_LAST_DOWNLOADING_PART */)?.getInt(),
1574
- uploadPartStatus: findTag(tags, 1579 /* EC_TAG_CLIENT_UPLOAD_PART_STATUS */)?.getValue()
1575
- // Additional fields can be added here as needed
1576
- };
1577
- clients.push(client);
1578
- }
1579
- return { clients };
1580
- }
1581
- };
1582
- }
1583
- });
1584
-
1585
1727
  // src/request/ServerListRequest.ts
1586
1728
  var ServerListRequest_exports = {};
1587
1729
  __export(ServerListRequest_exports, {
@@ -1601,61 +1743,6 @@ var init_ServerListRequest = __esm({
1601
1743
  }
1602
1744
  });
1603
1745
 
1604
- // src/response/ServerListResponse.ts
1605
- var ServerListResponse_exports = {};
1606
- __export(ServerListResponse_exports, {
1607
- ServerListResponseParser: () => ServerListResponseParser
1608
- });
1609
- var ServerListResponseParser;
1610
- var init_ServerListResponse = __esm({
1611
- "src/response/ServerListResponse.ts"() {
1612
- "use strict";
1613
- init_Codes();
1614
- init_Tag();
1615
- init_utils();
1616
- ServerListResponseParser = class {
1617
- static fromPacket(packet) {
1618
- const servers = [];
1619
- const serverTags = packet.tags.filter((tag) => tag.name === 1280 /* EC_TAG_SERVER */);
1620
- for (const serverTag of serverTags) {
1621
- const nested = serverTag.nestedTags || [];
1622
- const ipv4Tag = findTag(nested, 1292 /* EC_TAG_SERVER_IP */) || findTag(nested, 1283 /* EC_TAG_SERVER_ADDRESS */) || (serverTag.constructor.name.includes("Ipv4") ? serverTag : null);
1623
- let ip = "";
1624
- let port = 0;
1625
- if (ipv4Tag && ipv4Tag.getValue() && typeof ipv4Tag.getValue() === "object" && "address" in ipv4Tag.getValue()) {
1626
- const val = ipv4Tag.getValue();
1627
- ip = val.address;
1628
- port = val.port;
1629
- } else {
1630
- const ipNum = findNumericTag(nested, 1292 /* EC_TAG_SERVER_IP */)?.getInt() || findNumericTag(packet.tags, 1292 /* EC_TAG_SERVER_IP */)?.getInt();
1631
- port = findNumericTag(nested, 1293 /* EC_TAG_SERVER_PORT */)?.getInt() || findNumericTag(packet.tags, 1293 /* EC_TAG_SERVER_PORT */)?.getInt() || 0;
1632
- ip = formatIp(ipNum);
1633
- }
1634
- if (port === 0) {
1635
- port = findNumericTag(nested, 1293 /* EC_TAG_SERVER_PORT */)?.getInt() || 0;
1636
- }
1637
- servers.push({
1638
- name: findTag(nested, 1281 /* EC_TAG_SERVER_NAME */)?.getValue() || "Unknown",
1639
- description: findTag(nested, 1282 /* EC_TAG_SERVER_DESC */)?.getValue(),
1640
- address: findTag(nested, 1283 /* EC_TAG_SERVER_ADDRESS */)?.getValue(),
1641
- ip,
1642
- port,
1643
- ping: findNumericTag(nested, 1284 /* EC_TAG_SERVER_PING */)?.getInt(),
1644
- users: findNumericTag(nested, 1285 /* EC_TAG_SERVER_USERS */)?.getInt(),
1645
- maxUsers: findNumericTag(nested, 1286 /* EC_TAG_SERVER_USERS_MAX */)?.getInt(),
1646
- files: findNumericTag(nested, 1287 /* EC_TAG_SERVER_FILES */)?.getInt(),
1647
- priority: findNumericTag(nested, 1288 /* EC_TAG_SERVER_PRIO */)?.getInt() || 0,
1648
- version: findTag(nested, 1291 /* EC_TAG_SERVER_VERSION */)?.getValue(),
1649
- isStatic: !!findNumericTag(nested, 1290 /* EC_TAG_SERVER_STATIC */)?.getInt(),
1650
- failedCount: findNumericTag(nested, 1289 /* EC_TAG_SERVER_FAILED */)?.getInt() || 0
1651
- });
1652
- }
1653
- return { servers };
1654
- }
1655
- };
1656
- }
1657
- });
1658
-
1659
1746
  // src/request/ServerConnectRequest.ts
1660
1747
  var ServerConnectRequest_exports = {};
1661
1748
  __export(ServerConnectRequest_exports, {
@@ -1720,8 +1807,8 @@ var init_CreateCategoryRequest = __esm({
1720
1807
  new StringTag(4354 /* EC_TAG_CATEGORY_TITLE */, category.name),
1721
1808
  new StringTag(4355 /* EC_TAG_CATEGORY_PATH */, category.path),
1722
1809
  new StringTag(4356 /* EC_TAG_CATEGORY_COMMENT */, category.comment),
1723
- new UByteTag(4357 /* EC_TAG_CATEGORY_COLOR */, category.color),
1724
- new UIntTag(4358 /* EC_TAG_CATEGORY_PRIO */, category.priority)
1810
+ new UIntTag(4357 /* EC_TAG_CATEGORY_COLOR */, category.color),
1811
+ new UByteTag(4358 /* EC_TAG_CATEGORY_PRIO */, category.priority)
1725
1812
  ];
1726
1813
  this.addTag(new UIntTag(4353 /* EC_TAG_CATEGORY */, 0, subtags));
1727
1814
  }
@@ -1748,8 +1835,8 @@ var init_UpdateCategoryRequest = __esm({
1748
1835
  new StringTag(4354 /* EC_TAG_CATEGORY_TITLE */, category.name),
1749
1836
  new StringTag(4355 /* EC_TAG_CATEGORY_PATH */, category.path),
1750
1837
  new StringTag(4356 /* EC_TAG_CATEGORY_COMMENT */, category.comment),
1751
- new UByteTag(4357 /* EC_TAG_CATEGORY_COLOR */, category.color),
1752
- new UIntTag(4358 /* EC_TAG_CATEGORY_PRIO */, category.priority)
1838
+ new UIntTag(4357 /* EC_TAG_CATEGORY_COLOR */, category.color),
1839
+ new UByteTag(4358 /* EC_TAG_CATEGORY_PRIO */, category.priority)
1753
1840
  ];
1754
1841
  this.addTag(new UIntTag(4353 /* EC_TAG_CATEGORY */, id, subtags));
1755
1842
  }
@@ -2803,6 +2890,16 @@ var AmuleClient = class {
2803
2890
  const packet = await this.connection.sendRequest(request);
2804
2891
  return StatsResponseParser2.fromPacket(packet);
2805
2892
  }
2893
+ /**
2894
+ * Get incremental updates for files, clients, servers, and friends
2895
+ */
2896
+ async getUpdate(detailLevel = 4 /* EC_DETAIL_INC_UPDATE */) {
2897
+ const { UpdateRequest: UpdateRequest2 } = await Promise.resolve().then(() => (init_UpdateRequest(), UpdateRequest_exports));
2898
+ const { UpdateResponseParser: UpdateResponseParser2 } = await Promise.resolve().then(() => (init_UpdateResponse(), UpdateResponse_exports));
2899
+ const request = new UpdateRequest2(detailLevel);
2900
+ const packet = await this.connection.sendRequest(request);
2901
+ return UpdateResponseParser2.fromPacket(packet);
2902
+ }
2806
2903
  /**
2807
2904
  * Start an asynchronous search
2808
2905
  */