ayakashi
Version:
The next generation web scraping framework
104 lines (103 loc) • 3.88 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generate = exports.getUserAgentData = void 0;
//@ts-ignore
const user_agents_1 = __importDefault(require("user-agents"));
function getUserAgentData(sessionDb, userAgentModel, input) {
return __awaiter(this, void 0, void 0, function* () {
if (input.persistentSession) {
return sessionDb.transaction(function (t) {
return __awaiter(this, void 0, void 0, function* () {
//return the saved data if we have already persisted them
const savedData = yield userAgentModel.findOne({ transaction: t });
if (savedData) {
return savedData.userAgentData;
}
//generate new data based on input
const data = generate(input.agent, input.platform);
//persist them
yield userAgentModel.create({
userAgentData: data
}, {
transaction: t
});
return data;
});
});
}
else {
return generate(input.agent, input.platform);
}
});
}
exports.getUserAgentData = getUserAgentData;
function generate(agent, platform) {
try {
if (agent === "random") {
return (new user_agents_1.default({
platform: platform || "Win32"
})).data;
}
if (agent === "desktop") {
return (new user_agents_1.default({
deviceCategory: "desktop",
platform: platform || "Win32"
})).data;
}
if (agent === "mobile") {
return (new user_agents_1.default({
deviceCategory: "mobile",
platform: platform || "Linux armv8l"
})).data;
}
if (agent === "chrome-desktop") {
return (new user_agents_1.default([
/Chrome/,
{
deviceCategory: "desktop",
platform: platform || "Win32"
}
])).data;
}
if (agent === "chrome-mobile") {
return (new user_agents_1.default([
/Chrome/,
{
deviceCategory: "mobile",
platform: platform || "Linux armv8l"
}
])).data;
}
//default to chrome-desktop
return (new user_agents_1.default([
/Chrome/,
{
deviceCategory: "desktop",
platform: platform || "Win32"
}
])).data;
}
catch (_e) {
//default to chrome-desktop on invalid input
return (new user_agents_1.default([
/Chrome/,
{
deviceCategory: "desktop",
platform: "Win32"
}
])).data;
}
}
exports.generate = generate;