Skip to content

Instantly share code, notes, and snippets.

@edqx

edqx/logs.txt Secret

Created May 22, 2021 20:12
Show Gist options
  • Save edqx/ab5005e8deb26a22a2a2f387e2ec62c7 to your computer and use it in GitHub Desktop.
Save edqx/ab5005e8deb26a22a2a2f387e2ec62c7 to your computer and use it in GitHub Desktop.
C:/Users/Edward/Projects/2021/May/SwagClan/src/api/index.ts {
content: '"use strict";\r\n' +
'var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n' +
' if (k2 === undefined) k2 = k;\r\n' +
' Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n' +
'}) : (function(o, m, k, k2) {\r\n' +
' if (k2 === undefined) k2 = k;\r\n' +
' o[k2] = m[k];\r\n' +
'}));\r\n' +
'var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n' +
' Object.defineProperty(o, "default", { enumerable: true, value: v });\r\n' +
'}) : function(o, v) {\r\n' +
' o["default"] = v;\r\n' +
'});\r\n' +
'var __importStar = (this && this.__importStar) || function (mod) {\r\n' +
' if (mod && mod.__esModule) return mod;\r\n' +
' var result = {};\r\n' +
' if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n' +
' __setModuleDefault(result, mod);\r\n' +
' return result;\r\n' +
'};\r\n' +
'var __importDefault = (this && this.__importDefault) || function (mod) {\r\n' +
' return (mod && mod.__esModule) ? mod : { "default": mod };\r\n' +
'};\r\n' +
'Object.defineProperty(exports, "__esModule", { value: true });\r\n' +
'exports.app = exports.ApiApplication = exports.parseFileTree = void 0;\r\n' +
'require("reflect-metadata");\r\n' +
'const express_1 = __importDefault(require("express"));\r\n' +
'const promises_1 = __importDefault(require("fs/promises"));\r\n' +
'const util_1 = __importDefault(require("util"));\r\n' +
'const chalk_1 = __importDefault(require("chalk"));\r\n' +
'const path_1 = __importDefault(require("path"));\r\n' +
'const cors_1 = __importDefault(require("cors"));\r\n' +
'const cookie_parser_1 = __importDefault(require("cookie-parser"));\r\n' +
'const application_1 = require("src/application");\r\n' +
'const responses_1 = require("./responses");\r\n' +
'const shared_1 = require("../../shared");\r\n' +
'const rename = {\r\n' +
' index: "",\r\n' +
' "404": "*"\r\n' +
'};\r\n' +
'const verbs = ["GET", "POST", "PUT", "PATCH", "DELETE", "ALL"];\r\n' +
'const verbClrs = {\r\n' +
' GET: chalk_1.default.green,\r\n' +
' POST: chalk_1.default.yellow,\r\n' +
' PUT: chalk_1.default.white.magenta,\r\n' +
' PATCH: chalk_1.default.blue,\r\n' +
' DELETE: chalk_1.default.red,\r\n' +
' ALL: chalk_1.default.white,\r\n' +
' MIDDLE: chalk_1.default.grey\r\n' +
'};\r\n' +
'function formatSeconds(num) {\r\n' +
' if (num <= 0.05) {\r\n' +
' return chalk_1.default.green(num.toFixed(2) + "s");\r\n' +
' }\r\n' +
' if (num <= 0.1) {\r\n' +
' return chalk_1.default.yellow(num.toFixed(2) + "s");\r\n' +
' }\r\n' +
' return chalk_1.default.red(num.toFixed(2) + "s");\r\n' +
'}\r\n' +
'function formatVerb(verb) {\r\n' +
' return verbClrs[verb](verb).padStart(16);\r\n' +
'}\r\n' +
'const paramRegex = /(?<=\\/):[a-zA-Z]+((?=\\/)|$)/g;\r\n' +
'function normaliseRoute(route) {\r\n' +
' if (route.endsWith("/")) {\r\n' +
' return route.substr(0, route.length - 1);\r\n' +
' }\r\n' +
' if (route.length === 0) {\r\n' +
' return "/";\r\n' +
' }\r\n' +
' return route;\r\n' +
'}\r\n' +
'function formatRoute(route) {\r\n' +
' return normaliseRoute(route).replace(paramRegex, x => chalk_1.default.cyan(x));\r\n' +
'}\r\n' +
'function formatStatus(status) {\r\n' +
' if (status < 200) {\r\n' +
' return chalk_1.default.grey(status);\r\n' +
' }\r\n' +
' if (status < 300) {\r\n' +
' return chalk_1.default.green(status);\r\n' +
' }\r\n' +
' if (status < 400) {\r\n' +
' return chalk_1.default.cyan(status);\r\n' +
' }\r\n' +
' if (status < 500) {\r\n' +
' return chalk_1.default.red(status);\r\n' +
' }\r\n' +
' if (status < 600) {\r\n' +
' return chalk_1.default.magenta(status);\r\n' +
' }\r\n' +
' return chalk_1.default.grey(status);\r\n' +
'}\r\n' +
'async function parseFileTree(middlewares, endpoints, app, base, dir) {\r\n' +
' const files = await promises_1.default.readdir(dir);\r\n' +
' const filenames = files.map((file) => path_1.default.resolve(dir, file));\r\n' +
' const dirs = [];\r\n' +
' await Promise.all(filenames.map(async (filename) => {\r\n' +
' const stat = await promises_1.default.stat(filename);\r\n' +
' const basename = path_1.default.basename(filename, ".ts");\r\n' +
' const is_dir = stat.isDirectory();\r\n' +
' if (is_dir) {\r\n' +
' const route = rename[basename] ?? basename;\r\n' +
' dirs.push({ filename, route });\r\n' +
' }\r\n' +
' else {\r\n' +
' if (basename === "middleware") {\r\n' +
' middlewares.push({ filename, route: base });\r\n' +
' }\r\n' +
' else {\r\n' +
' const parts = basename.split(" ");\r\n' +
' const method = parts[0];\r\n' +
' const rest = parts.slice(1).join(" ");\r\n' +
' const route = rename[rest] ?? rest;\r\n' +
' if (!verbs.includes(method))\r\n' +
' return;\r\n' +
' if (rest === "404") {\r\n' +
' endpoints.unshift({\r\n' +
' method,\r\n' +
' route: base + "/" + route,\r\n' +
' filename\r\n' +
' });\r\n' +
' }\r\n' +
' else {\r\n' +
' endpoints.push({\r\n' +
' method,\r\n' +
' route: base + "/" + route,\r\n' +
' filename\r\n' +
' });\r\n' +
' }\r\n' +
' }\r\n' +
' }\r\n' +
' }));\r\n' +
' for (const dir of dirs) {\r\n' +
' await parseFileTree(middlewares, endpoints, app, base + "/" + dir.route, dir.filename);\r\n' +
' }\r\n' +
'}\r\n' +
'exports.parseFileTree = parseFileTree;\r\n' +
'class ApiApplication extends application_1.SwagclanApp {\r\n' +
' constructor() {\r\n' +
' super("api");\r\n' +
' }\r\n' +
' async start() {\r\n' +
' await super.start();\r\n' +
' this.server = express_1.default();\r\n' +
' this.server.use(cors_1.default({\r\n' +
' origin: this.config.base_web,\r\n' +
' credentials: true\r\n' +
' }));\r\n' +
' this.server.use(express_1.default.json());\r\n' +
' this.server.use(cookie_parser_1.default());\r\n' +
' const middlewares = [];\r\n' +
' const endpoints = [];\r\n' +
' await parseFileTree(middlewares, endpoints, this, "", path_1.default.resolve(__dirname, "./routes"));\r\n' +
' const start_imports = Date.now();\r\n' +
' for (let i = 0; i < middlewares.length; i++) {\r\n' +
' const md = middlewares[i];\r\n' +
' const start = Date.now();\r\n' +
' const { default: middleware } = await Promise.resolve().then(() => __importStar(require(md.filename)));\r\n' +
' const replaced = md.route.replace(/\\$/g, ":");\r\n' +
' const idx = (i + 1)\r\n' +
' .toString()\r\n' +
' .padStart((endpoints.length + middlewares.length)\r\n' +
' .toString()\r\n' +
' .length);\r\n' +
' const took = Date.now() - start;\r\n' +
' app.logger.info("(%s/%s - %s) %s %s", idx, endpoints.length + middlewares.length, formatSeconds(took / 1000), formatVerb("MIDDLE"), formatRoute(md.route));\r\n' +
' app.server.use(replaced, async (req, res, next) => {\r\n' +
' try {\r\n' +
' for (const md of middleware) {\r\n' +
' await md(req, res);\r\n' +
' }\r\n' +
' }\r\n' +
' catch (e) {\r\n' +
' if (e instanceof responses_1.HttpResponse) {\r\n' +
' return res.status(e.code).json(e);\r\n' +
' }\r\n' +
' else {\r\n' +
' const user = await req.session?.getUser();\r\n' +
' const uuid = await this.logFatal(e, {\r\n' +
' user_id: user?.id\r\n' +
' });\r\n' +
' res.status(500).json(new responses_1.InternalServerError(shared_1.ErrorCode.Unknown, uuid));\r\n' +
' throw e;\r\n' +
' }\r\n' +
' }\r\n' +
' next();\r\n' +
' });\r\n' +
' }\r\n' +
' /*const imported = await Promise.all(\r\n' +
' endpoints.map(ep => {\r\n' +
' return import(ep.filename);\r\n' +
' })\r\n' +
' );*/\r\n' +
' for (let i = 0; i < endpoints.length; i++) {\r\n' +
' const ep = endpoints[i];\r\n' +
' const start = Date.now();\r\n' +
' const { default: handler, middleware } = await Promise.resolve().then(() => __importStar(require(ep.filename)));\r\n' +
' const replaced = ep.route.replace(/\\$/g, ":");\r\n' +
' if (middleware) {\r\n' +
' for (const md of middleware) {\r\n' +
' app.server.use(replaced, async (req, res, next) => {\r\n' +
' if (req.method !== ep.method)\r\n' +
' return next();\r\n' +
' try {\r\n' +
' await md(req, res);\r\n' +
' }\r\n' +
' catch (e) {\r\n' +
' if (e instanceof responses_1.HttpResponse) {\r\n' +
' return res.status(e.code).json(e);\r\n' +
' }\r\n' +
' else {\r\n' +
' const user = await req.session?.getUser();\r\n' +
' const uuid = await this.logFatal(e, {\r\n' +
' user_id: user?.id\r\n' +
' });\r\n' +
' res.status(500).json(new responses_1.InternalServerError(shared_1.ErrorCode.Unknown, uuid));\r\n' +
' throw e;\r\n' +
' }\r\n' +
' }\r\n' +
' next();\r\n' +
' });\r\n' +
' }\r\n' +
' }\r\n' +
' const idx = (i + middlewares.length + 1)\r\n' +
' .toString()\r\n' +
' .padStart((endpoints.length + middlewares.length)\r\n' +
' .toString()\r\n' +
' .length);\r\n' +
' const took = Date.now() - start;\r\n' +
' app.logger.info("(%s/%s - %s) %s %s", idx, endpoints.length + middlewares.length, formatSeconds(took / 1000), formatVerb(ep.method), formatRoute(replaced));\r\n' +
' app.server[ep.method?.toLowerCase()](replaced, async (req, res, next) => {\r\n' +
' try {\r\n' +
' await handler.handle(req, res, next);\r\n' +
' }\r\n' +
' catch (e) {\r\n' +
' if (e instanceof responses_1.HttpError) {\r\n' +
' res.status(e.code).json(e);\r\n' +
' }\r\n' +
' else {\r\n' +
' const user = await req.session?.getUser();\r\n' +
' const uuid = await this.logFatal(e, {\r\n' +
' user_id: user?.id\r\n' +
' });\r\n' +
' res.status(500).json(new responses_1.InternalServerError(shared_1.ErrorCode.Unknown, uuid));\r\n' +
' throw e;\r\n' +
' }\r\n' +
' }\r\n' +
' app.logger.info("%s %s -> %s", formatVerb(ep.method), normaliseRoute(replaced)\r\n' +
' .replace(paramRegex, param => chalk_1.default.cyan(req.params[param.substr(1)])), formatStatus(res.statusCode));\r\n' +
' });\r\n' +
' }\r\n' +
' this.logger.info("Took %ss", ((Date.now() - start_imports) / 1000).toFixed(2));\r\n' +
' this.http = this.server.listen(this.config.api.port, () => {\r\n' +
' this.logger.info("Listening on *:" + this.config.api.port);\r\n' +
' });\r\n' +
' }\r\n' +
' async shutdown() {\r\n' +
' await super.shutdown();\r\n' +
' await util_1.default.promisify(this.http.close.bind(this.http))();\r\n' +
' this.logger.info("Closed HTTP server.");\r\n' +
' }\r\n' +
'}\r\n' +
'exports.ApiApplication = ApiApplication;\r\n' +
'const app = new ApiApplication;\r\n' +
'exports.app = app;\r\n' +
'(async () => {\r\n' +
' await app.start();\r\n' +
'})();\r\n' +
'//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQzovVXNlcnMvRWR3YXJkL1Byb2plY3RzLzIwMjEvTWF5L1N3YWdDbGFuL3NyYy9hcGkvaW5kZXgudHMiLCJzb3VyY2VzIjpbIkM6L1VzZXJzL0Vkd2FyZC9Qcm9qZWN0cy8yMDIxL01heS9Td2FnQ2xhbi9zcmMvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0QkFBMEI7QUFFMUIsc0RBQThCO0FBRTlCLDJEQUE2QjtBQUM3QixnREFBd0I7QUFDeEIsa0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4QixnREFBd0I7QUFDeEIsa0VBQXlDO0FBRXpDLGlEQUE4QztBQUM5QywyQ0FBMkU7QUFFM0UseUNBQXlDO0FBRXpDLE1BQU0sTUFBTSxHQUFHO0lBQ1gsS0FBSyxFQUFFLEVBQUU7SUFDVCxLQUFLLEVBQUUsR0FBRztDQUNiLENBQUM7QUFHRixNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFVLENBQUM7QUF3QnhFLE1BQU0sUUFBUSxHQUFHO0lBQ2IsR0FBRyxFQUFFLGVBQUssQ0FBQyxLQUFLO0lBQ2hCLElBQUksRUFBRSxlQUFLLENBQUMsTUFBTTtJQUNsQixHQUFHLEVBQUUsZUFBSyxDQUFDLEtBQUssQ0FBQyxPQUFPO0lBQ3hCLEtBQUssRUFBRSxlQUFLLENBQUMsSUFBSTtJQUNqQixNQUFNLEVBQUUsZUFBSyxDQUFDLEdBQUc7SUFDakIsR0FBRyxFQUFFLGVBQUssQ0FBQyxLQUFLO0lBQ2hCLE1BQU0sRUFBRSxlQUFLLENBQUMsSUFBSTtDQUM2QixDQUFDO0FBRXBELFNBQVMsYUFBYSxDQUFDLEdBQVc7SUFDOUIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ2IsT0FBTyxlQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENB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Y0FBYyxDQUFDO0FBTXRCLGtCQUFHO0FBSlosQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNSLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5cbmltcG9ydCBleHByZXNzIGZyb20gXCJleHByZXNzXCI7XG5pbXBvcnQgaHR0cCBmcm9tIFwiaHR0cFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHV0aWwgZnJvbSBcInV0aWxcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgY29ycyBmcm9tIFwiY29yc1wiO1xuaW1wb3J0IGNvb2tpZVBhcnNlciBmcm9tIFwiY29va2llLXBhcnNlclwiO1xuXG5pbXBvcnQgeyBTd2FnY2xhbkFwcCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb25cIjtcbmltcG9ydCB7IEh0dHBFcnJvciwgSHR0cFJlc3BvbnNlLCBJbnRlcm5hbFNlcnZlckVycm9yIH0gZnJvbSBcIi4vcmVzcG9uc2VzXCI7XG5pbXBvcnQgeyBVc2VyU2Vzc2lvbiB9IGZyb20gXCIuL1Nlc3Npb25cIjtcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gXCIuLi8uLi9zaGFyZWRcIjtcblxuY29uc3QgcmVuYW1lID0ge1xuICAgIGluZGV4OiBcIlwiLFxuICAgIFwiNDA0XCI6IFwiKlwiXG59O1xudHlwZSBSZW5hbWVQYXRoID0ga2V5b2YgdHlwZW9mIHJlbmFtZTtcblxuY29uc3QgdmVyYnMgPSBbXCJHRVRcIiwgXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIiwgXCJERUxFVEVcIiwgXCJBTExcIl0gYXMgY29uc3Q7XG50eXBlIEh0dHBWZXJiID0gdHlwZW9mIHZlcmJzW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEluZm88UmVxVHlwZT4gZXh0ZW5kcyBleHByZXNzLlJlcXVlc3Qge1xuICAgIGJvZHk6IFJlcVR5cGU7XG4gICAgc2Vzc2lvbj86IFVzZXJTZXNzaW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlSW5mbzxSZXNUeXBlPiBleHRlbmRzIGV4cHJlc3MuUmVzcG9uc2Uge1xuICAgIGpzb24oYm9keTogUmVzVHlwZSk6IHRoaXM7XG59XG5cbmV4cG9ydCB0eXBlIEFwcFJlcUhhbmRsZXI8UmVxVHlwZSwgUmVzVHlwZT4gPSAoXG4gICAgcmVxOiBSZXF1ZXN0SW5mbzxSZXFUeXBlPixcbiAgICByZXM6IFJlc3BvbnNlSW5mbzxSZXNUeXBlPixcbiAgICBuZXh0PzogZXhwcmVzcy5OZXh0RnVuY3Rpb25cbikgPT4gUHJvbWlzZTxIdHRwRXJyb3IgfCBhbnk+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZEVuZHBvaW50IHtcbiAgICByb3V0ZTogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgbWV0aG9kPzogSHR0cFZlcmI7XG59XG5cbmNvbnN0IHZlcmJDbHJzID0ge1xuICAgIEdFVDogY2hhbGsuZ3JlZW4sXG4gICAgUE9TVDogY2hhbGsueWVsbG93LFxuICAgIFBVVDogY2hhbGsud2hpdGUubWFnZW50YSxcbiAgICBQQVRDSDogY2hhbGsuYmx1ZSxcbiAgICBERUxFVEU6IGNoYWxrLnJlZCxcbiAgICBBTEw6IGNoYWxrLndoaXRlLFxuICAgIE1JRERMRTogY2hhbGsuZ3JleVxufSBhcyBSZWNvcmQ8SHR0cFZlcmJ8XCJNSURETEVcIiwgY2hhbGsuQ2hhbGtGdW5jdGlvbj47XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMobnVtOiBudW1iZXIpIHtcbiAgICBpZiAobnVtIDw9IDAuMDUpIHtcbiAgICAgICAgcmV0dXJuIGNoYWxrLmdyZWVuKG51bS50b0ZpeGVkKDIpICsgXCJzXCIpO1xuICAgIH1cblxuICAgIGlmIChudW0gPD0gMC4xKSB7XG4gICAgICAgIHJldHVybiBjaGFsay55ZWxsb3cobnVtLnRvRml4ZWQoMikgKyBcInNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYWxrLnJlZChudW0udG9GaXhlZCgyKSArIFwic1wiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VmVyYih2ZXJiOiBIdHRwVmVyYnxcIk1JRERMRVwiKSB7XG4gICAgcmV0dXJuIHZlcmJDbHJzW3ZlcmJdKHZlcmIpLnBhZFN0YXJ0KDE2KTtcbn1cblxuY29uc3QgcGFyYW1SZWdleCA9IC8oPzw9XFwvKTpbYS16QS1aXSsoKD89XFwvKXwkKS9nO1xuXG5mdW5jdGlvbiBub3JtYWxpc2VSb3V0ZShyb3V0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHJvdXRlLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gcm91dGUuc3Vic3RyKDAsIHJvdXRlLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChyb3V0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwiL1wiO1xuICAgIH1cblxuICAgIHJldHVybiByb3V0ZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Um91dGUocm91dGU6IHN0cmluZykge1xuICAgIHJldHVybiBub3JtYWxpc2VSb3V0ZShyb3V0ZSkucmVwbGFjZShwYXJhbVJlZ2V4LCB4ID0+IGNoYWxrLmN5YW4oeCkpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTdGF0dXMoc3RhdHVzOiBudW1iZXIpIHtcbiAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgIHJldHVybiBjaGFsay5ncmV5KHN0YXR1cyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA8IDMwMCkge1xuICAgICAgICByZXR1cm4gY2hhbGsuZ3JlZW4oc3RhdHVzKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgIHJldHVybiBjaGFsay5jeWFuKHN0YXR1cyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA8IDUwMCkge1xuICAgICAgICByZXR1cm4gY2hhbGsucmVkKHN0YXR1cyk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA8IDYwMCkge1xuICAgICAgICByZXR1cm4gY2hhbGsubWFnZW50YShzdGF0dXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFsay5ncmV5KHN0YXR1cyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZUZpbGVUcmVlKFxuICAgIG1pZGRsZXdhcmVzOiBQYXJzZWRFbmRwb2ludFtdLFxuICAgIGVuZHBvaW50czogUGFyc2VkRW5kcG9pbnRbXSxcbiAgICBhcHA6IEFwaUFwcGxpY2F0aW9uLFxuICAgIGJhc2U6IHN0cmluZyxcbiAgICBkaXI6IHN0cmluZ1xuKSB7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcik7XG5cbiAgICBjb25zdCBmaWxlbmFtZXMgPSBmaWxlcy5tYXAoKGZpbGUpID0+IHBhdGgucmVzb2x2ZShkaXIsIGZpbGUpKTtcblxuICAgIGNvbnN0IGRpcnM6IFBhcnNlZEVuZHBvaW50W10gPSBbXTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBmaWxlbmFtZXMubWFwKGFzeW5jIGZpbGVuYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgXCIudHNcIik7XG4gICAgICAgICAgICBjb25zdCBpc19kaXIgPSBzdGF0LmlzRGlyZWN0b3J5KCk7XG5cbiAgICAgICAgICAgIGlmIChpc19kaXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3V0ZSA9IHJlbmFtZVtiYXNlbmFtZSBhcyBSZW5hbWVQYXRoXSA/PyBiYXNlbmFtZTtcbiAgICAgICAgICAgICAgICBkaXJzLnB1c2goeyBmaWxlbmFtZSwgcm91dGUgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChiYXNlbmFtZSA9PT0gXCJtaWRkbGV3YXJlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWlkZGxld2FyZXMucHVzaCh7IGZpbGVuYW1lLCByb3V0ZTogYmFzZSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGJhc2VuYW1lLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gcGFydHNbMF0gYXMgSHR0cFZlcmI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwYXJ0cy5zbGljZSgxKS5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSByZW5hbWVbcmVzdCBhcyBSZW5hbWVQYXRoXSA/PyByZXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmVyYnMuaW5jbHVkZXMobWV0aG9kKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0ID09PSBcIjQwNFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludHMudW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOiBiYXNlICsgXCIvXCIgKyByb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOiBiYXNlICsgXCIvXCIgKyByb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgYXdhaXQgcGFyc2VGaWxlVHJlZShtaWRkbGV3YXJlcywgZW5kcG9pbnRzLCBhcHAsIGJhc2UgKyBcIi9cIiArIGRpci5yb3V0ZSwgZGlyLmZpbGVuYW1lKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlBcHBsaWNhdGlvbiBleHRlbmRzIFN3YWdjbGFuQXBwIHtcbiAgICBzZXJ2ZXIhOiBleHByZXNzLkV4cHJlc3M7XG4gICAgaHR0cCE6IGh0dHAuU2VydmVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiYXBpXCIpO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICBhd2FpdCBzdXBlci5zdGFydCgpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyID0gZXhwcmVzcygpO1xuICAgICAgICB0aGlzLnNlcnZlci51c2UoXG4gICAgICAgICAgICBjb3JzKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IHRoaXMuY29uZmlnLmJhc2Vfd2ViLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlcnZlci51c2UoZXhwcmVzcy5qc29uKCkpO1xuICAgICAgICB0aGlzLnNlcnZlci51c2UoY29va2llUGFyc2VyKCkpO1xuXG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmVzOiBQYXJzZWRFbmRwb2ludFtdID0gW107XG4gICAgICAgIGNvbnN0IGVuZHBvaW50czogUGFyc2VkRW5kcG9pbnRbXSA9IFtdO1xuXG4gICAgICAgIGF3YWl0IHBhcnNlRmlsZVRyZWUobWlkZGxld2FyZXMsIGVuZHBvaW50cywgdGhpcywgXCJcIiwgcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCIuL3JvdXRlc1wiKSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRfaW1wb3J0cyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaWRkbGV3YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbWQgPSBtaWRkbGV3YXJlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdDogbWlkZGxld2FyZSB9ID0gYXdhaXQgaW1wb3J0KG1kLmZpbGVuYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZWQgPSBtZC5yb3V0ZS5yZXBsYWNlKC9cXCQvZywgXCI6XCIpO1xuXG4gICAgICAgICAgICBjb25zdCBpZHggPSAoaSArIDEpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoXG4gICAgICAgICAgICAgICAgICAgIChlbmRwb2ludHMubGVuZ3RoICsgbWlkZGxld2FyZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCB0b29rID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICAgICAgYXBwLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgIFwiKCVzLyVzIC0gJXMpICVzICVzXCIsXG4gICAgICAgICAgICAgICAgaWR4LCBlbmRwb2ludHMubGVuZ3RoICsgbWlkZGxld2FyZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGZvcm1hdFNlY29uZHModG9vayAvIDEwMDApLCBmb3JtYXRWZXJiKFwiTUlERExFXCIpLCBmb3JtYXRSb3V0ZShtZC5yb3V0ZSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFwcC5zZXJ2ZXIudXNlKHJlcGxhY2VkLCBhc3luYyAocmVxOiBSZXF1ZXN0SW5mbzxhbnk+LCByZXM6IFJlc3BvbnNlSW5mbzxhbnk+LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtZCBvZiBtaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBtZChyZXEsIHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyhlLmNvZGUpLmpzb24oZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgcmVxLnNlc3Npb24/LmdldFVzZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBhd2FpdCB0aGlzLmxvZ0ZhdGFsKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiB1c2VyPy5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbihuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvcihFcnJvckNvZGUuVW5rbm93biwgdXVpZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLypjb25zdCBpbXBvcnRlZCA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZW5kcG9pbnRzLm1hcChlcCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGltcG9ydChlcC5maWxlbmFtZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApOyovXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmRwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVwID0gZW5kcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgeyBkZWZhdWx0OiBoYW5kbGVyLCBtaWRkbGV3YXJlIH0gPSBhd2FpdCBpbXBvcnQoZXAuZmlsZW5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlZCA9IGVwLnJvdXRlLnJlcGxhY2UoL1xcJC9nLCBcIjpcIik7XG5cbiAgICAgICAgICAgIGlmIChtaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtZCBvZiBtaWRkbGV3YXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcC5zZXJ2ZXIudXNlKHJlcGxhY2VkLCBhc3luYyAocmVxOiBSZXF1ZXN0SW5mbzxhbnk+LCByZXM6IFJlc3BvbnNlSW5mbzxhbnk+LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLm1ldGhvZCAhPT0gZXAubWV0aG9kKSByZXR1cm4gbmV4dCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG1kKHJlcSwgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzLnN0YXR1cyhlLmNvZGUpLmpzb24oZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHJlcS5zZXNzaW9uPy5nZXRVc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBhd2FpdCB0aGlzLmxvZ0ZhdGFsKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaWQ6IHVzZXI/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbihuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvcihFcnJvckNvZGUuVW5rbm93biwgdXVpZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IChpICsgbWlkZGxld2FyZXMubGVuZ3RoICsgMSlcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydChcbiAgICAgICAgICAgICAgICAgICAgKGVuZHBvaW50cy5sZW5ndGggKyBtaWRkbGV3YXJlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvb2sgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgICAgICBhcHAubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgXCIoJXMvJXMgLSAlcykgJXMgJXNcIixcbiAgICAgICAgICAgICAgICBpZHgsIGVuZHBvaW50cy5sZW5ndGggKyBtaWRkbGV3YXJlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgZm9ybWF0U2Vjb25kcyh0b29rIC8gMTAwMCksIGZvcm1hdFZlcmIoZXAubWV0aG9kIGFzIEh0dHBWZXJiKSwgZm9ybWF0Um91dGUocmVwbGFjZWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXBwLnNlcnZlcltcbiAgICAgICAgICAgICAgICBlcC5tZXRob2Q/LnRvTG93ZXJDYXNlKCkgYXNcbiAgICAgICAgICAgICAgICAgICAgfCBcImdldFwiXG4gICAgICAgICAgICAgICAgICAgIHwgXCJwb3N0XCJcbiAgICAgICAgICAgICAgICAgICAgfCBcInB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHwgXCJwYXRjaFwiXG4gICAgICAgICAgICAgICAgICAgIHwgXCJkZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICB8IFwiYWxsXCJcbiAgICAgICAgICAgIF0ocmVwbGFjZWQsIGFzeW5jIChyZXE6IFJlcXVlc3RJbmZvPGFueT4sIHJlczogUmVzcG9uc2VJbmZvPGFueT4sIG5leHQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZShyZXEsIHJlcywgbmV4dCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEh0dHBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnN0YXR1cyhlLmNvZGUpLmpzb24oZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgcmVxLnNlc3Npb24/LmdldFVzZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSBhd2FpdCB0aGlzLmxvZ0ZhdGFsKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiB1c2VyPy5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbihuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvcihFcnJvckNvZGUuVW5rbm93biwgdXVpZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgXCIlcyAlcyAtPiAlc1wiLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRWZXJiKGVwLm1ldGhvZCBhcyBIdHRwVmVyYiksXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGlzZVJvdXRlKHJlcGxhY2VkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocGFyYW1SZWdleCwgcGFyYW0gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsay5jeWFuKHJlcS5wYXJhbXNbcGFyYW0uc3Vic3RyKDEpXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFN0YXR1cyhyZXMuc3RhdHVzQ29kZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIFwiVG9vayAlc3NcIixcbiAgICAgICAgICAgICgoRGF0ZS5ub3coKSAtIHN0YXJ0X2ltcG9ydHMpIC8gMTAwMCkudG9GaXhlZCgyKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaHR0cCA9IHRoaXMuc2VydmVyLmxpc3Rlbih0aGlzLmNvbmZpZy5hcGkucG9ydCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcIkxpc3RlbmluZyBvbiAqOlwiICsgdGhpcy5jb25maWcuYXBpLnBvcnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBzaHV0ZG93bigpIHtcbiAgICAgICAgYXdhaXQgc3VwZXIuc2h1dGRvd24oKTtcblxuICAgICAgICBhd2FpdCB1dGlsLnByb21pc2lmeSh0aGlzLmh0dHAuY2xvc2UuYmluZCh0aGlzLmh0dHApKSgpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXCJDbG9zZWQgSFRUUCBzZXJ2ZXIuXCIpO1xuICAgIH1cbn1cblxuY29uc3QgYXBwID0gbmV3IEFwaUFwcGxpY2F0aW9uO1xuXG4oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGFwcC5zdGFydCgpO1xufSkoKTtcblxuZXhwb3J0IHsgYXBwIH07XG4iXX0='
}
internal/process/task_queues.js undefined
C:/Users/Edward/Projects/2021/May/SwagClan/src/api/routes/commands/POST index.ts {
content: '"use strict";\r\n' +
'var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n' +
' if (k2 === undefined) k2 = k;\r\n' +
' Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n' +
'}) : (function(o, m, k, k2) {\r\n' +
' if (k2 === undefined) k2 = k;\r\n' +
' o[k2] = m[k];\r\n' +
'}));\r\n' +
'var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n' +
' Object.defineProperty(o, "default", { enumerable: true, value: v });\r\n' +
'}) : function(o, v) {\r\n' +
' o["default"] = v;\r\n' +
'});\r\n' +
'var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n' +
' var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n' +
' if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n' +
' else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n' +
' return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n' +
'};\r\n' +
'var __importStar = (this && this.__importStar) || function (mod) {\r\n' +
' if (mod && mod.__esModule) return mod;\r\n' +
' var result = {};\r\n' +
' if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n' +
' __setModuleDefault(result, mod);\r\n' +
' return result;\r\n' +
'};\r\n' +
'var __metadata = (this && this.__metadata) || function (k, v) {\r\n' +
' if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\r\n' +
'};\r\n' +
'var _a, _b;\r\n' +
'Object.defineProperty(exports, "__esModule", { value: true });\r\n' +
'exports.CreateCustomCommandSchema = void 0;\r\n' +
'const uuid_1 = require("uuid");\r\n' +
'const zod = __importStar(require("zod"));\r\n' +
'const shared_1 = require("@swagclan/shared");\r\n' +
'const CustomCommandId_1 = require("src/models/CustomCommandId");\r\n' +
'const CustomCommandVersion_1 = require("src/models/CustomCommandVersion");\r\n' +
'const responses_1 = require("src/api/responses");\r\n' +
'const api_1 = require("src/api");\r\n' +
'const validate_1 = require("src/api/hooks/validate");\r\n' +
'const auth_1 = require("src/api/hooks/auth");\r\n' +
'const initial_version = {\r\n' +
' version: "draft",\r\n' +
' trigger: "new-command",\r\n' +
' config: {},\r\n' +
' params: [],\r\n' +
' variables: {},\r\n' +
' actions: {\r\n' +
' mxfamvb: {\r\n' +
' type: "action",\r\n' +
' rule: "send_message",\r\n' +
' fields: {\r\n' +
' channel: {\r\n' +
' type: "action_ref",\r\n' +
' id: "lgrkdiu"\r\n' +
' },\r\n' +
' message: {\r\n' +
' type: "input",\r\n' +
' id: "Hello, world!"\r\n' +
' }\r\n' +
' }\r\n' +
' },\r\n' +
' lgrkdiu: {\r\n' +
' type: "action",\r\n' +
' rule: "channel",\r\n' +
' parent: "mxfamvb",\r\n' +
' fields: {}\r\n' +
' }\r\n' +
' },\r\n' +
' first: "mxfamvb"\r\n' +
'};\r\n' +
'exports.CreateCustomCommandSchema = zod.object({\r\n' +
' name: zod.string().max(20, "Name must be less than 20 characters in length."),\r\n' +
' summary: zod.string().max(200, "Summary must be less than 200 characters in length."),\r\n' +
' tags: zod.array(zod.string().max(20, "Trigger must be less than 20 characters in length.")),\r\n' +
' thumbnail: zod.string(),\r\n' +
' deleted: zod.boolean(),\r\n' +
' private: zod.boolean()\r\n' +
'});\r\n' +
'class CreateCommand {\r\n' +
' static async handle(req, res) {\r\n' +
' const user = await req.session?.getUser();\r\n' +
' if (!user)\r\n' +
' throw new responses_1.Unauthorized(shared_1.ErrorCode.NotLoggedIn);\r\n' +
' 5..hello.ok.ombmobb.bs.bd.sb;\r\n' +
' const doc = await CustomCommandId_1.CustomCommandIdModel.create({\r\n' +
' ...req.body,\r\n' +
' id: uuid_1.v4(),\r\n' +
' author_id: user.id,\r\n' +
' versions: {},\r\n' +
' latest: null,\r\n' +
' first: null,\r\n' +
' deleted: false,\r\n' +
' guild_count: 0\r\n' +
' });\r\n' +
' await CustomCommandVersion_1.CustomCommandVersionModel.create({\r\n' +
' ...initial_version,\r\n' +
' command_id: doc.id\r\n' +
' });\r\n' +
' res.status(200).json({\r\n' +
' id: doc.id,\r\n' +
' name: doc.name,\r\n' +
' summary: doc.summary,\r\n' +
' tags: doc.tags,\r\n' +
' thumbnail: doc.thumbnail,\r\n' +
' author_id: doc.author_id,\r\n' +
' private: doc.private,\r\n' +
' deleted: doc.deleted,\r\n' +
' versions: doc.versions,\r\n' +
' latest: doc.latest,\r\n' +
' first: doc.first,\r\n' +
' guild_count: doc.guild_count\r\n' +
' });\r\n' +
' }\r\n' +
'}\r\n' +
'__decorate([\r\n' +
' auth_1.RequireAuth,\r\n' +
' validate_1.ValidateSchema(exports.CreateCustomCommandSchema),\r\n' +
' __metadata("design:type", Function),\r\n' +
' __metadata("design:paramtypes", [typeof (_a = typeof api_1.RequestInfo !== "undefined" && api_1.RequestInfo) === "function" ? _a : Object, typeof (_b = typeof api_1.ResponseInfo !== "undefined" && api_1.ResponseInfo) === "function" ? _b : Object]),\r\n' +
' __metadata("design:returntype", Promise)\r\n' +
'], CreateCommand, "handle", null);\r\n' +
'exports.default = CreateCommand;\r\n' +
'//# sourceMappingURL=POdata:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQzovVXNlcnMvRWR3YXJkL1Byb2plY3RzLzIwMjEvTWF5L1N3YWdDbGFuL3NyYy9hcGkvcm91dGVzL2NvbW1hbmRzL1BPU1QgaW5kZXgudHMiLCJzb3VyY2VzIjpbIkM6L1VzZXJzL0Vkd2FyZC9Qcm9qZWN0cy8yMDIxL01heS9Td2FnQ2xhbi9zcmMvYXBpL3JvdXRlcy9jb21tYW5kcy9QT1NUIGluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQW9DO0FBQ3BDLHlDQUEyQjtBQUUzQiw2Q0FHMEI7QUFFMUIsZ0VBQWtFO0FBRWxFLDBFQUd5QztBQUV6QyxpREFBaUQ7QUFDakQsaUNBQW9EO0FBRXBELHFEQUF3RDtBQUN4RCw2Q0FBaUQ7QUFFakQsTUFBTSxlQUFlLEdBQWtDO0lBQ25ELE9BQU8sRUFBRSxPQUFPO0lBQ2hCLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLE1BQU0sRUFBRSxFQUFFO0lBQ1YsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsRUFBRTtJQUNiLE9BQU8sRUFBRTtRQUNMLE9BQU8sRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLGNBQWM7WUFDcEIsTUFBTSxFQUFFO2dCQUNKLE9BQU8sRUFBRTtvQkFDTCxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsRUFBRSxFQUFFLFNBQVM7aUJBQ2hCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxJQUFJLEVBQUUsT0FBTztvQkFDYixFQUFFLEVBQUUsZUFBZTtpQkFDdEI7YUFDSjtTQUNKO1FBQ0QsT0FBTyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxFQUFFO1NBQ2I7S0FDSjtJQUNELEtBQUssRUFBRSxTQUFTO0NBQ25CLENBQUM7QUFFVyxRQUFBLHlCQUF5QixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDaEQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGlEQUFpRCxDQUFDO0lBQzdFLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxxREFBcUQsQ0FBQztJQUNyRixJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FDWCxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxvREFBb0QsQ0FBQyxDQUM3RTtJQUNELFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFO0lBQ3RCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFO0NBQ3pCLENBQUMsQ0FBQztBQUVILE1BQXFCLGFBQWE7SUFHOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2YsR0FBNkQsRUFDN0QsR0FBNkM7UUFFN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxJQUFJO1lBQ0wsTUFBTSxJQUFJLHdCQUFZLENBQUMsa0JBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqRCxDQUFTLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFckMsTUFBTSxHQUFHLEdBQUcsTUFBTSxzQ0FBb0IsQ0FBQyxNQUFNLENBQUM7WUFDMUMsR0FBRyxHQUFHLENBQUMsSUFBSTtZQUNYLEVBQUUsRUFBRSxTQUFNLEVBQUU7WUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbEIsUUFBUSxFQUFFLEVBQUU7WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxXQUFXLEVBQUUsQ0FBQztTQUNqQixDQUFDLENBQUM7UUFFSCxNQUFNLGdEQUF5QixDQUFDLE1BQU0sQ0FBQztZQUNuQyxHQUFHLGVBQWU7WUFDbEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1NBQ3JCLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2pCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNWLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDeEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ3hCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQTFDRztJQUZDLGtCQUFXO0lBQ1gseUJBQWMsQ0FBQyxpQ0FBeUIsQ0FBQzs7eURBRWpDLGlCQUFXLG9CQUFYLGlCQUFXLG9EQUNYLGtCQUFZLG9CQUFaLGtCQUFZOztpQ0F1Q3BCO0FBNUNMLGdDQTZDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgKiBhcyB6b2QgZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQge1xuICAgIEVycm9yQ29kZSxcbiAgICBTY0FwaUNyZWF0ZUNvbW1hbmRSZXNwb25zZVxufSBmcm9tIFwiQHN3YWdjbGFuL3NoYXJlZFwiO1xuXG5pbXBvcnQgeyBDdXN0b21Db21tYW5kSWRNb2RlbCB9IGZyb20gXCJzcmMvbW9kZWxzL0N1c3RvbUNvbW1hbmRJZFwiO1xuXG5pbXBvcnQge1xuICAgIEN1c3RvbUNvbW1hbmRWZXJzaW9uLFxuICAgIEN1c3RvbUNvbW1hbmRWZXJzaW9uTW9kZWxcbn0gZnJvbSBcInNyYy9tb2RlbHMvQ3VzdG9tQ29tbWFuZFZlcnNpb25cIjtcblxuaW1wb3J0IHsgVW5hdXRob3JpemVkIH0gZnJvbSBcInNyYy9hcGkvcmVzcG9uc2VzXCI7XG5pbXBvcnQgeyBSZXF1ZXN0SW5mbywgUmVzcG9uc2VJbmZvIH0gZnJvbSBcInNyYy9hcGlcIjtcblxuaW1wb3J0IHsgVmFsaWRhdGVTY2hlbWEgfSBmcm9tIFwic3JjL2FwaS9ob29rcy92YWxpZGF0ZVwiO1xuaW1wb3J0IHsgUmVxdWlyZUF1dGggfSBmcm9tIFwic3JjL2FwaS9ob29rcy9hdXRoXCI7XG5cbmNvbnN0IGluaXRpYWxfdmVyc2lvbjogUGFydGlhbDxDdXN0b21Db21tYW5kVmVyc2lvbj4gPSB7XG4gICAgdmVyc2lvbjogXCJkcmFmdFwiLFxuICAgIHRyaWdnZXI6IFwibmV3LWNvbW1hbmRcIixcbiAgICBjb25maWc6IHt9LFxuICAgIHBhcmFtczogW10sXG4gICAgdmFyaWFibGVzOiB7fSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICAgIG14ZmFtdmI6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiYWN0aW9uXCIsXG4gICAgICAgICAgICBydWxlOiBcInNlbmRfbWVzc2FnZVwiLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgY2hhbm5lbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFjdGlvbl9yZWZcIixcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwibGdya2RpdVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiSGVsbG8sIHdvcmxkIVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsZ3JrZGl1OiB7XG4gICAgICAgICAgICB0eXBlOiBcImFjdGlvblwiLFxuICAgICAgICAgICAgcnVsZTogXCJjaGFubmVsXCIsXG4gICAgICAgICAgICBwYXJlbnQ6IFwibXhmYW12YlwiLFxuICAgICAgICAgICAgZmllbGRzOiB7fVxuICAgICAgICB9XG4gICAgfSxcbiAgICBmaXJzdDogXCJteGZhbXZiXCJcbn07XG5cbmV4cG9ydCBjb25zdCBDcmVhdGVDdXN0b21Db21tYW5kU2NoZW1hID0gem9kLm9iamVjdCh7XG4gICAgbmFtZTogem9kLnN0cmluZygpLm1heCgyMCwgXCJOYW1lIG11c3QgYmUgbGVzcyB0aGFuIDIwIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLlwiKSxcbiAgICBzdW1tYXJ5OiB6b2Quc3RyaW5nKCkubWF4KDIwMCwgXCJTdW1tYXJ5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzIGluIGxlbmd0aC5cIiksXG4gICAgdGFnczogem9kLmFycmF5KFxuICAgICAgICB6b2Quc3RyaW5nKCkubWF4KDIwLCBcIlRyaWdnZXIgbXVzdCBiZSBsZXNzIHRoYW4gMjAgY2hhcmFjdGVycyBpbiBsZW5ndGguXCIpXG4gICAgKSxcbiAgICB0aHVtYm5haWw6IHpvZC5zdHJpbmcoKSxcbiAgICBkZWxldGVkOiB6b2QuYm9vbGVhbigpLFxuICAgIHByaXZhdGU6IHpvZC5ib29sZWFuKClcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcmVhdGVDb21tYW5kIHtcbiAgICBAUmVxdWlyZUF1dGhcbiAgICBAVmFsaWRhdGVTY2hlbWEoQ3JlYXRlQ3VzdG9tQ29tbWFuZFNjaGVtYSlcbiAgICBzdGF0aWMgYXN5bmMgaGFuZGxlKFxuICAgICAgICByZXE6IFJlcXVlc3RJbmZvPHpvZC5pbmZlcjx0eXBlb2YgQ3JlYXRlQ3VzdG9tQ29tbWFuZFNjaGVtYT4+LFxuICAgICAgICByZXM6IFJlc3BvbnNlSW5mbzxTY0FwaUNyZWF0ZUNvbW1hbmRSZXNwb25zZT5cbiAgICApIHtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHJlcS5zZXNzaW9uPy5nZXRVc2VyKCk7XG5cbiAgICAgICAgaWYgKCF1c2VyKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZChFcnJvckNvZGUuTm90TG9nZ2VkSW4pO1xuXG4gICAgICAgICg1IGFzIGFueSkuaGVsbG8ub2sub21ibW9iYi5icy5iZC5zYjtcblxuICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBDdXN0b21Db21tYW5kSWRNb2RlbC5jcmVhdGUoe1xuICAgICAgICAgICAgLi4ucmVxLmJvZHksXG4gICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICBhdXRob3JfaWQ6IHVzZXIuaWQsXG4gICAgICAgICAgICB2ZXJzaW9uczoge30sXG4gICAgICAgICAgICBsYXRlc3Q6IG51bGwsXG4gICAgICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZ3VpbGRfY291bnQ6IDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgQ3VzdG9tQ29tbWFuZFZlcnNpb25Nb2RlbC5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uaW5pdGlhbF92ZXJzaW9uLFxuICAgICAgICAgICAgY29tbWFuZF9pZDogZG9jLmlkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgICAgICAgIGlkOiBkb2MuaWQsXG4gICAgICAgICAgICBuYW1lOiBkb2MubmFtZSxcbiAgICAgICAgICAgIHN1bW1hcnk6IGRvYy5zdW1tYXJ5LFxuICAgICAgICAgICAgdGFnczogZG9jLnRhZ3MsXG4gICAgICAgICAgICB0aHVtYm5haWw6IGRvYy50aHVtYm5haWwsXG4gICAgICAgICAgICBhdXRob3JfaWQ6IGRvYy5hdXRob3JfaWQsXG4gICAgICAgICAgICBwcml2YXRlOiBkb2MucHJpdmF0ZSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IGRvYy5kZWxldGVkLFxuICAgICAgICAgICAgdmVyc2lvbnM6IGRvYy52ZXJzaW9ucyxcbiAgICAgICAgICAgIGxhdGVzdDogZG9jLmxhdGVzdCxcbiAgICAgICAgICAgIGZpcnN0OiBkb2MuZmlyc3QsXG4gICAgICAgICAgICBndWlsZF9jb3VudDogZG9jLmd1aWxkX2NvdW50XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ=='
}
C:/Users/Edward/Projects/2021/May/SwagClan/src/api/routes/commands/POdata:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQzovVXNlcnMvRWR3YXJkL1Byb2plY3RzLzIwMjEvTWF5L1N3YWdDbGFuL3NyYy9hcGkvcm91dGVzL2NvbW1hbmRzL1BPU1QgaW5kZXgudHMiLCJzb3VyY2VzIjpbIkM6L1VzZXJzL0Vkd2FyZC9Qcm9qZWN0cy8yMDIxL01heS9Td2FnQ2xhbi9zcmMvYXBpL3JvdXRlcy9jb21tYW5kcy9QT1NUIGluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQW9DO0FBQ3BDLHlDQUEyQjtBQUUzQiw2Q0FHMEI7QUFFMUIsZ0VBQWtFO0FBRWxFLDBFQUd5QztBQUV6QyxpREFBaUQ7QUFDakQsaUNBQW9EO0FBRXBELHFEQUF3RDtBQUN4RCw2Q0FBaUQ7QUFFakQsTUFBTSxlQUFlLEdBQWtDO0lBQ25ELE9BQU8sRUFBRSxPQUFPO0lBQ2hCLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLE1BQU0sRUFBRSxFQUFFO0lBQ1YsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsRUFBRTtJQUNiLE9BQU8sRUFBRTtRQUNMLE9BQU8sRUFBRTtZQUNMLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLGNBQWM7WUFDcEIsTUFBTSxFQUFFO2dCQUNKLE9BQU8sRUFBRTtvQkFDTCxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsRUFBRSxFQUFFLFNBQVM7aUJBQ2hCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxJQUFJLEVBQUUsT0FBTztvQkFDYixFQUFFLEVBQUUsZUFBZTtpQkFDdEI7YUFDSjtTQUNKO1FBQ0QsT0FBTyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxFQUFFO1NBQ2I7S0FDSjtJQUNELEtBQUssRUFBRSxTQUFTO0NBQ25CLENBQUM7QUFFVyxRQUFBLHlCQUF5QixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDaEQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGlEQUFpRCxDQUFDO0lBQzdFLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxxREFBcUQsQ0FBQztJQUNyRixJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FDWCxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxvREFBb0QsQ0FBQyxDQUM3RTtJQUNELFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFO0lBQ3RCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFO0NBQ3pCLENBQUMsQ0FBQztBQUVILE1BQXFCLGFBQWE7SUFHOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2YsR0FBNkQsRUFDN0QsR0FBNkM7UUFFN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxJQUFJO1lBQ0wsTUFBTSxJQUFJLHdCQUFZLENBQUMsa0JBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqRCxDQUFTLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFckMsTUFBTSxHQUFHLEdBQUcsTUFBTSxzQ0FBb0IsQ0FBQyxNQUFNLENBQUM7WUFDMUMsR0FBRyxHQUFHLENBQUMsSUFBSTtZQUNYLEVBQUUsRUFBRSxTQUFNLEVBQUU7WUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbEIsUUFBUSxFQUFFLEVBQUU7WUFDWixNQUFNLEVBQUUsSUFBSTtZQUNaLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxXQUFXLEVBQUUsQ0FBQztTQUNqQixDQUFDLENBQUM7UUFFSCxNQUFNLGdEQUF5QixDQUFDLE1BQU0sQ0FBQztZQUNuQyxHQUFHLGVBQWU7WUFDbEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1NBQ3JCLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2pCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNWLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDeEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ3hCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87WUFDcEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQTFDRztJQUZDLGtCQUFXO0lBQ1gseUJBQWMsQ0FBQyxpQ0FBeUIsQ0FBQzs7eURBRWpDLGlCQUFXLG9CQUFYLGlCQUFXLG9EQUNYLGtCQUFZLG9CQUFaLGtCQUFZOztpQ0F1Q3BCO0FBNUNMLGdDQTZDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgKiBhcyB6b2QgZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQge1xuICAgIEVycm9yQ29kZSxcbiAgICBTY0FwaUNyZWF0ZUNvbW1hbmRSZXNwb25zZVxufSBmcm9tIFwiQHN3YWdjbGFuL3NoYXJlZFwiO1xuXG5pbXBvcnQgeyBDdXN0b21Db21tYW5kSWRNb2RlbCB9IGZyb20gXCJzcmMvbW9kZWxzL0N1c3RvbUNvbW1hbmRJZFwiO1xuXG5pbXBvcnQge1xuICAgIEN1c3RvbUNvbW1hbmRWZXJzaW9uLFxuICAgIEN1c3RvbUNvbW1hbmRWZXJzaW9uTW9kZWxcbn0gZnJvbSBcInNyYy9tb2RlbHMvQ3VzdG9tQ29tbWFuZFZlcnNpb25cIjtcblxuaW1wb3J0IHsgVW5hdXRob3JpemVkIH0gZnJvbSBcInNyYy9hcGkvcmVzcG9uc2VzXCI7XG5pbXBvcnQgeyBSZXF1ZXN0SW5mbywgUmVzcG9uc2VJbmZvIH0gZnJvbSBcInNyYy9hcGlcIjtcblxuaW1wb3J0IHsgVmFsaWRhdGVTY2hlbWEgfSBmcm9tIFwic3JjL2FwaS9ob29rcy92YWxpZGF0ZVwiO1xuaW1wb3J0IHsgUmVxdWlyZUF1dGggfSBmcm9tIFwic3JjL2FwaS9ob29rcy9hdXRoXCI7XG5cbmNvbnN0IGluaXRpYWxfdmVyc2lvbjogUGFydGlhbDxDdXN0b21Db21tYW5kVmVyc2lvbj4gPSB7XG4gICAgdmVyc2lvbjogXCJkcmFmdFwiLFxuICAgIHRyaWdnZXI6IFwibmV3LWNvbW1hbmRcIixcbiAgICBjb25maWc6IHt9LFxuICAgIHBhcmFtczogW10sXG4gICAgdmFyaWFibGVzOiB7fSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICAgIG14ZmFtdmI6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiYWN0aW9uXCIsXG4gICAgICAgICAgICBydWxlOiBcInNlbmRfbWVzc2FnZVwiLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgY2hhbm5lbDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFjdGlvbl9yZWZcIixcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwibGdya2RpdVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiSGVsbG8sIHdvcmxkIVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsZ3JrZGl1OiB7XG4gICAgICAgICAgICB0eXBlOiBcImFjdGlvblwiLFxuICAgICAgICAgICAgcnVsZTogXCJjaGFubmVsXCIsXG4gICAgICAgICAgICBwYXJlbnQ6IFwibXhmYW12YlwiLFxuICAgICAgICAgICAgZmllbGRzOiB7fVxuICAgICAgICB9XG4gICAgfSxcbiAgICBmaXJzdDogXCJteGZhbXZiXCJcbn07XG5cbmV4cG9ydCBjb25zdCBDcmVhdGVDdXN0b21Db21tYW5kU2NoZW1hID0gem9kLm9iamVjdCh7XG4gICAgbmFtZTogem9kLnN0cmluZygpLm1heCgyMCwgXCJOYW1lIG11c3QgYmUgbGVzcyB0aGFuIDIwIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLlwiKSxcbiAgICBzdW1tYXJ5OiB6b2Quc3RyaW5nKCkubWF4KDIwMCwgXCJTdW1tYXJ5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzIGluIGxlbmd0aC5cIiksXG4gICAgdGFnczogem9kLmFycmF5KFxuICAgICAgICB6b2Quc3RyaW5nKCkubWF4KDIwLCBcIlRyaWdnZXIgbXVzdCBiZSBsZXNzIHRoYW4gMjAgY2hhcmFjdGVycyBpbiBsZW5ndGguXCIpXG4gICAgKSxcbiAgICB0aHVtYm5haWw6IHpvZC5zdHJpbmcoKSxcbiAgICBkZWxldGVkOiB6b2QuYm9vbGVhbigpLFxuICAgIHByaXZhdGU6IHpvZC5ib29sZWFuKClcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDcmVhdGVDb21tYW5kIHtcbiAgICBAUmVxdWlyZUF1dGhcbiAgICBAVmFsaWRhdGVTY2hlbWEoQ3JlYXRlQ3VzdG9tQ29tbWFuZFNjaGVtYSlcbiAgICBzdGF0aWMgYXN5bmMgaGFuZGxlKFxuICAgICAgICByZXE6IFJlcXVlc3RJbmZvPHpvZC5pbmZlcjx0eXBlb2YgQ3JlYXRlQ3VzdG9tQ29tbWFuZFNjaGVtYT4+LFxuICAgICAgICByZXM6IFJlc3BvbnNlSW5mbzxTY0FwaUNyZWF0ZUNvbW1hbmRSZXNwb25zZT5cbiAgICApIHtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHJlcS5zZXNzaW9uPy5nZXRVc2VyKCk7XG5cbiAgICAgICAgaWYgKCF1c2VyKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFVuYXV0aG9yaXplZChFcnJvckNvZGUuTm90TG9nZ2VkSW4pO1xuXG4gICAgICAgICg1IGFzIGFueSkuaGVsbG8ub2sub21ibW9iYi5icy5iZC5zYjtcblxuICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBDdXN0b21Db21tYW5kSWRNb2RlbC5jcmVhdGUoe1xuICAgICAgICAgICAgLi4ucmVxLmJvZHksXG4gICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICBhdXRob3JfaWQ6IHVzZXIuaWQsXG4gICAgICAgICAgICB2ZXJzaW9uczoge30sXG4gICAgICAgICAgICBsYXRlc3Q6IG51bGwsXG4gICAgICAgICAgICBmaXJzdDogbnVsbCxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZ3VpbGRfY291bnQ6IDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgQ3VzdG9tQ29tbWFuZFZlcnNpb25Nb2RlbC5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uaW5pdGlhbF92ZXJzaW9uLFxuICAgICAgICAgICAgY29tbWFuZF9pZDogZG9jLmlkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgICAgICAgIGlkOiBkb2MuaWQsXG4gICAgICAgICAgICBuYW1lOiBkb2MubmFtZSxcbiAgICAgICAgICAgIHN1bW1hcnk6IGRvYy5zdW1tYXJ5LFxuICAgICAgICAgICAgdGFnczogZG9jLnRhZ3MsXG4gICAgICAgICAgICB0aHVtYm5haWw6IGRvYy50aHVtYm5haWwsXG4gICAgICAgICAgICBhdXRob3JfaWQ6IGRvYy5hdXRob3JfaWQsXG4gICAgICAgICAgICBwcml2YXRlOiBkb2MucHJpdmF0ZSxcbiAgICAgICAgICAgIGRlbGV0ZWQ6IGRvYy5kZWxldGVkLFxuICAgICAgICAgICAgdmVyc2lvbnM6IGRvYy52ZXJzaW9ucyxcbiAgICAgICAgICAgIGxhdGVzdDogZG9jLmxhdGVzdCxcbiAgICAgICAgICAgIGZpcnN0OiBkb2MuZmlyc3QsXG4gICAgICAgICAgICBndWlsZF9jb3VudDogZG9jLmd1aWxkX2NvdW50XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ== undefined
(node:19164) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'ok' of undefined
at Function.handle (C:\Users\Edward\Projects\2021\May\SwagClan\src\api\routes\commands\POST index.ts:85:18)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at C:\Users\Edward\Projects\2021\May\SwagClan\src\api\index.ts:305:21
(Use `node --trace-warnings ...` to show where the warning was created)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment