@a11ywatch/core
Version:
a11ywatch central API
217 lines • 9.14 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Mutation = void 0;
const strings_1 = require("./strings");
const mutations_1 = require("./graph/mutations");
const watcher_crawl_1 = require("./actions/accessibility/watcher_crawl");
const actions_1 = require("../core/actions");
const scan_1 = require("../web/limiters/scan");
const websites_1 = require("./controllers/websites");
const website_gql_1 = require("./utils/shapes/website-gql");
const controllers_1 = require("./controllers");
const config_1 = require("../config/config");
const success_1 = require("./strings/success");
const crawl_tracking_1 = require("../event/crawl-tracking");
const message_1 = require("../web/messages/message");
const defaultPayload = {
keyid: undefined,
audience: undefined,
};
const scanRateLimitConfig = {
max: 2,
window: "10s",
};
const defaultScanLimit = {
max: 3,
window: "60s",
};
exports.Mutation = {
updateUser: mutations_1.updateUser,
login: mutations_1.login,
register: mutations_1.register,
logout: mutations_1.logout,
addWebsite: mutations_1.addWebsite,
crawlWebsite: (_, { url }, context) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
if (!url) {
return {
website: null,
code: message_1.StatusCode.NotFound,
success: true,
message: "A valid Url is required.",
};
}
const { keyid } = ((_a = context.user) === null || _a === void 0 ? void 0 : _a.payload) || defaultPayload;
const [canScan, u] = !config_1.SUPER_MODE
? yield (0, controllers_1.UsersController)().updateScanAttempt({
userId: keyid,
})
: [true];
if (canScan) {
const [website] = yield (0, websites_1.getWebsite)({ userId: keyid, url });
if (crawl_tracking_1.crawlingSet.has((0, crawl_tracking_1.getKey)(url, [], keyid))) {
return {
website: null,
code: message_1.StatusCode.Accepted,
success: true,
message: "Scan already in progress...",
};
}
const { subdomains, tld, ua, proxy, sitemap } = website !== null && website !== void 0 ? website : {};
yield (0, watcher_crawl_1.watcherCrawl)({
url: url,
userId: keyid,
subdomains: subdomains,
tld: tld,
scan: true,
agent: ua,
proxy: proxy,
sitemap: !!sitemap,
});
return {
website: null,
code: 200,
success: true,
message: success_1.CRAWLER_COMMENCED,
};
}
else {
throw new Error((u === null || u === void 0 ? void 0 : u.emailConfirmed) ? strings_1.RATE_EXCEEDED_ERROR : strings_1.EMAIL_NEEDS_CONFIRMATION);
}
}),
scanWebsite: (parent, args, context, info) => __awaiter(void 0, void 0, void 0, function* () {
var _b;
const { url } = args;
const { keyid } = ((_b = context.user) === null || _b === void 0 ? void 0 : _b.payload) || defaultPayload;
const unauth = typeof keyid === "undefined";
const rateLimitConfig = !unauth ? defaultScanLimit : scanRateLimitConfig;
let errorMessage;
if (!config_1.SUPER_MODE) {
const [canScan, u] = yield (0, controllers_1.UsersController)().updateScanAttempt({
userId: keyid,
});
if (!canScan) {
errorMessage = u.emailConfirmed
? strings_1.RATE_EXCEEDED_ERROR
: strings_1.EMAIL_NEEDS_CONFIRMATION;
}
if (!errorMessage) {
errorMessage = yield (0, scan_1.gqlRateLimiter)({
parent,
args,
context,
info,
}, rateLimitConfig);
}
if (errorMessage) {
throw new Error(errorMessage);
}
}
let data = {};
if (!unauth) {
data = yield (0, actions_1.crawlPage)({
url,
userId: keyid,
sendSub: true,
}, false);
}
else {
data = yield (0, actions_1.scanWebsite)({
url,
noStore: true,
});
}
return (0, website_gql_1.websiteFormatter)(data);
}),
removeWebsite: (_, { url, deleteMany = false }, context) => __awaiter(void 0, void 0, void 0, function* () {
var _c;
const { keyid } = ((_c = context.user) === null || _c === void 0 ? void 0 : _c.payload) || defaultPayload;
const websiteRemoved = yield (0, websites_1.WebsitesController)().removeWebsite({
userId: keyid,
url,
deleteMany,
});
if (websiteRemoved && deleteMany) {
return Object.assign(Object.assign({}, websiteRemoved), { url: `Success all websites and related items deleted.`, id: 0 });
}
return websiteRemoved;
}),
updateWebsite: (_, { userId, url, customHeaders, pageInsights, mobile, standard, ua, robots, subdomains, tld, ignore, rules, runners, proxy, sitemap, monitoringEnabled, }, context) => __awaiter(void 0, void 0, void 0, function* () {
var _d;
const { keyid, audience } = ((_d = context.user) === null || _d === void 0 ? void 0 : _d.payload) || defaultPayload;
const featsEnabled = config_1.SUPER_MODE || audience;
return yield (0, websites_1.WebsitesController)().updateWebsite({
userId: userId || keyid,
url,
pageHeaders: customHeaders,
pageInsights,
mobile,
standard,
ua,
robots,
ignore,
rules,
runners,
tld: featsEnabled ? tld : false,
subdomains: featsEnabled ? subdomains : false,
proxy: featsEnabled ? proxy : undefined,
sitemap: featsEnabled ? sitemap : false,
monitoringEnabled,
});
}),
forgotPassword: (_, { email }, _context) => __awaiter(void 0, void 0, void 0, function* () {
return yield (0, controllers_1.UsersController)().forgotPassword({
email,
});
}),
confirmEmail: (_, { email }, context) => __awaiter(void 0, void 0, void 0, function* () {
var _e;
const { keyid } = ((_e = context.user) === null || _e === void 0 ? void 0 : _e.payload) || defaultPayload;
return yield (0, controllers_1.UsersController)().confirmEmail({
email,
keyid,
});
}),
resetPassword: (_, { email, resetCode }, _context) => __awaiter(void 0, void 0, void 0, function* () {
return yield (0, controllers_1.UsersController)().resetPassword({
email,
resetCode,
});
}),
toggleAlert: (_, { alertEnabled }, context) => __awaiter(void 0, void 0, void 0, function* () {
var _f;
const { keyid } = ((_f = context.user) === null || _f === void 0 ? void 0 : _f.payload) || defaultPayload;
return yield (0, controllers_1.UsersController)().toggleAlert({
keyid,
alertEnabled,
});
}),
sortWebsites: (_, { order }, context) => __awaiter(void 0, void 0, void 0, function* () {
var _g;
const { keyid } = ((_g = context.user) === null || _g === void 0 ? void 0 : _g.payload) || defaultPayload;
return yield (0, websites_1.WebsitesController)().sortWebsites({
userId: keyid,
order,
});
}),
setPageSpeedKey: (_, { pageSpeedApiKey }, context) => __awaiter(void 0, void 0, void 0, function* () {
var _h, _j;
return yield (0, controllers_1.UsersController)().setPageSpeedKey({
id: (_j = (_h = context.user) === null || _h === void 0 ? void 0 : _h.payload) === null || _j === void 0 ? void 0 : _j.keyid,
pageSpeedApiKey,
});
}),
addPaymentSubscription: mutations_1.addPaymentSubscription,
cancelSubscription: mutations_1.cancelSubscription,
filterEmailDates: mutations_1.filterEmailDates,
};
//# sourceMappingURL=mutations.js.map
;