diff --git a/out/auth-proxy.d.ts b/out/auth-proxy.d.ts deleted file mode 100644 index 68ae7b7..0000000 --- a/out/auth-proxy.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -import { RequestHandler } from 'express'; -export declare const AuthProxy: { - router: RequestHandler; -}; diff --git a/out/auth-proxy.js b/out/auth-proxy.js deleted file mode 100644 index 20b53c8..0000000 --- a/out/auth-proxy.js +++ /dev/null @@ -1,49 +0,0 @@ -"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.AuthProxy = void 0; -const _1 = require("."); -const node_fetch_1 = require("node-fetch"); -const router = (req, res, next) => { - const resolvable = new _1.Resolvable(() => __awaiter(void 0, void 0, void 0, function* () { - if (!_1.DefaultConfig.USERINFO_HEADER) { - return undefined; - } - const token = req.header(_1.DefaultConfig.USERINFO_HEADER); - const url = _1.DefaultConfig.AUTH_PROXY_USERINFO_URL || - _1.DefaultConfig.AUTH_PROXY_URL && _1.urlJoin(_1.DefaultConfig.AUTH_PROXY_URL, "userinfo"); - if (token === undefined || url === undefined) { - return undefined; - } - try { - const res = yield node_fetch_1.default(url, { headers: [[_1.DefaultConfig.USERINFO_HEADER, token]] }); - return yield res.json(); - } - catch (e) { - _1.Logger.warn(e); - return undefined; - } - })); - req.getUserInfo = () => resolvable.resolve(); - res.initLogout = function () { - const url = _1.DefaultConfig.AUTH_PROXY_INIT_LOGOUT_URL || - _1.DefaultConfig.AUTH_PROXY_URL && _1.urlJoin(_1.DefaultConfig.AUTH_PROXY_URL, "init-logout"); - if (url === undefined) { - return false; - } - this.redirect(307, url); - return true; - }; - next(); -}; -exports.AuthProxy = { - router, -}; diff --git a/out/auto-reload.d.ts b/out/auto-reload.d.ts deleted file mode 100644 index 9586b23..0000000 --- a/out/auto-reload.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const AutoReloader: { - router: import("express-serve-static-core").Router; -}; diff --git a/out/auto-reload.js b/out/auto-reload.js deleted file mode 100644 index 1fdbfc9..0000000 --- a/out/auto-reload.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AutoReloader = void 0; -const express_1 = require("express"); -const _1 = require("."); -const uuid_1 = require("uuid"); -const router = express_1.Router(); -if (!_1.DefaultConfig.isProduction) { - let uuid = uuid_1.v4(); - let updateTimeout = undefined; - Promise.resolve().then(() => require("node-watch")).then((watch) => { - watch.default('public', { recursive: true }, () => { - if (updateTimeout !== undefined) - clearTimeout(updateTimeout); - updateTimeout = setTimeout(() => { - uuid = uuid_1.v4(); - }, 200); - }); - }).catch((err) => { _1.Logger.error(err); }); - router.get("/auto-reload/client.js", (req, res) => { - _1.Logger.debug(req.url, req.originalUrl, req.baseUrl); - res.setHeader('Content-Type', "application/javascript"); - // language=JavaScript - res.send(` - const loc = window.location; - const url = loc.protocol+'//'+loc.host+'${_1.urlJoin(req.baseUrl, "/auto-reload")}'; - // const parse = async res => (await res.json()).uuid; - const parse = function(res) { - return res.json() - .then(function(json) {return json.uuid;}) } - let hash = undefined; - let hadError = false; - setInterval(function() { - try { - fetch(url) - .then(function(res) { return parse(res) }) - .then(function(data) { - if (data) { - hash = hash === undefined ? data : hash; - if (hash !== data) { - window.location.reload(); - } - } - }); - } catch (e) { - if (hadError === false) { - console.log(e); - hadError = true; - } - } - }, 3000); - `.replace(/\t/g, "")); - }); - router.get("/auto-reload", (req, res) => { - req.noLogging = true; - res.json({ uuid }); - }); -} -exports.AutoReloader = { - router, -}; diff --git a/out/config.d.ts b/out/config.d.ts deleted file mode 100644 index e3b7bef..0000000 --- a/out/config.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -declare function requireEnv(name: string, onlyInProduction?: boolean): void; -export declare const DefaultConfig: { - EXTERNAL_BASE_URL: string; - isProduction: boolean; - requireEnv: typeof requireEnv; - NODE_ENV: string; - PORT: number; - HOSTNAME: string; - BASE_PATH: string; - REDIS_URL: string | undefined; - SESSION_SECRET: string | undefined; - USERINFO_HEADER: string | undefined; - AUTH_PROXY_URL: string | undefined; - AUTH_PROXY_USERINFO_URL: string | undefined; - AUTH_PROXY_INIT_LOGOUT_URL: string | undefined; -}; -export {}; diff --git a/out/config.js b/out/config.js deleted file mode 100644 index dcced38..0000000 --- a/out/config.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DefaultConfig = void 0; -const env = require("env-var"); -const _1 = require("."); -const NODE_ENV = env.get('NODE_ENV').default("development").asString(); -const isProduction = NODE_ENV === 'production'; -const envs = { - NODE_ENV, - // port of the server - PORT: env.get('PORT').default('3000').asPortNumber(), - // hostname of the server ('0.0.0.0' listens on all network interfaces) - HOSTNAME: env.get('HOSTNAME').default('0.0.0.0').asString(), - // base path - BASE_PATH: env.get('BASE_PATH').default('/').asString(), - // external base url - EXTERNAL_BASE_URL: env.get('EXTERNAL_BASE_URL').asString(), - // url of redis session store (required in production using InMemory) - REDIS_URL: env.get('REDIS_URL').asString() || undefined, - // cookie secret for the session id (required in production using Session) - SESSION_SECRET: env.get('SESSION_SECRET').asString() || undefined, - // header where user info token is stored to request auth proxy - USERINFO_HEADER: env.get('USERINFO_HEADER').asString() || undefined, - // base url to init a logout or request user info - AUTH_PROXY_URL: env.get('AUTH_PROXY_URL').asString() || undefined, - // override base url to request user info - AUTH_PROXY_USERINFO_URL: env.get('AUTH_PROXY_USERINFO_URL').asString() || undefined, - // override base url to init a logout - AUTH_PROXY_INIT_LOGOUT_URL: env.get('AUTH_PROXY_INIT_LOGOUT_URL').asString() || undefined, -}; -function requireEnv(name, onlyInProduction = false) { - env.get(name).required(!onlyInProduction || isProduction).asString(); -} -exports.DefaultConfig = Object.assign(Object.assign({}, envs), { EXTERNAL_BASE_URL: envs.EXTERNAL_BASE_URL || - _1.urlJoin(`http://${envs.HOSTNAME}${envs.PORT !== 80 ? `:${envs.PORT}` : ""}`, envs.BASE_PATH), isProduction, - requireEnv }); diff --git a/out/helpers/resolvable.d.ts b/out/helpers/resolvable.d.ts deleted file mode 100644 index b5bec50..0000000 --- a/out/helpers/resolvable.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -declare enum ResolvableState { - WAITING = 0, - PENDING = 1, - ERROR = 2, - DONE = 3 -} -declare class FetchOnce> { - protected fetchMethod?: ((...args: U) => Promise) | undefined; - protected data: T | undefined; - protected error: unknown | undefined; - protected state: ResolvableState; - protected pendings: [(res: Promise | T) => void, (reason: unknown) => void][]; - constructor(fetchMethod?: ((...args: U) => Promise) | undefined); - resolve(...args: U): Promise; - protected isFinished(): boolean; - protected parsePromise(promise: Promise): void; -} -export declare class Resolvable> extends FetchOnce { - constructor(fetchMethod: (...args: U) => Promise); -} -export declare class WaitForSync extends FetchOnce { - protected state: ResolvableState; - constructor(); - setData(data: T): void; - setError(error: unknown): void; -} -export {}; diff --git a/out/helpers/resolvable.js b/out/helpers/resolvable.js deleted file mode 100644 index c155b3c..0000000 --- a/out/helpers/resolvable.js +++ /dev/null @@ -1,85 +0,0 @@ -"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.WaitForSync = exports.Resolvable = void 0; -var ResolvableState; -(function (ResolvableState) { - ResolvableState[ResolvableState["WAITING"] = 0] = "WAITING"; - ResolvableState[ResolvableState["PENDING"] = 1] = "PENDING"; - ResolvableState[ResolvableState["ERROR"] = 2] = "ERROR"; - ResolvableState[ResolvableState["DONE"] = 3] = "DONE"; -})(ResolvableState || (ResolvableState = {})); -class FetchOnce { - constructor(fetchMethod) { - this.fetchMethod = fetchMethod; - this.state = ResolvableState.WAITING; - this.pendings = []; - } - resolve(...args) { - // eslint-disable-next-line promise/avoid-new - return new Promise((resolve, reject) => { - switch (this.state) { - case ResolvableState.WAITING: - this.state = ResolvableState.PENDING; - this.pendings.push([resolve, reject]); - if (this.fetchMethod) - this.parsePromise(this.fetchMethod(...args)); - break; - case ResolvableState.PENDING: - this.pendings.push([resolve, reject]); - break; - case ResolvableState.DONE: - resolve(this.data); - break; - case ResolvableState.ERROR: - reject(this.error); - break; - } - }); - } - isFinished() { - return this.state === ResolvableState.DONE || this.state === ResolvableState.ERROR; - } - parsePromise(promise) { - promise.then((data) => { - this.data = data; - this.state = ResolvableState.DONE; - this.pendings.forEach(pending => pending[0](data)); - }).catch(err => { - this.error = err; - this.state = ResolvableState.ERROR; - this.pendings.forEach(pending => pending[1](err)); - }); - } -} -class Resolvable extends FetchOnce { - constructor(fetchMethod) { - super(fetchMethod); - } -} -exports.Resolvable = Resolvable; -class WaitForSync extends FetchOnce { - constructor() { - super(undefined); - this.state = ResolvableState.PENDING; - } - setData(data) { - if (!this.isFinished()) { - this.parsePromise((() => __awaiter(this, void 0, void 0, function* () { return data; }))()); - } - } - setError(error) { - if (!this.isFinished()) { - this.parsePromise((() => __awaiter(this, void 0, void 0, function* () { throw error; }))()); - } - } -} -exports.WaitForSync = WaitForSync; diff --git a/out/helpers/urlJoin.d.ts b/out/helpers/urlJoin.d.ts deleted file mode 100644 index a972bb6..0000000 --- a/out/helpers/urlJoin.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as properUrlJoin from 'proper-url-join'; -export declare const urlJoin: properUrlJoin.default; diff --git a/out/helpers/urlJoin.js b/out/helpers/urlJoin.js deleted file mode 100644 index 2103c9b..0000000 --- a/out/helpers/urlJoin.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.urlJoin = void 0; -const properUrlJoin = require("proper-url-join"); -exports.urlJoin = properUrlJoin; diff --git a/out/helpers/userinfo.d.ts b/out/helpers/userinfo.d.ts deleted file mode 100644 index eb054cb..0000000 --- a/out/helpers/userinfo.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export declare type UserInfo = { - email: string; - email_verified: boolean; - family_name: string; - given_name: string; - groups: string[]; - name: string; - preferred_username: string; - sub: string; -}; diff --git a/out/helpers/userinfo.js b/out/helpers/userinfo.js deleted file mode 100644 index c8ad2e5..0000000 --- a/out/helpers/userinfo.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/out/index.js b/out/index.js deleted file mode 100644 index 9e7d2af..0000000 --- a/out/index.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Permissions = exports.Session = exports.Polyfill = exports.AutoReloader = exports.urlJoin = exports.WaitForSync = exports.Resolvable = exports.AuthProxy = exports.HttpLogger = exports.Logger = exports.Redis = exports.DefaultConfig = void 0; -var config_1 = require("./config"); -Object.defineProperty(exports, "DefaultConfig", { enumerable: true, get: function () { return config_1.DefaultConfig; } }); -var redis_1 = require("./redis"); -Object.defineProperty(exports, "Redis", { enumerable: true, get: function () { return redis_1.Redis; } }); -var logging_1 = require("./logging"); -Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logging_1.Logger; } }); -Object.defineProperty(exports, "HttpLogger", { enumerable: true, get: function () { return logging_1.HttpLogger; } }); -var auth_proxy_1 = require("./auth-proxy"); -Object.defineProperty(exports, "AuthProxy", { enumerable: true, get: function () { return auth_proxy_1.AuthProxy; } }); -var resolvable_1 = require("./helpers/resolvable"); -Object.defineProperty(exports, "Resolvable", { enumerable: true, get: function () { return resolvable_1.Resolvable; } }); -Object.defineProperty(exports, "WaitForSync", { enumerable: true, get: function () { return resolvable_1.WaitForSync; } }); -var urlJoin_1 = require("./helpers/urlJoin"); -Object.defineProperty(exports, "urlJoin", { enumerable: true, get: function () { return urlJoin_1.urlJoin; } }); -var auto_reload_1 = require("./auto-reload"); -Object.defineProperty(exports, "AutoReloader", { enumerable: true, get: function () { return auto_reload_1.AutoReloader; } }); -var polyfill_1 = require("./polyfill"); -Object.defineProperty(exports, "Polyfill", { enumerable: true, get: function () { return polyfill_1.Polyfill; } }); -var session_1 = require("./session"); -Object.defineProperty(exports, "Session", { enumerable: true, get: function () { return session_1.Session; } }); -var permissions_1 = require("./permissions"); -Object.defineProperty(exports, "Permissions", { enumerable: true, get: function () { return permissions_1.Permissions; } }); diff --git a/out/logging.d.ts b/out/logging.d.ts deleted file mode 100644 index f2b5179..0000000 --- a/out/logging.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as winston from 'winston'; -import { RequestHandler } from 'express'; -export declare const Logger: { - error: (...args: unknown[]) => winston.Logger; - http: (...args: unknown[]) => winston.Logger; - info: (...args: unknown[]) => winston.Logger; - silly: (...args: unknown[]) => winston.Logger; - warn: (...args: unknown[]) => winston.Logger; - verbose: (...args: unknown[]) => winston.Logger; - debug: (...args: unknown[]) => winston.Logger; - log: (...args: unknown[]) => winston.Logger; -}; -export declare const HttpLogger: RequestHandler; diff --git a/out/logging.js b/out/logging.js deleted file mode 100644 index 5509f56..0000000 --- a/out/logging.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HttpLogger = exports.Logger = void 0; -const winston = require("winston"); -const colors = require("colors"); -const _1 = require("."); -const prune = require("json-prune"); -const logger = winston.createLogger({ - level: _1.DefaultConfig.isProduction ? "info" : "silly", - format: winston.format.json(), - transports: [ - new winston.transports.Console({ - format: winston.format.simple(), - }), - ], -}); -const levels = ["error", "warn", "info", "http", "verbose", "debug", "silly"]; -const wrapper = (original) => { - return (...args) => { - return original(args.map((obj) => typeof obj === "string" ? obj : prune(obj)).join(" ")); - }; -}; -exports.Logger = {}; -for (const level of levels) { - exports.Logger[level] = wrapper(logger[level]); -} -exports.Logger.log = wrapper(logger["silly"]); -exports.HttpLogger = (req, res, next) => { - const start = Date.now(); - const path = req.path; - const end = res.end; - res.end = function (...args) { - const statusCode = res.statusCode; - const colorFunction = statusCode >= 500 ? colors.red - : statusCode >= 400 ? colors.yellow - : statusCode >= 300 ? colors.cyan - : statusCode >= 200 ? colors.green - : colors.gray; - const status = colorFunction(res.statusCode.toString(10)); - const method = req.method.toUpperCase().padEnd(6, " "); - const responseTime = (Date.now() - start).toString(10).padStart(3, " "); - if (!req.noLogging) - exports.Logger.http(`${status} ${method} ${responseTime}ms ${path}`); - end.apply(res, args); - }; - next(); -}; diff --git a/out/permissions.d.ts b/out/permissions.d.ts deleted file mode 100644 index 6a1297b..0000000 --- a/out/permissions.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { AccessControl, IQueryInfo, Permission } from 'role-acl'; -import { Query } from 'role-acl/lib/src/core/Query'; -import { Request, RequestHandler } from 'express'; -declare class PermissionManager extends AccessControl { - can(roleOrRequest: Request | string | string[] | IQueryInfo): PermQuery; - getRouter(resource: string, opts: Partial): RequestHandler; -} -export declare type RermRouterOpts = { - context: unknown; - action: string; - skipConditions: boolean; -}; -export declare class PermQuery extends Query { - protected resolveRequest: Request | undefined; - constructor(grants: unknown, roleOrRequest: Request | string | string[] | IQueryInfo); - on(resource: string, skipConditions?: boolean): Promise; - context(context: unknown): PermQuery; - skipConditions(value: boolean): PermQuery; - with(context: unknown): PermQuery; - execute(action: string): PermQuery; - sync(): PermQuery; -} -export declare const Permissions: PermissionManager; -export {}; diff --git a/out/permissions.js b/out/permissions.js deleted file mode 100644 index 4178f92..0000000 --- a/out/permissions.js +++ /dev/null @@ -1,92 +0,0 @@ -"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.Permissions = exports.PermQuery = void 0; -const role_acl_1 = require("role-acl"); -const Query_1 = require("role-acl/lib/src/core/Query"); -// see https://www.npmjs.com/package/role-acl -class PermissionManager extends role_acl_1.AccessControl { - can(roleOrRequest) { - return new PermQuery(this.getGrants(), roleOrRequest); - } - getRouter(resource, opts) { - return (req, res, next) => __awaiter(this, void 0, void 0, function* () { - let query = this.can(req); - if (opts.context) - query = query.context(opts.context); - if (opts.action) - query = query.execute(opts.action); - if (opts.skipConditions) - query = query.skipConditions(opts.skipConditions); - const permission = yield query.on(resource); - if (permission.granted) { - req.permissionDetails = permission; - next(); - } - else { - res.sendStatus(403); - } - }); - } -} -class PermQuery extends Query_1.Query { - constructor(grants, roleOrRequest) { - function isRequest(obj) { - // eslint-disable-next-line no-prototype-builtins - return typeof obj === 'object' && obj && obj.hasOwnProperty('path') || false; - } - if (isRequest(roleOrRequest)) { - super(grants, []); - this.resolveRequest = roleOrRequest; - } - else { - super(grants, roleOrRequest); - } - } - on(resource, skipConditions) { - const _super = Object.create(null, { - on: { get: () => super.on } - }); - var _a; - return __awaiter(this, void 0, void 0, function* () { - if (this.resolveRequest) { - const userInfo = yield this.resolveRequest.getUserInfo(); - this.role((_a = userInfo === null || userInfo === void 0 ? void 0 : userInfo.groups) !== null && _a !== void 0 ? _a : []); - } - if (typeof this._.role === 'object' && this._.role.includes('noaccess') || - typeof this._.role === 'string' && this._.role === 'noaccess') { - this.role([]); - } - return _super.on.call(this, resource, skipConditions); - }); - } - context(context) { - super.context(context); - return this; - } - skipConditions(value) { - super.skipConditions(value); - return this; - } - with(context) { - super.with(context); - return this; - } - execute(action) { - super.execute(action); - return this; - } - sync() { - throw new role_acl_1.AccessControlError("Sync method is not allowed on PermissionManager!"); - } -} -exports.PermQuery = PermQuery; -exports.Permissions = new PermissionManager(); diff --git a/out/polyfill-worker.d.ts b/out/polyfill-worker.d.ts deleted file mode 100644 index cb0ff5c..0000000 --- a/out/polyfill-worker.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/out/polyfill-worker.js b/out/polyfill-worker.js deleted file mode 100644 index ab2ec1b..0000000 --- a/out/polyfill-worker.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -// workers/add.js -const worker_1 = require("threads/worker"); -const fs = require("fs"); -const polyfill_analyzer_1 = require("@10xjs/polyfill-analyzer"); -const polyfills_1 = require("@10xjs/polyfill-analyzer/dist/polyfills"); -worker_1.expose(() => { - const exclude = [ - "console.markTimeline", - "console.timeline", - "console.timelineEnd", - ]; - const featureList = polyfill_analyzer_1.analyze({ - source: fs.readFileSync('./public/js/bundle.js', 'utf-8'), - include: polyfills_1.default.filter(x => !exclude.includes(x)), - // Not all features listed by polyfillLibrary.listAllPolyfills()` can be detected. - unsupportedPolyfill: 'ignore', - }); - const feats = {}; - for (const feature of featureList) { - feats[feature] = {}; - } - return feats; -}); diff --git a/out/polyfill.js b/out/polyfill.js deleted file mode 100644 index e1db6ba..0000000 --- a/out/polyfill.js +++ /dev/null @@ -1,39 +0,0 @@ -"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.Polyfill = void 0; -const polyfillLibrary = require("polyfill-library"); -const _1 = require("."); -const threads_1 = require("threads"); -const features = new _1.WaitForSync(); -(() => __awaiter(void 0, void 0, void 0, function* () { - const worker = yield threads_1.spawn(new threads_1.Worker("./polyfill-worker")); - const feats = yield worker(); - yield threads_1.Thread.terminate(worker); - return feats; -}))() - .then(feats => { - feats["fetch"] = {}; - _1.Logger.debug("Polyfill analysed:", Object.keys(feats)); - features.setData(feats); -}) - .catch(err => features.setError(err)); -function getRouter(opts) { - const options = Object.assign({ minify: _1.DefaultConfig.isProduction, unknown: "polyfill" }, opts); - return (req, res) => __awaiter(this, void 0, void 0, function* () { - const polyfillBundle = yield polyfillLibrary.getPolyfillString(Object.assign(Object.assign({}, options), { uaString: req.header("user-agent"), features: yield features.resolve(), stream: false })); - res.setHeader('Content-Type', 'text/javascript'); - res.send(polyfillBundle); - }); -} -exports.Polyfill = { - getRouter: getRouter, -}; diff --git a/out/redis.d.ts b/out/redis.d.ts deleted file mode 100644 index e28d55f..0000000 --- a/out/redis.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as redis from 'redis'; -interface RedisType { - client: redis.RedisClient | undefined; - get(key: string): Promise; - set(key: string, value: string): Promise; - del(...keys: string[]): Promise; -} -export declare const Redis: RedisType; -export {}; diff --git a/out/redis.js b/out/redis.js deleted file mode 100644 index 6d0587e..0000000 --- a/out/redis.js +++ /dev/null @@ -1,76 +0,0 @@ -"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.Redis = void 0; -const redis = require("redis"); -const _1 = require("."); -const util_1 = require("util"); -class RealRedis { - get client() { - if (this._client !== undefined) - return this._client; - _1.DefaultConfig.requireEnv('REDIS_URL'); - this._client = redis.createClient({ url: _1.DefaultConfig.REDIS_URL }); - return this._client; - } - get(key) { - return __awaiter(this, void 0, void 0, function* () { - if (!this._promGet) - this._promGet = util_1.promisify(this.client.get); - const value = yield this._promGet(key); - // eslint-disable-next-line no-null/no-null - return value === null ? undefined : value; - }); - } - set(key, value) { - return __awaiter(this, void 0, void 0, function* () { - if (!this._promSet) - this._promSet = util_1.promisify(this.client.set); - yield this._promSet(key, value); - }); - } - del(...keys) { - return __awaiter(this, void 0, void 0, function* () { - if (!this._promDel) - this._promDel = util_1.promisify(this.client.del); - return yield this._promDel(...keys); - }); - } -} -class MockRedis { - constructor() { - this.inMemory = {}; - } - get client() { - return undefined; - } - get(key) { - return __awaiter(this, void 0, void 0, function* () { - return this.inMemory[key] || undefined; - }); - } - set(key, value) { - return __awaiter(this, void 0, void 0, function* () { - this.inMemory[key] = value; - }); - } - del(...keys) { - return __awaiter(this, void 0, void 0, function* () { - for (const key of keys) { - delete this.inMemory[key]; - } - return keys.length; - }); - } -} -exports.Redis = _1.DefaultConfig.REDIS_URL || _1.DefaultConfig.isProduction - ? new RealRedis() - : new MockRedis(); diff --git a/out/session.d.ts b/out/session.d.ts deleted file mode 100644 index 03fd7d3..0000000 --- a/out/session.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as session from 'express-session'; -import { RequestHandler } from 'express'; -declare function getRouter(options?: Partial): RequestHandler; -export declare const Session: { - getRouter: typeof getRouter; -}; -export {}; diff --git a/out/session.js b/out/session.js deleted file mode 100644 index e7f5889..0000000 --- a/out/session.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Session = void 0; -const session = require("express-session"); -const _1 = require("."); -const redisStore = require("connect-redis"); -let sessionStore = undefined; -function getRouter(options) { - _1.DefaultConfig.requireEnv('SESSION_SECRET', true); - if (_1.Redis.client && sessionStore !== undefined) { - const RedisStore = redisStore(session); - sessionStore = new RedisStore({ client: _1.Redis.client }); - } - return session(Object.assign({ store: sessionStore, secret: _1.DefaultConfig.SESSION_SECRET || 'keyboard cat', resave: false, saveUninitialized: true, cookie: { secure: false } }, options)); -} -exports.Session = { - getRouter, -};