UNPKG

3.29 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5var __importStar = (this && this.__importStar) || function (mod) {
6 if (mod && mod.__esModule) return mod;
7 var result = {};
8 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
9 result["default"] = mod;
10 return result;
11};
12Object.defineProperty(exports, "__esModule", { value: true });
13const biguint_format_1 = __importDefault(require("biguint-format"));
14const crypto_1 = __importDefault(require("crypto"));
15const flake_idgen_1 = __importDefault(require("flake-idgen"));
16const winston = __importStar(require("winston"));
17const _1 = require(".");
18const flaker = new flake_idgen_1.default({ id: Number.parseInt(process.env.SERVER_ID) || 0, epoch: 1514764800000 });
19var Security;
20(function (Security) {
21 /**
22 * Creates a unique snowflake
23 */
24 function snowflake() {
25 return new Promise((resolve, reject) => {
26 flaker.next((err, id) => {
27 err ? reject(err) : resolve(biguint_format_1.default(id, 'dec'));
28 });
29 });
30 }
31 Security.snowflake = snowflake;
32 /**
33 * Creates a secure random string of a given length
34 * @param length the length
35 */
36 function random(length) {
37 return new Promise((resolve, reject) => {
38 crypto_1.default.randomBytes(length / 2, function (err, buffer) {
39 err ? reject(err) : resolve(buffer.toString("hex"));
40 });
41 });
42 }
43 Security.random = random;
44})(Security = exports.Security || (exports.Security = {}));
45var Miscellaneous;
46(function (Miscellaneous) {
47 /**
48 * Returns an object with a promise and a callback
49 */
50 function callbackPromise() {
51 let struct = {};
52 struct.promise = new Promise((resolve) => struct.cb = resolve);
53 return struct;
54 }
55 Miscellaneous.callbackPromise = callbackPromise;
56 function sortNumbersInObject(obj) {
57 const sortable = [];
58 for (let key in obj) {
59 sortable.push([key, obj[key]]);
60 }
61 sortable.sort((a, b) => a[1] - b[1]);
62 return sortable;
63 }
64 Miscellaneous.sortNumbersInObject = sortNumbersInObject;
65})(Miscellaneous = exports.Miscellaneous || (exports.Miscellaneous = {}));
66exports.Logger = new winston.Logger({
67 transports: [
68 new winston.transports.Console({
69 level: "debug",
70 handleExceptions: false,
71 json: false,
72 colorize: true,
73 }),
74 ],
75 exitOnError: false,
76});
77/**
78 * Computes the inheritence-based role list
79 */
80function calculateInclusiveRoles() {
81 const moderator = {}, admin = {}, root = {};
82 for (let rootID of _1.Constants.ROLES.root)
83 moderator[rootID] = admin[rootID] = root[rootID] = true;
84 for (let adminID of _1.Constants.ROLES.admin)
85 moderator[adminID] = admin[adminID] = true;
86 for (let moderatorID of _1.Constants.ROLES.moderator)
87 moderator[moderatorID] = true;
88 return { moderator: Object.keys(moderator), admin: Object.keys(admin), root: Object.keys(root) };
89}
90exports.calculateInclusiveRoles = calculateInclusiveRoles;
91//# sourceMappingURL=util.js.map
\No newline at end of file