UNPKG

@a11ywatch/core

Version:
217 lines 9.14 kB
"use strict"; 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