andrade-soulseek-downloader
Version:
Simple, safe Soulseek download library with built-in rate limiting to prevent bans
197 lines • 7.05 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessageFactory = void 0;
const crypto = __importStar(require("crypto"));
const zlib = __importStar(require("zlib"));
const message_1 = require("./message");
exports.MessageFactory = {
to: {
peer: {
pierceFw: (token) => {
return new message_1.Message()
.int8(0)
.rawHexStr(token);
},
peerInit: (username, type, token) => {
return new message_1.Message()
.int8(1)
.str(username)
.str(type)
.rawHexStr(token);
},
sharedFileList: (number, name, filesCount, filename) => {
return new message_1.Message()
.int32(5)
.int32(number)
.str(name)
.int32(filesCount)
.int8(1)
.str(filename)
.int32(3000000)
.int32(0)
.str('mp3')
.int32(0);
},
fileSearchResult: (files, token, user) => {
let msg = new message_1.Message();
msg.str(user)
.rawHexStr(token)
.int32(files.length);
files.forEach(file => {
msg.int8(0);
msg.str(file.value.file);
msg.int32(file.value.size);
msg.int32(0);
msg.str('ext');
msg.int32(0);
});
msg.int8(1);
msg.int32(123);
msg.int32(0);
return new message_1.Message()
.int32(9)
.writeBuffer(zlib.deflateSync(msg.data));
},
transferRequest: (file, token) => {
return new message_1.Message()
.int32(40)
.int32(0)
.rawHexStr(token)
.str(file);
},
transferResponse: (token) => {
return new message_1.Message()
.int32(41)
.rawHexStr(token)
.int8(1);
}
},
server: {
login: (credentials) => {
return new message_1.Message()
.int32(1)
.str(credentials.user)
.str(credentials.pass)
.int32(160)
.str(crypto.createHash('md5').update(credentials.user + credentials.pass).digest('hex'))
.int32(17);
},
setWaitPort: (port) => {
return new message_1.Message()
.int32(2)
.int32(port);
},
getPeerAddress: (username) => {
return new message_1.Message()
.int32(3)
.str(username);
},
addUser: (user) => {
return new message_1.Message()
.int32(5)
.str(user);
},
fileSearch: (query, token) => {
return new message_1.Message()
.int32(26)
.rawHexStr(token)
.str(query);
},
setStatus: (status) => {
return new message_1.Message()
.int32(28)
.int32(status);
},
sharedFoldersFiles: (folderCount, fileCount) => {
return new message_1.Message()
.int32(35)
.int32(folderCount)
.int32(fileCount);
},
haveNoParents: (flag) => {
return new message_1.Message()
.int32(71)
.int32(flag);
},
parentIp: (ip) => {
return new message_1.Message()
.int32(73)
.int8(ip[0])
.int8(ip[1])
.int8(ip[2])
.int8(ip[3]);
}
}
},
from: {
peer: {
fileSearchResult: (buffer) => {
const msg = new message_1.Message(buffer);
const user = msg.str();
const currentToken = msg.rawHexStr(4);
const nbFiles = msg.int32();
const files = [];
for (let i = 0; i < nbFiles; i++) {
msg.int8();
const filename = msg.str();
const filesize = msg.int32();
msg.int32();
msg.str();
const nbAttrib = msg.int32();
const attribs = {};
for (let attrib = 0; attrib < nbAttrib; attrib++) {
attribs[msg.int32()] = msg.int32();
}
files.push({
user: user,
file: filename,
size: filesize,
attribs
});
}
const slots = msg.int8();
const speed = msg.int32();
return {
currentToken: currentToken,
files: files,
slots: slots,
speed: speed
};
}
}
}
};
//# sourceMappingURL=message-factory.js.map