@stemy/backend 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/stemy-backend.umd.js +2 -2
- package/bundles/stemy-backend.umd.js.map +1 -1
- package/bundles/stemy-backend.umd.min.js +1 -1
- package/bundles/stemy-backend.umd.min.js.map +1 -1
- package/esm2015/rest-controllers/assets.controller.js +3 -3
- package/fesm2015/stemy-backend.js +2 -2
- package/fesm2015/stemy-backend.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stemy-backend.js","sources":["../../src/utils.ts","../../src/validators.ts","../../src/rest-openapi.ts","../../src/common-types.ts","../../src/services/asset-processor.ts","../../src/services/configuration.ts","../../src/services/mongo-connector.ts","../../src/services/entities/base-entity.ts","../../src/services/entities/asset.ts","../../src/services/entities/temp-asset.ts","../../src/services/assets.ts","../../src/services/entities/lazy-asset.ts","../../src/services/job-manager.ts","../../src/services/entities/progress.ts","../../src/services/progresses.ts","../../src/services/lazy-assets.ts","../../src/services/asset-resolver.ts","../../src/services/backend-provider.ts","../../src/services/cache-processor.ts","../../src/services/cache.ts","../../src/services/endpoint-provider.ts","../../src/services/fixtures.ts","../../src/services/gallery-image.ts","../../src/services/gallery-cache.ts","../../src/services/gallery.ts","../../src/services/id-generator.ts","../../src/services/translation-provider.ts","../../src/services/translator.ts","../../src/services/template-renderer.ts","../../src/services/mail-sender.ts","../../src/services/memory-cache.ts","../../src/services/user-manager.ts","../../src/rest-controllers/assets.controller.ts","../../src/rest-controllers/auth.controller.ts","../../src/rest-controllers/gallery.controller.ts","../../src/rest-controllers/progresses.controller.ts","../../src/rest-middlewares/error-handler.middleware.ts","../../src/rest-middlewares/container.middleware.ts","../../src/rest-middlewares/language.middleware.ts","../../src/rest-middlewares/request-ended.middleware.ts","../../src/rest-middlewares/request-started.middleware.ts","../../src/socket-controllers/progress.controller.ts","../../src/socket-middlewares/compression.middleware.ts","../../src/utilities/tree.ts","../../src/utilities/di-container.ts","../../src/static.ts","../../src/utilities/lazy-asset-generator.ts","../../src/public_api.ts","../../src/stemy-backend.ts"],"sourcesContent":["import {exec as execChildProcess} from \"child_process\";\r\nimport {createHash} from \"crypto\";\r\nimport {InjectionToken, DependencyContainer} from \"tsyringe\";\r\nimport {from, Observable, Subject, Subscription} from \"rxjs\";\r\nimport {canReportError} from \"rxjs/internal/util/canReportError\";\r\nimport {Server} from \"socket.io\";\r\nimport {mkdir, readFile as fsReadFile, unlink, writeFile as fsWriteFile} from \"fs\";\r\nimport {basename, dirname} from \"path\";\r\nimport {GridFSBucket} from \"mongodb\";\r\nimport {Document, DocumentQuery, FilterQuery, Model, model, Schema, Types} from \"mongoose\";\r\nimport {getValue as getMongoValue, setValue as setMongoValue} from \"mongoose/lib/utils\";\r\nimport {PassThrough, Readable, ReadableOptions} from \"stream\";\r\nimport {ObjectId} from \"bson\";\r\nimport sharp_, {Region} from \"sharp\";\r\nimport {Action, BadRequestError, createParamDecorator, HttpError} from \"routing-controllers\";\r\nimport {\r\n IAssetCropInfo, IAssetImageParams,\r\n IAssetMeta,\r\n IClientSocket,\r\n IPaginationBase,\r\n IPaginationParams,\r\n IRequest,\r\n Type\r\n} from \"./common-types\";\r\n\r\nconst sharp = sharp_;\r\n\r\nexport interface IDIContainers {\r\n appContainer: DependencyContainer\r\n}\r\n\r\nexport const diContainers: IDIContainers = {\r\n appContainer: null\r\n};\r\n\r\nexport type FilterPredicate = (value: any, key?: any, target?: any, source?: any) => boolean;\r\n\r\nexport function isNullOrUndefined(value: any): boolean {\r\n return value == null || typeof value == \"undefined\";\r\n}\r\n\r\nexport function isDefined(value: any): boolean {\r\n return !isNullOrUndefined(value);\r\n}\r\n\r\nexport function getType(obj: any): string {\r\n const regex = new RegExp(\"\\\\s([a-zA-Z]+)\");\r\n return Object.prototype.toString.call(obj).match(regex)[1].toLowerCase();\r\n}\r\n\r\nexport function isObject(value: any): boolean {\r\n return getType(value) == \"object\";\r\n}\r\n\r\nexport function isArray(value: any): value is Array<any> {\r\n return Array.isArray(value);\r\n}\r\n\r\nexport function isBoolean(value: any): value is boolean {\r\n return typeof value === \"boolean\";\r\n}\r\n\r\nexport function isDate(value: any): value is Date {\r\n return !!value && value[Symbol.toPrimitive] && !isNaN(value) && \"undefined\" !== typeof value.getDate;\r\n}\r\n\r\nexport function isPrimitive(value: any): boolean {\r\n const type = typeof value;\r\n return value == null || (type !== \"object\" && type !== \"function\");\r\n}\r\n\r\nexport function isString(value: any): value is string {\r\n return typeof value === \"string\";\r\n}\r\n\r\nexport function isFunction(value: any): value is Function {\r\n return typeof value === \"function\";\r\n}\r\n\r\nexport function isConstructor(value: any): boolean {\r\n return (value && typeof value === \"function\" && value.prototype && value.prototype.constructor) === value && value.name !== \"Object\";\r\n}\r\n\r\nexport function isType(value: any): value is Type<any> {\r\n return isConstructor(value);\r\n}\r\n\r\nexport function isInterface(obj: any, interFaceObject: { [key: string]: string }): boolean {\r\n if (!obj || typeof obj !== \"object\" || isArray(obj) || !isObject(interFaceObject)) return false;\r\n const keys = Object.keys(interFaceObject);\r\n for (const key of keys) {\r\n let type = interFaceObject[key] || \"\";\r\n if (type.startsWith(\"*\")) {\r\n type = type.substr(1);\r\n if (obj.hasOwnProperty(key) && getType(obj[key]) !== type) return false;\r\n } else if (!obj.hasOwnProperty(key) || getType(obj[key]) !== type) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function ucFirst(value: string): string {\r\n if (!value) return \"\";\r\n return value[0].toUpperCase() + value.substr(1);\r\n}\r\n\r\nexport function lcFirst(value: string): string {\r\n if (!value) return \"\";\r\n return value[0].toLowerCase() + value.substr(1);\r\n}\r\n\r\nexport function isObjectId(id: string): boolean {\r\n return typeof id === \"string\" && id.length == 24 && !isNaN(Number(\"0x\" + id));\r\n}\r\n\r\nexport function firstItem<T>(value: T[]): T {\r\n return value[0];\r\n}\r\n\r\nexport function lastItem<T>(value: T[]): T {\r\n return value[value.length - 1];\r\n}\r\n\r\nexport function regroup<T>(value: T[], comparator: (a: T, b: T) => boolean): Array<T[]> {\r\n const result: Array<T[]> = [];\r\n if (!isArray(value) || value.length == 0) return result;\r\n value = Array.from(value);\r\n result.push([value.shift()]);\r\n value.forEach(item => {\r\n const group = result.find(g => g.some(a => comparator(a, item)));\r\n if (group) {\r\n group.push(item);\r\n return;\r\n }\r\n result.push([item]);\r\n });\r\n return result;\r\n}\r\n\r\nexport function uniqueItems<T>(value: T[]): T[] {\r\n return value.filter((v, ix) => value.indexOf(v) === ix);\r\n}\r\n\r\nexport function getValue(obj: any, key: string, defaultValue?: any, treeFallback: boolean = false): any {\r\n key = key || \"\";\r\n const keys = key.split(\".\");\r\n let curKey = \"\";\r\n do {\r\n curKey += keys.shift();\r\n if (isDefined(obj) && isDefined(obj[curKey]) && (typeof obj[curKey] === \"object\" || !keys.length)) {\r\n obj = obj[curKey];\r\n curKey = \"\";\r\n } else if (!keys.length) {\r\n defaultValue = typeof defaultValue == \"undefined\" ? key.replace(new RegExp(`${curKey}$`), `{${curKey}}`) : defaultValue;\r\n obj = treeFallback ? obj || defaultValue : defaultValue;\r\n } else {\r\n curKey += \".\";\r\n }\r\n } while (keys.length);\r\n return obj;\r\n}\r\n\r\nexport function groupBy<T>(items: T[], cb: (item: T) => string) {\r\n return items.reduce((res, item) => {\r\n const group = cb(item);\r\n res[group] = res[group] || [];\r\n res[group].push(item);\r\n return res;\r\n }, {});\r\n}\r\n\r\nexport function convertValue(value: any, type: string): any {\r\n switch (type) {\r\n case \"boolean\":\r\n value = typeof value == \"string\" ? value.toLowerCase() : value;\r\n return (value == \"no\" || value == \"false\" || value == \"0\") ? false : !!value;\r\n case \"number\":\r\n const val = parseFloat(value);\r\n return isNaN(val) ? 0 : val;\r\n case \"array\":\r\n try {\r\n return JSON.parse(value);\r\n } catch (e) {\r\n return `${value}`.split(\", \");\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nexport function injectServices(schema: Schema<any>, services: { [prop: string]: InjectionToken<any> }) {\r\n const serviceMap: { [prop: string]: any } = {};\r\n Object.keys(services).forEach(prop => {\r\n schema\r\n .virtual(prop)\r\n .get(() => {\r\n const diContainer = diContainers.appContainer;\r\n serviceMap[prop] = serviceMap[prop] || (!diContainer ? {} : diContainer.resolve(services[prop]));\r\n return serviceMap[prop];\r\n });\r\n });\r\n}\r\n\r\nexport function paginate<T extends Document>(model: Model<T>, where: FilterQuery<T>, params: IPaginationParams): Promise<IPaginationBase<T>> {\r\n return model.countDocuments(where).then(count => {\r\n let query = model.find(where);\r\n if (isString(params.sort)) {\r\n query = query.sort(params.sort);\r\n }\r\n if (isArray(params.populate)) {\r\n params.populate.forEach(field => {\r\n query = query.populate(field);\r\n });\r\n }\r\n return (params.limit > 0 ? query.skip(params.page * params.limit).limit(params.limit) : query).then(items => {\r\n const meta = {total: count};\r\n return {count, items, meta};\r\n });\r\n });\r\n}\r\n\r\nexport function lookupStages(from: string, localField: string, as: string = null, foreignField: string = \"_id\", shouldUnwind: boolean = true): any[] {\r\n as = as || localField.replace(\"Id\", \"\");\r\n const pipelines: any[] = [\r\n {\r\n $lookup: {\r\n from,\r\n localField,\r\n foreignField,\r\n as\r\n }\r\n }\r\n ];\r\n if (shouldUnwind) {\r\n pipelines.push({\r\n $unwind: {\r\n path: `$${as}`,\r\n preserveNullAndEmptyArrays: true\r\n }\r\n })\r\n }\r\n return pipelines;\r\n}\r\n\r\nexport function letsLookupStage(from: string, pipeline: any[], as: string = null, letFields: any = null) {\r\n as = as || from;\r\n letFields = letFields || {id: \"$_id\"};\r\n return {\r\n $lookup: {\r\n from,\r\n let: letFields,\r\n pipeline,\r\n as\r\n }\r\n };\r\n}\r\n\r\nexport function hydratePopulated<T extends Document>(modelType: Model<T>, json: any): T {\r\n let object = modelType.hydrate(json);\r\n\r\n for (const [path, obj] of Object.entries(modelType.schema.obj)) {\r\n let {ref, type} = obj as any;\r\n if (Array.isArray(type) && type.length > 0) {\r\n ref = type[0].ref;\r\n }\r\n if (!ref) continue;\r\n const value = getMongoValue(path, json);\r\n const hydrateVal = val => {\r\n if (val == null || val instanceof Types.ObjectId) return val;\r\n return hydratePopulated(model(ref), val);\r\n };\r\n if (Array.isArray(value)) {\r\n setMongoValue(path, value.map(hydrateVal), object);\r\n continue;\r\n }\r\n setMongoValue(path, hydrateVal(value), object);\r\n }\r\n\r\n return object;\r\n\r\n}\r\n\r\nexport async function paginateAggregations<T extends Document>(model: Model<T>, aggregations: any[], params: IPaginationParams, metaProjection: any = {}): Promise<IPaginationBase<T>> {\r\n const sortField = !isString(params.sort) || !params.sort ? null : (params.sort.startsWith(\"-\") ? params.sort.substr(1) : params.sort);\r\n const sortAggregation = !sortField ? [] : [{\r\n $sort: {[sortField]: sortField == params.sort ? 1 : -1}\r\n }];\r\n const result = await model.aggregate([\r\n ...aggregations,\r\n ...sortAggregation,\r\n {\r\n $group: {\r\n _id: \"results\",\r\n result: {$push: \"$$CURRENT\"}\r\n }\r\n },\r\n {\r\n $project: {\r\n _id: 0,\r\n items: params.limit > 0 ? {$slice: [\"$result\", params.page * params.limit, params.limit]} : \"$result\",\r\n count: {$size: \"$result\"},\r\n meta: {\r\n total: {$size: \"$result\"},\r\n ...metaProjection\r\n }\r\n }\r\n }\r\n ]);\r\n const pagination = result[0] as IPaginationBase<T>;\r\n if (!pagination) {\r\n return {items: [], count: 0, meta: {total: 0}};\r\n }\r\n pagination.items = pagination.items.map(i => hydratePopulated(model, i));\r\n return pagination;\r\n}\r\n\r\nconst cropInterface = {\r\n x: \"number\",\r\n y: \"number\",\r\n w: \"number\",\r\n h: \"number\"\r\n};\r\n\r\nfunction toCropRegion(cropInfo: string | IAssetCropInfo): Region {\r\n let crop = cropInfo as IAssetCropInfo;\r\n if (isString(cropInfo)) {\r\n try {\r\n crop = JSON.parse(cropInfo as string);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n if (!isInterface(crop, cropInterface)) return null;\r\n return {\r\n width: Math.round(crop.w),\r\n height: Math.round(crop.h),\r\n top: Math.round(crop.y),\r\n left: Math.round(crop.x)\r\n };\r\n}\r\n\r\nexport async function toImage<T = Buffer | Readable>(src: T, params?: IAssetImageParams, meta?: IAssetMeta): Promise<T> {\r\n\r\n // Default params and meta\r\n params = params || {};\r\n meta = meta || {};\r\n\r\n // Get default crop info\r\n const crop = toCropRegion(meta.crop);\r\n\r\n // Return the src if there are no params and no default crop exists\r\n if (meta.extension === \"svg\" || (Object.keys(params).length == 0 && !crop)) {\r\n return src;\r\n }\r\n\r\n // Parse params\r\n params.rotation = isNaN(params.rotation) ? 0 : Math.round(params.rotation / 90) * 90;\r\n params.canvasScaleX = isNaN(params.canvasScaleX) ? 1 : Number(params.canvasScaleX);\r\n params.canvasScaleY = isNaN(params.canvasScaleY) ? 1 : Number(params.canvasScaleY);\r\n params.scaleX = isNaN(params.scaleX) ? 1 : Number(params.scaleX);\r\n params.scaleY = isNaN(params.scaleY) ? 1 : Number(params.scaleY);\r\n params.crop = isBoolean(params.crop) ? params.crop : params.crop == \"true\";\r\n\r\n let buffer = src instanceof Readable ? await streamToBuffer(src) : src as any;\r\n try {\r\n // Get crop info\r\n const cropBefore = toCropRegion(params.cropBefore || (params.crop ? meta.cropBefore : null));\r\n const cropAfter = toCropRegion(params.cropAfter || (params.crop ? meta.cropAfter : null));\r\n // Get metadata\r\n let img = sharp(buffer);\r\n let {width, height} = await img.metadata();\r\n // Crop before resize\r\n if (cropBefore) {\r\n width = cropBefore.width;\r\n height = cropBefore.height;\r\n img = img.extract(cropBefore);\r\n } else if (crop) {\r\n width = crop.width;\r\n height = crop.height;\r\n img = img.extract(crop);\r\n }\r\n // Resize canvas\r\n const canvasScaleX = meta?.canvasScaleX || 1;\r\n const canvasScaleY = meta?.canvasScaleY || 1;\r\n if (params.canvasScaleX !== canvasScaleX || params.canvasScaleY !== canvasScaleY) {\r\n width = Math.round(width * params.canvasScaleX);\r\n height = Math.round(height * params.canvasScaleY);\r\n img = img.resize({width, height, background: \"#00000000\", fit: \"contain\"});\r\n }\r\n // Resize image\r\n if (params.scaleX !== 1 || params.scaleY !== 1) {\r\n width = Math.round(width * params.scaleX);\r\n height = Math.round(height * params.scaleY);\r\n img = img.resize({width, height, background: \"#00000000\", fit: \"fill\"});\r\n }\r\n // Crop after resize\r\n if (cropAfter) {\r\n img = img.extract(cropAfter);\r\n }\r\n // Rotate\r\n if (params.rotation !== 0) {\r\n buffer = await img.toBuffer();\r\n img = sharp(buffer).rotate(params.rotation);\r\n }\r\n buffer = await img.toBuffer();\r\n src = src instanceof Readable ? bufferToStream(buffer) : buffer;\r\n return src;\r\n } catch (e) {\r\n console.log(\"Image conversion error\", e);\r\n src = src instanceof Readable ? bufferToStream(buffer) : buffer;\r\n return src;\r\n }\r\n}\r\n\r\nexport function bufferToStream(buffer: Buffer): Readable {\r\n const readStream = new PassThrough();\r\n readStream.end(buffer);\r\n return readStream\r\n}\r\n\r\nexport function streamToBuffer(stream: Readable): Promise<Buffer> {\r\n return new Promise<Buffer>((resolve, reject) => {\r\n const concat = [];\r\n stream.on(\"data\", data => {\r\n concat.push(data);\r\n });\r\n stream.on(\"error\", reject);\r\n stream.on(\"end\", () => resolve(Buffer.concat(concat)));\r\n })\r\n}\r\n\r\nclass ReadableStreamClone extends Readable {\r\n\r\n constructor(readableStream: Readable, opts?: ReadableOptions) {\r\n super(opts);\r\n readableStream?.on(\"data\", chunk => {\r\n this.push(chunk);\r\n });\r\n readableStream?.on(\"end\", () => {\r\n this.push(null);\r\n });\r\n readableStream?.on(\"error\", err => {\r\n this.emit(\"error\", err);\r\n });\r\n }\r\n\r\n _read(size: number) {\r\n\r\n }\r\n}\r\n\r\nexport function copyStream(stream: Readable, opts?: ReadableOptions): Readable {\r\n return new ReadableStreamClone(stream, opts);\r\n}\r\n\r\nexport function mkdirRecursive(path: string, mode: number = null): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n mkdir(path, {mode: mode || 0o777, recursive: true}, err => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve();\r\n });\r\n });\r\n}\r\n\r\nexport function deleteFile(path: string): Promise<any> {\r\n return new Promise<Buffer>((resolve, reject) => {\r\n unlink(path, err => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve();\r\n });\r\n });\r\n}\r\n\r\nexport function readFile(path: string): Promise<Buffer> {\r\n return new Promise<Buffer>((res, rej) => {\r\n fsReadFile(path, (err, data) => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n}\r\n\r\nexport async function readAndDeleteFile(path: string, timeout: number = 5000): Promise<Buffer> {\r\n const data = await readFile(path);\r\n setTimeout(() => {\r\n unlink(path, () => {\r\n });\r\n }, timeout);\r\n return data;\r\n}\r\n\r\nexport async function writeFile(path: string, data: Buffer): Promise<Buffer> {\r\n await mkdirRecursive(dirname(path));\r\n return new Promise<Buffer>((res, rej) => {\r\n fsWriteFile(path, data, err => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n}\r\n\r\nexport function valueToPromise(value: any): Promise<any> {\r\n return value instanceof Promise ? value : Promise.resolve(value);\r\n}\r\n\r\nexport function promiseTimeout(timeout: number = 1000, error: boolean = false): Promise<string> {\r\n return new Promise<any>((resolve, reject) => {\r\n setTimeout(() => {\r\n if (error) {\r\n reject(`Timeout exceeded: ${timeout}ms`);\r\n return;\r\n }\r\n resolve(`Timeout: ${timeout}ms`);\r\n }, timeout);\r\n });\r\n}\r\n\r\nexport function getConstructorName(type: Type<any>): string {\r\n return type.prototype.constructor.name;\r\n}\r\n\r\nexport function getFunctionParams(func: Function): string[] {\r\n // Remove comments of the form /* ... */\r\n // Removing comments of the form //\r\n // Remove body of the function { ... }\r\n // removing \"=>\" if func is arrow function\r\n const str = func.toString()\r\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\r\n .replace(/\\/\\/(.)*/g, \"\")\r\n .replace(/{[\\s\\S]*}/, \"\")\r\n .replace(/=>/g, \"\")\r\n .trim();\r\n\r\n // Start parameter names after first \"(\"\r\n const start = str.indexOf(\"(\") + 1;\r\n\r\n // End parameter names is just before last \")\"\r\n const end = str.length - 1;\r\n const result = str.substring(start, end).split(\", \");\r\n const params = [];\r\n\r\n result.forEach(element => {\r\n\r\n // Removing any default value\r\n element = element.replace(/=[\\s\\S]*/g, \"\").trim();\r\n\r\n if (element.length > 0)\r\n params.push(element);\r\n });\r\n\r\n return params;\r\n}\r\n\r\nexport function proxyFunction(name: string): Function {\r\n return function () {\r\n const args = Array.from(arguments);\r\n args.unshift(this);\r\n return (this.helper[name] as Function).apply(this.helper, args);\r\n }\r\n}\r\n\r\nexport function proxyFunctions(schema: Schema, helper: Type<any>, paramName: string = null): void {\r\n paramName = paramName || lcFirst(getConstructorName(helper)).replace(/helper$/gi, \"\");\r\n const descriptors = Object.getOwnPropertyDescriptors(helper.prototype);\r\n Object.keys(descriptors).forEach(name => {\r\n const func = descriptors[name].value;\r\n if (isFunction(func) && name !== \"constructor\") {\r\n const paramNames = getFunctionParams(func);\r\n if (paramNames[0] == paramName) {\r\n schema.methods[name] = proxyFunction(name);\r\n }\r\n }\r\n });\r\n injectServices(schema, {\r\n \"helper\": helper\r\n });\r\n}\r\n\r\nexport function ResolveEntity<T extends Document>(model: Model<T>, extraCheck?: (query: DocumentQuery<T, any>, action: Action) => T | Promise<T>): ParameterDecorator {\r\n const modelName = model.modelName;\r\n const paramName = modelName.toLowerCase();\r\n return createParamDecorator({\r\n required: false,\r\n value: async action => {\r\n const req = action.request as IRequest;\r\n const token = req.header(`x-${paramName}-token`);\r\n const id = req.params[`${paramName}Id`] as string;\r\n if (!id && !token) {\r\n throw new BadRequestError(`${modelName} id or token should be defined!`);\r\n }\r\n const query = !token\r\n ? model.findById(id)\r\n : model.findOne({token} as any);\r\n const doc = await query;\r\n if (!doc) {\r\n throw new HttpError(404, !token\r\n ? `${modelName} could not be found with id: ${id}`\r\n : `${modelName} could not be found with token: ${token}`);\r\n }\r\n if (isFunction(extraCheck)) {\r\n try {\r\n action.request[paramName] = await valueToPromise(extraCheck(query, action)) || doc;\r\n return action.request[paramName];\r\n } catch (e) {\r\n throw new BadRequestError(`${modelName} check error: ${e.message || e}`);\r\n }\r\n }\r\n action.request[paramName] = doc;\r\n return doc;\r\n }\r\n });\r\n}\r\n\r\nexport function getFileName(path: string, withExtension: boolean = false): string {\r\n const name = basename(path || \"\");\r\n return withExtension ? name : name.split(\".\").slice(0, -1).join(\".\");\r\n}\r\n\r\nexport function getExtension(path: string): string {\r\n const name = basename(path || \"\");\r\n return name.split(\".\").pop();\r\n}\r\n\r\nexport function idToString(value: any): any {\r\n if (Array.isArray(value)) {\r\n return value.map(idToString);\r\n }\r\n return value instanceof ObjectId ? value.toHexString() : null;\r\n}\r\n\r\nexport function createTransformer(transform?: (doc: Document, ret: any, options?: any) => any) {\r\n return (doc: Document, ret: any, options?: any) => {\r\n ret.id = idToString(ret.id) || ret.id;\r\n if (doc._id) {\r\n ret._id = idToString(doc._id);\r\n ret.id = ret.id || ret._id;\r\n }\r\n delete ret.__v;\r\n return isFunction(transform) ? transform(doc, ret, options) || ret : ret;\r\n };\r\n}\r\n\r\nexport function broadcast(socketServer: Server, cb: (client: IClientSocket) => void): void {\r\n Array.from(Object.values(socketServer.sockets.sockets)).forEach(cb);\r\n}\r\n\r\nexport function rand(min: number, max: number): number {\r\n return Math.round(random(min, max));\r\n}\r\n\r\nexport function random(min: number, max: number): number {\r\n return min + Math.random() * (max - min);\r\n}\r\n\r\nexport function multiSubscription(...subscriptions: Subscription[]): Subscription {\r\n return new Subscription(() => {\r\n subscriptions.forEach(s => {\r\n s.unsubscribe();\r\n });\r\n });\r\n}\r\n\r\nexport function observableFromFunction(callbackFunc: () => any): Observable<any> {\r\n let subject: any;\r\n return new Observable<any>((subscriber) => {\r\n if (!subject) {\r\n subject = new Subject();\r\n try {\r\n subject = from(callbackFunc());\r\n } catch (err) {\r\n if (canReportError(subject)) {\r\n subject.error(err);\r\n } else {\r\n console.warn(err);\r\n }\r\n }\r\n }\r\n return subject.subscribe(subscriber);\r\n });\r\n}\r\n\r\nexport function padLeft(value: any, count: number = 3, padWith: string = \"0\"): string {\r\n return `${value}`.padStart(count, padWith);\r\n}\r\n\r\nexport function padRight(value: any, count: number = 3, padWith: string = \"0\"): string {\r\n return `${value}`.padEnd(count, padWith);\r\n}\r\n\r\nexport function deleteFromBucket(bucket: GridFSBucket, fileId: ObjectId): Promise<string> {\r\n return new Promise<string>(((resolve, reject) => {\r\n bucket.delete(fileId, error => {\r\n let err = error as any;\r\n if (error) {\r\n err = error.message || error || \"\";\r\n if (!isString(err) || !err.startsWith(\"FileNotFound\")) {\r\n reject(err);\r\n return;\r\n }\r\n }\r\n resolve(fileId.toHexString());\r\n });\r\n }));\r\n}\r\n\r\nconst defaultPredicate: FilterPredicate = () => true;\r\n\r\nfunction copyRecursive(target: any, source: any, predicate?: FilterPredicate): any {\r\n predicate = predicate || defaultPredicate;\r\n if (isPrimitive(source) || isDate(source) || isFunction(source)) return source;\r\n if (isArray(source)) {\r\n target = isArray(target) ? Array.from(target) : [];\r\n source.forEach((item, index) => {\r\n if (!predicate(item, index, target, source)) return;\r\n if (target.length > index)\r\n target[index] = copyRecursive(target[index], item, predicate);\r\n else\r\n target.push(copyRecursive(null, item, predicate));\r\n });\r\n return target;\r\n }\r\n const shouldCopy = isFunction(source.__shouldCopy) ? source.__shouldCopy : () => true;\r\n if (isConstructor(source.constructor)) {\r\n if (source.__shouldCopy === false) return source;\r\n if (!target) {\r\n try {\r\n target = new source.constructor();\r\n } catch (e) {\r\n const proto = source.constructor.prototype || source.prototype;\r\n target = Object.create(proto);\r\n }\r\n }\r\n } else {\r\n target = Object.assign({}, target || {});\r\n }\r\n // Copy map entries\r\n if (target instanceof Map) {\r\n if (source instanceof Map) {\r\n for (let [key, value] of source.entries()) {\r\n if (!predicate(value, key, target, source)) continue;\r\n target.set(key, !shouldCopy(key, value) ? value : copyRecursive(target.get(key), value, predicate));\r\n }\r\n }\r\n return target;\r\n }\r\n\r\n // Copy object members\r\n let keys = Object.keys(source);\r\n target = keys.reduce((result, key) => {\r\n if (!predicate(source[key], key, result, source)) return result;\r\n result[key] = !shouldCopy(key, source[key]) ? source[key] : copyRecursive(result[key], source[key], predicate);\r\n return result;\r\n }, target);\r\n\r\n // Copy object properties\r\n const descriptors = Object.getOwnPropertyDescriptors(source);\r\n keys = Object.keys(descriptors).filter(k => keys.indexOf(k) < 0);\r\n keys.forEach(key => {\r\n Object.defineProperty(target, key, descriptors[key]);\r\n });\r\n return target;\r\n}\r\n\r\nexport function filter<T>(obj: T, predicate: FilterPredicate): Partial<T> {\r\n return copyRecursive(null, obj, predicate);\r\n}\r\n\r\nexport function copy<T>(obj: T): T {\r\n return copyRecursive(null, obj);\r\n}\r\n\r\nexport function assign<T>(target: T, source: any, predicate?: FilterPredicate): T {\r\n return copyRecursive(target, source, predicate);\r\n}\r\n\r\nexport function md5(data: any): string {\r\n if (isObject(data)) {\r\n data = JSON.stringify(data);\r\n }\r\n if (!isString(data)) {\r\n throw `Can't md5 other that raw object or string`;\r\n }\r\n return createHash(\"md5\").update(data).digest(\"hex\");\r\n}\r\n\r\nexport function runCommand(scriptPath: string, expectedCode: number = 0): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const cp = execChildProcess(scriptPath, (error, stdout) => {\r\n if (error && expectedCode !== error.code) {\r\n console.log(error);\r\n reject(error);\r\n return;\r\n }\r\n const lines = (stdout || \"\").split(\"\\n\");\r\n let line = null;\r\n while (!line && lines.length > 0) {\r\n line = lines.pop();\r\n }\r\n resolve(line);\r\n });\r\n cp.stdout.on(\"data\", function (data) {\r\n console.log(data.toString());\r\n });\r\n cp.stderr.on(\"data\", function (data) {\r\n console.error(data.toString());\r\n });\r\n });\r\n}\r\n\r\nexport enum ConsoleColor {\r\n Reset = \"\\x1b[0m\",\r\n Bright = \"\\x1b[1m\",\r\n Dim = \"\\x1b[2m\",\r\n Underscore = \"\\x1b[4m\",\r\n Blink = \"\\x1b[5m\",\r\n Reverse = \"\\x1b[7m\",\r\n Hidden = \"\\x1b[8m\",\r\n\r\n FgBlack = \"\\x1b[30m\",\r\n FgRed = \"\\x1b[31m\",\r\n FgGreen = \"\\x1b[32m\",\r\n FgYellow = \"\\x1b[33m\",\r\n FgBlue = \"\\x1b[34m\",\r\n FgMagenta = \"\\x1b[35m\",\r\n FgCyan = \"\\x1b[36m\",\r\n FgWhite = \"\\x1b[37m\",\r\n FgDefault = \"\\x1b[38m\",\r\n\r\n BgBlack = \"\\x1b[40m\",\r\n BgRed = \"\\x1b[41m\",\r\n BgGreen = \"\\x1b[42m\",\r\n BgYellow = \"\\x1b[43m\",\r\n BgBlue = \"\\x1b[44m\",\r\n BgMagenta = \"\\x1b[45m\",\r\n BgCyan = \"\\x1b[46m\",\r\n BgWhite = \"\\x1b[47m\",\r\n BgDefault = \"\\x1b[48m\"\r\n}\r\n\r\nexport interface IJsonColors {\r\n keyColor?: ConsoleColor;\r\n numberColor?: ConsoleColor;\r\n stringColor?: ConsoleColor;\r\n trueColor?: ConsoleColor;\r\n falseColor?: ConsoleColor;\r\n nullColor?: ConsoleColor;\r\n}\r\n\r\nconst defaultColors: IJsonColors = {\r\n keyColor: ConsoleColor.FgWhite,\r\n numberColor: ConsoleColor.FgBlue,\r\n stringColor: ConsoleColor.FgYellow,\r\n trueColor: ConsoleColor.FgGreen,\r\n falseColor: ConsoleColor.FgRed,\r\n nullColor: ConsoleColor.BgMagenta\r\n}\r\n\r\nexport function colorize(input: any, color: ConsoleColor): string {\r\n return `${color}${input}${ConsoleColor.Reset}`;\r\n}\r\n\r\nexport function jsonHighlight(input: string | object, colorOptions?: IJsonColors): string {\r\n const colors = Object.assign({}, defaultColors, colorOptions)\r\n const json = (isString(input) ? input : JSON.stringify(input, null, 2)).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\r\n return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+]?\\d+)?)/g, (match) => {\r\n let color = colors.numberColor\r\n if (/^\"/.test(match)) {\r\n if (/:$/.test(match)) {\r\n color = colors.keyColor\r\n } else {\r\n color = colors.stringColor;\r\n match = '\"' + match.substr(1, match.length - 2) + '\"';\r\n }\r\n } else {\r\n color = /true/.test(match)\r\n ? colors.trueColor\r\n : /false/.test(match)\r\n ? colors.falseColor\r\n : /null/.test(match)\r\n ? colors.nullColor\r\n : color\r\n }\r\n return `${color}${match}${ConsoleColor.Reset}`\r\n })\r\n}\r\n\r\nexport function replaceSpecialChars(str: string, to: string = \"-\"): string {\r\n return `${str}`.replace(/[&\\/\\\\#, +()$~%.@'\":*?<>{}]/g, to);\r\n}\r\n","import {ValidationArguments, ValidatorConstraint, ValidatorConstraintInterface} from \"class-validator\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nfunction checkValue(multi: boolean, value: any): boolean {\r\n if (multi) {\r\n return Array.isArray(value) && value.every(v => {\r\n try {\r\n const id = new ObjectId(v);\r\n return id instanceof ObjectId;\r\n } catch (e) {\r\n return false;\r\n }\r\n });\r\n }\r\n if (null === value) return true;\r\n try {\r\n const id = new ObjectId(value);\r\n return id instanceof ObjectId;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\n@ValidatorConstraint()\r\nexport class IsFile implements ValidatorConstraintInterface {\r\n validate(value: any, validationArguments: ValidationArguments) {\r\n const [multi] = (validationArguments.constraints || []);\r\n return checkValue(multi, value);\r\n }\r\n}\r\n\r\n@ValidatorConstraint()\r\nexport class IsObjectId implements ValidatorConstraintInterface {\r\n validate(value: any, validationArguments: ValidationArguments) {\r\n const [_, multi] = (validationArguments.constraints || []);\r\n return checkValue(multi, value);\r\n }\r\n}\r\n","import {getMetadataArgsStorage} from \"routing-controllers\";\r\nimport {routingControllersToSpec} from \"routing-controllers-openapi\";\r\nimport {OpenAPIObject, SchemaObject} from \"openapi3-ts\";\r\nimport {defaultMetadataStorage} from \"class-transformer/storage\";\r\nimport {ValidationTypes} from \"class-validator\"\r\nimport {validationMetadatasToSchemas} from \"class-validator-jsonschema\"\r\nimport {SchemaConverter} from \"./common-types\";\r\nimport {isFunction} from \"./utils\";\r\nimport {IsFile, IsObjectId} from \"./validators\";\r\n\r\nlet apiDocs: string = null;\r\n\r\nexport function getApiDocs(customValidation: SchemaConverter | SchemaObject): string {\r\n if (apiDocs) return apiDocs;\r\n const storage = getMetadataArgsStorage();\r\n const spec: OpenAPIObject = routingControllersToSpec(storage);\r\n spec.basePath = \"/api/\";\r\n spec.definitions = validationMetadatasToSchemas({\r\n classTransformerMetadataStorage: defaultMetadataStorage,\r\n additionalConverters: {\r\n [ValidationTypes.CUSTOM_VALIDATION]: (meta, options) => {\r\n const res = isFunction(customValidation) ? customValidation(meta, options) : customValidation;\r\n if (!!res) return res;\r\n const constraints = meta.constraints || [];\r\n if (meta.constraintCls === IsFile) {\r\n return {\r\n multi: constraints[0] || false,\r\n type: \"file\"\r\n }\r\n }\r\n if (meta.constraintCls === IsObjectId) {\r\n return {\r\n endpoint: constraints[0] || false,\r\n multi: constraints[1] || false,\r\n type: \"list\"\r\n }\r\n }\r\n return null;\r\n }\r\n }\r\n });\r\n spec.components.schemas = spec.definitions;\r\n apiDocs = JSON.stringify(spec);\r\n return apiDocs;\r\n}\r\n","import {Server} from \"http\";\r\nimport {Request, Express} from \"express\";\r\nimport {Socket, Server as SocketServer} from \"socket.io\";\r\nimport {RoutingControllersOptions} from \"routing-controllers\";\r\nimport {SocketControllersOptions} from \"socket-controllers\";\r\nimport {\r\n ClassProvider,\r\n DependencyContainer,\r\n InjectionToken,\r\n TokenProvider,\r\n ValueProvider,\r\n RegistrationOptions\r\n} from \"tsyringe\";\r\nimport {SchemaObject} from \"openapi3-ts\";\r\nimport {Readable} from \"stream\";\r\nimport {Moment} from \"moment\";\r\n\r\n// --- DI functions ---\r\n\r\nexport const Type = Function;\r\n\r\nexport interface Type<T = object> extends Function {\r\n new (...args: any[]): T;\r\n}\r\n\r\nexport interface FactoryProvider<T> {\r\n useFactory: (dc: IDependencyContainer) => T;\r\n}\r\n\r\nexport interface ITree {\r\n readonly path: string;\r\n resolveService(): any;\r\n resolveLeaves(): Map<string, ITree>;\r\n resolveServices(): Map<string, any>;\r\n resolveAncestor(path: string): ITree;\r\n resolvePath(path: string, throwError?: boolean): ITree;\r\n}\r\n\r\nexport interface IDependencyContainer extends DependencyContainer {\r\n readonly parent: IDependencyContainer;\r\n readonly tree: ITree;\r\n readonly registeredTokens: ReadonlyArray<InjectionToken>;\r\n createChildContainer(): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: ValueProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: FactoryProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: TokenProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: ClassProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: Type<T>, options?: RegistrationOptions): IDependencyContainer;\r\n registerSingleton<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer;\r\n registerSingleton<T>(token: Type<T>): IDependencyContainer;\r\n registerType<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer;\r\n registerInstance<T>(token: InjectionToken<T>, instance: T): IDependencyContainer;\r\n get<T>(token: InjectionToken<T>): T;\r\n}\r\n\r\nexport interface ClassBasedProvider<T> extends ClassProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport interface ValueBasedProvider<T> extends ValueProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport interface FactoryBasedProvider<T> extends FactoryProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport interface TokenBasedProvider<T> extends TokenProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport type SyringeProvider<T> = Type<T> | ClassProvider<T> | ValueProvider<T> | FactoryProvider<T> | TokenProvider<T>;\r\n\r\nexport type Provider<T> = Type<T> | ClassBasedProvider<T> | ValueBasedProvider<T> | FactoryBasedProvider<T> | TokenBasedProvider<T>;\r\n\r\n// --- Injection tokens ---\r\n\r\nexport const FIXTURE: InjectionToken<IFixture> = Symbol.for(\"fixture-token\");\r\n\r\nexport const JOB: InjectionToken<IJob> = Symbol.for(\"job-token\");\r\n\r\nexport const EXPRESS: InjectionToken<Express> = Symbol.for(\"express-token\");\r\n\r\nexport const HTTP_SERVER: InjectionToken<Server> = Symbol.for(\"http-server-token\");\r\n\r\nexport const SOCKET_SERVER: InjectionToken<SocketServer> = Symbol.for(\"socket-server-token\");\r\n\r\nexport const PARAMETER: InjectionToken<Parameter> = Symbol.for(\"parameter-token\");\r\n\r\nexport const DI_CONTAINER: InjectionToken<IDependencyContainer> = Symbol.for(\"di-container-token\");\r\n\r\n// --- Interfaces and utility classes ---\r\n\r\nexport interface IFixture {\r\n load(): Promise<any>;\r\n}\r\n\r\nexport type SchemaConverter = (\r\n meta: any,\r\n options: any\r\n) => SchemaObject;\r\n\r\nexport type ParamResolver = (value: string) => any;\r\n\r\nexport class Parameter {\r\n\r\n constructor(readonly name: string, public defaultValue: any, public resolver: ParamResolver = null) {\r\n\r\n }\r\n}\r\n\r\nexport type SocketParam = string | number | boolean | SocketParams;\r\n\r\nexport type SocketParams = {\r\n [name: string]: SocketParam | Array<SocketParam>;\r\n};\r\n\r\nexport type JobParams = SocketParams;\r\n\r\nexport interface ISocketMessage {\r\n message: string;\r\n params: SocketParams;\r\n}\r\n\r\nexport interface IMessageBridge {\r\n sendMessage(message: string, params?: SocketParams): void;\r\n}\r\n\r\nexport interface IJob {\r\n process(messaging?: IMessageBridge): Promise<any>;\r\n}\r\n\r\nexport interface IJobTask {\r\n start: () => this;\r\n stop: () => this;\r\n destroy: () => void;\r\n getStatus: () => string;\r\n}\r\n\r\nexport interface JobScheduleRange {\r\n min: number;\r\n max: number;\r\n}\r\n\r\nexport type JobScheduleTime = string | number | JobScheduleRange | Array<string | number>;\r\n\r\nexport interface IProgress {\r\n id: string;\r\n current: number;\r\n max: number;\r\n message: string;\r\n error: string;\r\n canceled: boolean;\r\n percent: number;\r\n remaining: number;\r\n setMessageBridge(messageBridge: IMessageBridge): this;\r\n createSubProgress(progressValue: number, max?: number, message?: string): Promise<IProgress>;\r\n setMax(max: number): Promise<any>;\r\n setMessage(message: string): Promise<any>;\r\n setError(error: string): Promise<any>;\r\n advance(value?: number): Promise<any>;\r\n cancel(): Promise<any>;\r\n save(): Promise<any>;\r\n load(): Promise<this>;\r\n toJSON(): any;\r\n}\r\n\r\nexport interface IAssetCropInfo {\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n}\r\n\r\nexport interface IAssetMeta {\r\n filename?: string;\r\n extension?: string;\r\n classified?: boolean;\r\n downloadCount?: number;\r\n firstDownload?: Date;\r\n lastDownload?: Date;\r\n crop?: IAssetCropInfo;\r\n cropBefore?: IAssetCropInfo;\r\n cropAfter?: IAssetCropInfo;\r\n canvasScaleX?: number;\r\n canvasScaleY?: number;\r\n [prop: string]: any;\r\n}\r\n\r\nexport interface IAssetImageParams {\r\n rotation?: number;\r\n canvasScaleX?: number;\r\n canvasScaleY?: number;\r\n scaleX?: number;\r\n scaleY?: number;\r\n lazy?: boolean;\r\n crop?: string | boolean;\r\n cropBefore?: string | IAssetCropInfo;\r\n cropAfter?: string | IAssetCropInfo;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IAsset {\r\n readonly id: string;\r\n readonly filename: string;\r\n readonly contentType: string;\r\n readonly metadata: IAssetMeta;\r\n readonly stream: Readable;\r\n unlink(): Promise<string>;\r\n getBuffer(): Promise<Buffer>;\r\n download(metadata?: IAssetMeta): Promise<Readable>;\r\n downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable>;\r\n getImage(params?: IAssetImageParams): Promise<Readable>;\r\n save(): Promise<any>;\r\n load(): Promise<this>;\r\n toJSON(): any;\r\n}\r\n\r\nexport interface ILazyAsset {\r\n id: string;\r\n jobName: string;\r\n jobParams: any;\r\n jobQue: string;\r\n progressId?: string;\r\n assetId?: string;\r\n unlink(): Promise<string>;\r\n startWorking(): void;\r\n loadAsset(): Promise<IAsset>;\r\n writeAsset(asset: IAsset): Promise<IAsset>;\r\n save(): Promise<any>;\r\n load(): Promise<this>;\r\n toJSON(): any;\r\n}\r\n\r\nexport interface IUser {\r\n _id?: string;\r\n id?: string;\r\n email: string;\r\n password: string;\r\n roles: string[];\r\n}\r\n\r\nexport interface IClientSocket extends Socket {\r\n interestedProgresses: Set<string>;\r\n}\r\n\r\nexport interface IRequestBase<T> extends Request {\r\n id?: string;\r\n started?: Moment;\r\n ended?: Moment;\r\n container?: DependencyContainer;\r\n language?: string;\r\n user?: T;\r\n}\r\n\r\nexport interface IRequest extends IRequestBase<IUser> {\r\n\r\n}\r\n\r\nexport interface IGalleryImage {\r\n folder: string;\r\n thumb: string;\r\n big: string;\r\n serve(id: string): Promise<Buffer>\r\n}\r\n\r\nexport interface IGallerySize {\r\n width?: number;\r\n height?: number;\r\n}\r\n\r\nexport interface IGalleryImageHandler {\r\n getOriginal(): Promise<Buffer>;\r\n writeResult(isThumb: boolean, buffer: Buffer): Promise<any>;\r\n hasResult(isThumb: boolean): Promise<boolean>;\r\n serveResult(isThumb: boolean): Promise<Buffer>;\r\n}\r\n\r\nexport interface ITranslations {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IPaginationMeta {\r\n total: number;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IPaginationBase<T> {\r\n count: number\r\n items: T[];\r\n meta?: IPaginationMeta;\r\n}\r\n\r\nexport interface IPagination extends IPaginationBase<any> {\r\n\r\n}\r\n\r\nexport interface IPaginationParams {\r\n page: number;\r\n limit: number;\r\n sort?: string;\r\n populate?: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport type FontFormat = \"opentype\" | \"truetype\" | \"woff\" | \"woff2\" | \"datafork\";\r\n\r\nexport interface IFileType {\r\n ext: string;\r\n mime: string;\r\n}\r\n\r\nexport interface IBackendConfig {\r\n rootFolder?: string;\r\n routePrefix?: string;\r\n params?: Parameter[];\r\n fixtures?: Type<IFixture>[];\r\n jobs?: Type<IJob>[];\r\n restOptions?: RoutingControllersOptions;\r\n socketOptions?: SocketControllersOptions;\r\n customValidation?: SchemaConverter | SchemaObject;\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport fontKit_, {Font} from \"fontkit\";\r\nimport {fromBuffer} from \"file-type\";\r\nimport sharp_ from \"sharp\";\r\nimport {FontFormat, IAssetMeta, IFileType} from \"../common-types\";\r\n\r\nconst sharp = sharp_;\r\nconst fontKit = fontKit_;\r\n\r\nconst fontTypes = [\r\n \"application/font-woff\", \"application/font-woff2\", \"application/x-font-opentype\", \"application/x-font-truetype\", \"application/x-font-datafork\",\r\n \"font/woff\", \"font/woff2\", \"font/otf\", \"font/ttf\", \"font/datafork\"\r\n];\r\n\r\nconst imageTypes = [\"image/jpeg\", \"image/jpg\", \"image/png\", \"image/svg+xml\"];\r\n\r\nconst fontProps = [\r\n \"postscriptName\", \"fullName\", \"familyName\", \"subfamilyName\",\r\n \"copyright\", \"version\", \"unitsPerEm\", \"ascent\", \"descent\", \"lineGap\",\r\n \"underlinePosition\", \"underlineThickness\", \"italicAngle\", \"capHeight\",\r\n \"xHeight\", \"numGlyphs\", \"characterSet\", \"availableFeatures\"\r\n];\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class AssetProcessor {\r\n\r\n private static checkTextFileType(type: IFileType): boolean {\r\n return type.mime.indexOf(\"text\") >= 0 || type.mime.indexOf(\"xml\") >= 0;\r\n }\r\n\r\n private static fixTextFileType(type: IFileType, buffer: Buffer): IFileType {\r\n const text = buffer.toString(\"utf8\");\r\n if (text.indexOf(\"<svg\") >= 0) {\r\n return {ext: \"svg\", mime: \"image/svg+xml\"};\r\n }\r\n return type;\r\n }\r\n\r\n static async fileTypeFromBuffer(buffer: Buffer): Promise<IFileType> {\r\n const type = (await fromBuffer(buffer) ?? {ext: \"txt\", mime: \"text/plain\"}) as IFileType;\r\n if (AssetProcessor.checkTextFileType(type)) {\r\n return AssetProcessor.fixTextFileType(type, buffer);\r\n }\r\n return type;\r\n }\r\n\r\n static extractFontFormat(font: Font): FontFormat {\r\n const name: string = font.constructor.name;\r\n const tag: string = font[\"directory\"].tag;\r\n switch (name) {\r\n case \"TTFFont\":\r\n return tag === \"OTTO\" ? \"opentype\" : \"truetype\";\r\n case \"WOFF2Font\":\r\n return \"woff2\";\r\n case \"WOFFFont\":\r\n return \"woff\";\r\n case \"DFont\":\r\n return \"datafork\";\r\n }\r\n return null;\r\n }\r\n\r\n static isImage(contentType: string): boolean {\r\n return imageTypes.indexOf(contentType) >= 0;\r\n }\r\n\r\n static async copyImageMeta(buffer: Buffer, metadata: IAssetMeta, fileType: IFileType): Promise<Buffer> {\r\n if (fileType.mime === \"image/svg+xml\") {\r\n const match = /<svg([^<>]+)>/gi.exec(buffer.toString(\"utf8\"));\r\n if (match && match.length > 1) {\r\n const attrs = match[1].match(/([a-z]+)=\"([^\"]+)\"/gi);\r\n attrs.forEach(attr => {\r\n if (attr.length < 5) return;\r\n const [name, value] = attr.split(\"=\");\r\n const val = value.replace(/\"/gi, \"\") as any;\r\n metadata[name] = isNaN(val) ? val : Number(val);\r\n });\r\n if (metadata.viewBox && (isNaN(metadata.width) || isNaN(metadata.height))) {\r\n const parts = (metadata.viewBox as string).split(\" \");\r\n metadata.width = Number(parts[0]) + Number(parts[2]);\r\n metadata.height = Number(parts[1]) + Number(parts[3]);\r\n }\r\n if (!isNaN(metadata.width) && !isNaN(metadata.height)) {\r\n metadata.svgSize = {x: metadata.width, y: metadata.height};\r\n }\r\n }\r\n return buffer;\r\n }\r\n const output = await sharp(buffer).rotate().toBuffer({resolveWithObject: true});\r\n Object.assign(metadata, output.info);\r\n return output.data;\r\n }\r\n\r\n static isFont(contentType: string): boolean {\r\n return fontTypes.indexOf(contentType) >= 0;\r\n }\r\n\r\n static copyFontMeta(buffer: Buffer, metadata: IAssetMeta): void {\r\n const font: Font = fontKit.create(buffer);\r\n metadata.format = AssetProcessor.extractFontFormat(font);\r\n fontProps.forEach(prop => {\r\n metadata[prop] = font[prop];\r\n });\r\n }\r\n\r\n async process(buffer: Buffer, metadata: IAssetMeta, fileType: IFileType): Promise<Buffer> {\r\n if (AssetProcessor.isImage(fileType.mime)) {\r\n buffer = await AssetProcessor.copyImageMeta(buffer, metadata, fileType);\r\n }\r\n if (AssetProcessor.isFont(fileType.mime)) {\r\n AssetProcessor.copyFontMeta(buffer, metadata);\r\n }\r\n return buffer;\r\n }\r\n}\r\n","import {injectable, injectAll, scoped, Lifecycle} from \"tsyringe\";\r\nimport {PARAMETER, Parameter} from \"../common-types\";\r\nimport {convertValue, getType, isFunction} from \"../utils\";\r\nimport dotenv from \"dotenv\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Configuration {\r\n\r\n protected paramMap: {[name: string]: Parameter};\r\n\r\n constructor(@injectAll(PARAMETER) params: Parameter[]) {\r\n dotenv.config();\r\n this.paramMap = {};\r\n (params || []).forEach(param => this.add(param));\r\n }\r\n\r\n protected add(param: Parameter): void {\r\n const existingParam = this.paramMap[param.name] || param;\r\n existingParam.defaultValue = param.defaultValue;\r\n existingParam.resolver = param.resolver || existingParam.resolver;\r\n this.paramMap[param.name] = existingParam;\r\n }\r\n\r\n hasParam(name: string): boolean {\r\n return !!this.paramMap[name];\r\n }\r\n\r\n resolve(name: string): any {\r\n const param = this.paramMap[name];\r\n if (!param) throw new Error(`Parameter with name: '${name}' does not exists in configuration`);\r\n const envName = param.name.replace(/\\.?([A-Z|0-9]+)/g, function (x,y){\r\n return \"_\" + y.toLowerCase()\r\n }).replace(/\\./gi, \"_\").replace(/^_/, \"\").toUpperCase();\r\n const envValue = process.env[envName];\r\n if (typeof envValue !== \"undefined\") {\r\n const value = isFunction(param.resolver)\r\n ? param.resolver(envValue)\r\n : convertValue(envValue, getType(param.defaultValue));\r\n console.log(`Processing param value`, name, envName, envValue, value);\r\n return value;\r\n }\r\n return param.defaultValue;\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {Db, GridFSBucket} from \"mongodb\";\r\nimport {connect, Connection} from \"mongoose\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class MongoConnector {\r\n\r\n get connection(): Connection {\r\n return this.conn;\r\n }\r\n\r\n get database(): Db {\r\n return this.db;\r\n }\r\n\r\n get bucket(): GridFSBucket {\r\n return this.fsBucket;\r\n }\r\n\r\n protected conn: Connection;\r\n protected db: Db;\r\n protected fsBucket: GridFSBucket;\r\n\r\n constructor(readonly configuration: Configuration) {\r\n this.conn = null;\r\n this.db = null;\r\n this.fsBucket = null;\r\n }\r\n\r\n async connect(): Promise<Db> {\r\n if (this.db) return this.db;\r\n this.conn = (await connect(this.configuration.resolve(\"mongoUri\"), {\r\n dbName: this.configuration.resolve(\"mongoDb\"),\r\n user: this.configuration.resolve(\"mongoUser\"),\r\n pass: this.configuration.resolve(\"mongoPassword\"),\r\n useNewUrlParser: true,\r\n useUnifiedTopology: true\r\n })).connection;\r\n this.db = this.conn.db;\r\n this.fsBucket = new GridFSBucket(this.db, {bucketName: \"assets\"});\r\n }\r\n}\r\n","import {Collection} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nexport class BaseEntity<T> {\r\n\r\n get id(): string {\r\n return this.mId.toHexString();\r\n }\r\n\r\n protected deleted: boolean;\r\n\r\n constructor(readonly mId: ObjectId,\r\n protected data: Partial<T>,\r\n protected collection: Collection) {\r\n }\r\n\r\n save(): Promise<any> {\r\n return this.collection.updateOne({_id: this.mId}, {$set: this.toJSON()});\r\n }\r\n\r\n async load(): Promise<this> {\r\n const res = await this.collection.findOne({_id: this.mId});\r\n this.deleted = !res;\r\n this.data = res || {};\r\n return this;\r\n }\r\n\r\n toJSON(): any {\r\n const ret = Object.assign({}, this.data) as any;\r\n delete ret._id;\r\n ret.id = this.id;\r\n return ret;\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {Collection, GridFSBucket} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nimport {IAsset, IAssetImageParams, IAssetMeta} from \"../../common-types\";\r\nimport {deleteFromBucket, streamToBuffer, toImage} from \"../../utils\";\r\nimport {BaseEntity} from \"./base-entity\";\r\n\r\nexport class Asset extends BaseEntity<IAsset> implements IAsset {\r\n\r\n get filename(): string {\r\n return this.data.filename;\r\n }\r\n\r\n get contentType(): string {\r\n return this.data.contentType;\r\n }\r\n\r\n get metadata(): IAssetMeta {\r\n return this.data.metadata;\r\n }\r\n\r\n get stream(): Readable {\r\n return this.bucket.openDownloadStream(this.mId);\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<IAsset>,\r\n collection: Collection,\r\n protected bucket: GridFSBucket) {\r\n super(id, data, collection);\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n return deleteFromBucket(this.bucket, this.mId);\r\n }\r\n\r\n getBuffer(): Promise<Buffer> {\r\n return streamToBuffer(this.stream);\r\n }\r\n\r\n async download(metadata?: IAssetMeta): Promise<Readable> {\r\n metadata = Object.assign(this.metadata, metadata || {});\r\n metadata.downloadCount = isNaN(metadata.downloadCount) || !metadata.firstDownload\r\n ? 1\r\n : metadata.downloadCount + 1;\r\n metadata.firstDownload = metadata.firstDownload || new Date();\r\n metadata.lastDownload = new Date();\r\n await this.collection.updateOne({_id: this.mId}, {$set: {metadata}});\r\n return this.stream;\r\n }\r\n\r\n async getImage(params: IAssetImageParams = null): Promise<Readable> {\r\n return toImage(this.stream, params, this.metadata);\r\n }\r\n\r\n async downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable> {\r\n return toImage(await this.download(metadata), params, this.metadata);\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {ObjectId} from \"bson\";\r\nimport {IAsset, IAssetImageParams, IAssetMeta} from \"../../common-types\";\r\nimport {bufferToStream, toImage} from \"../../utils\";\r\n\r\nexport class TempAsset implements IAsset {\r\n\r\n readonly id: string;\r\n\r\n get stream(): Readable {\r\n return bufferToStream(this.buffer);\r\n }\r\n\r\n constructor(protected buffer: Buffer, readonly filename: string, readonly contentType: string, readonly metadata: IAssetMeta) {\r\n this.id = new ObjectId().toHexString();\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n throw new Error(`Temp asset '${this.id}' can not be removed!`);\r\n }\r\n\r\n async getBuffer(): Promise<Buffer> {\r\n return this.buffer;\r\n }\r\n\r\n async download(metadata?: IAssetMeta): Promise<Readable> {\r\n return this.stream;\r\n }\r\n\r\n downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable> {\r\n Object.assign(this.metadata, metadata || {});\r\n return toImage(this.stream, params, this.metadata);\r\n }\r\n\r\n getImage(params?: IAssetImageParams): Promise<Readable> {\r\n return this.downloadImage(params);\r\n }\r\n\r\n async save(): Promise<any> {\r\n return this;\r\n }\r\n\r\n async load(): Promise<this> {\r\n return this;\r\n }\r\n\r\n toJSON(): any {\r\n return {\r\n id: this.id,\r\n filename: this.filename,\r\n contentType: this.contentType,\r\n metadata: this.metadata\r\n };\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Readable} from \"stream\";\r\nimport {ObjectId} from \"bson\";\r\nimport {Collection, GridFSBucket} from \"mongodb\";\r\nimport {FilterQuery} from \"mongoose\";\r\nimport axios from \"axios\";\r\n\r\nimport {bufferToStream, copyStream, streamToBuffer} from \"../utils\";\r\nimport {IAsset, IAssetMeta, IFileType} from \"../common-types\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {AssetProcessor} from \"./asset-processor\";\r\nimport {Asset} from \"./entities/asset\";\r\nimport {TempAsset} from \"./entities/temp-asset\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Assets {\r\n\r\n readonly bucket: GridFSBucket;\r\n readonly collection: Collection;\r\n\r\n constructor(readonly connector: MongoConnector, readonly assetProcessor: AssetProcessor) {\r\n this.bucket = connector.bucket;\r\n this.collection = connector.database?.collection(\"assets.files\");\r\n }\r\n\r\n async write(stream: Readable, contentType: string = null, metadata: IAssetMeta = null): Promise<IAsset> {\r\n const uploadStream = copyStream(stream);\r\n const buffer = await streamToBuffer(stream);\r\n let fileType = {ext: \"\", mime: contentType} as IFileType;\r\n try {\r\n fileType = await AssetProcessor.fileTypeFromBuffer(buffer);\r\n } catch (e) {\r\n if (!fileType.mime) {\r\n throw `Can't determine mime type`;\r\n }\r\n console.log(`Can't determine mime type`, e);\r\n }\r\n metadata = metadata || {};\r\n return this.upload(uploadStream, fileType, metadata);\r\n }\r\n\r\n async writeBuffer(buffer: Buffer, metadata: IAssetMeta = null, contentType: string = null): Promise<IAsset> {\r\n let fileType = {ext: \"\", mime: contentType} as IFileType;\r\n try {\r\n fileType = await AssetProcessor.fileTypeFromBuffer(buffer);\r\n } catch (e) {\r\n if (!fileType.mime) {\r\n throw `Can't determine mime type`;\r\n }\r\n console.log(`Can't determine mime type`, e);\r\n }\r\n metadata = metadata || {};\r\n buffer = await this.assetProcessor.process(buffer, metadata, fileType);\r\n return this.upload(bufferToStream(buffer), fileType, metadata);\r\n }\r\n\r\n async writeUrl(url: string, metadata: IAssetMeta = null): Promise<IAsset> {\r\n const buffer = (await axios({ url, responseType: \"arraybuffer\" })).data as Buffer;\r\n return this.writeBuffer(buffer, metadata);\r\n }\r\n\r\n async download(url: string, contentType: string = null): Promise<IAsset> {\r\n let buffer = (await axios({ url, responseType: \"arraybuffer\" })).data as Buffer;\r\n let fileType = {ext: \"\", mime: contentType} as IFileType;\r\n try {\r\n fileType = await AssetProcessor.fileTypeFromBuffer(buffer);\r\n } catch (e) {\r\n if (!fileType.mime) {\r\n throw `Can't determine mime type`;\r\n }\r\n console.log(`Can't determine mime type`, e);\r\n }\r\n const metadata: IAssetMeta = {\r\n filename: url,\r\n extension: (fileType.ext || \"\").trim()\r\n };\r\n buffer = await this.assetProcessor.process(buffer, metadata, fileType);\r\n return new TempAsset(buffer, url, fileType.mime, metadata);\r\n }\r\n\r\n async read(id: string): Promise<IAsset> {\r\n return !id ? null : this.find({_id: new ObjectId(id)});\r\n }\r\n\r\n async find(where: FilterQuery<IAsset>): Promise<IAsset> {\r\n const data = await this.collection.findOne(where);\r\n return !data ? null : new Asset(data._id, data, this.collection, this.bucket);\r\n }\r\n\r\n async findMany(where: FilterQuery<IAsset>): Promise<ReadonlyArray<IAsset>> {\r\n const cursor = this.collection.find(where);\r\n const items = await cursor.toArray() || [];\r\n const result: IAsset[] = [];\r\n for (let item of items) {\r\n if (!item) continue;\r\n result.push(new Asset(item._id, item, this.collection, this.bucket));\r\n }\r\n return result;\r\n }\r\n\r\n async deleteMany(where: FilterQuery<IAsset>): Promise<ReadonlyArray<string>> {\r\n const assets = await this.findMany(where);\r\n return Promise.all(assets.map(a => a.unlink()));\r\n }\r\n\r\n async unlink(id: string): Promise<any> {\r\n const asset = await this.read(id);\r\n if (!asset) return null;\r\n return asset.unlink();\r\n }\r\n\r\n protected async upload(stream: Readable, fileType: IFileType, metadata: IAssetMeta): Promise<IAsset> {\r\n const contentType = fileType.mime.trim();\r\n metadata = Object.assign({\r\n downloadCount: 0,\r\n firstDownload: null,\r\n lastDownload: null\r\n }, metadata || {});\r\n metadata.filename = metadata.filename || new ObjectId().toHexString();\r\n metadata.extension = (fileType.ext || \"\").trim();\r\n return new Promise<IAsset>(((resolve, reject) => {\r\n const uploaderStream = this.bucket.openUploadStream(metadata.filename);\r\n stream.pipe(uploaderStream)\r\n .on(\"error\", error => {\r\n reject(error.message || error);\r\n })\r\n .on(\"finish\", () => {\r\n const asset = new Asset(uploaderStream.id as ObjectId, {\r\n filename: metadata.filename,\r\n contentType,\r\n metadata\r\n }, this.collection, this.bucket);\r\n asset.save().then(() => {\r\n resolve(asset);\r\n }, error => {\r\n reject(error.message || error);\r\n });\r\n });\r\n }));\r\n }\r\n}\r\n","import {Collection} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nimport {IAsset, ILazyAsset} from \"../../common-types\";\r\nimport {deleteFromBucket} from \"../../utils\";\r\nimport {Assets} from \"../assets\";\r\nimport {Progresses} from \"../progresses\";\r\nimport {BaseEntity} from \"./base-entity\";\r\n\r\nexport class LazyAsset extends BaseEntity<ILazyAsset> implements ILazyAsset {\r\n\r\n get jobName(): string {\r\n return this.data.jobName;\r\n }\r\n\r\n get jobParams(): any {\r\n return this.data.jobParams;\r\n }\r\n\r\n get jobQue(): string {\r\n return this.data.jobQue;\r\n }\r\n\r\n get progressId(): string {\r\n return this.data.progressId;\r\n }\r\n\r\n get assetId(): string {\r\n return this.data.assetId;\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<ILazyAsset>,\r\n collection: Collection,\r\n protected assets: Assets,\r\n protected progresses: Progresses) {\r\n super(id, data, collection);\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n await this.load();\r\n if (!this.progressId) {\r\n await this.collection.deleteOne({_id: this.mId});\r\n }\r\n return deleteFromBucket(this.assets.bucket, new ObjectId(this.assetId));\r\n }\r\n\r\n startWorking(): void {\r\n this.load().then(() => {\r\n if (this.deleted) return;\r\n this.progresses.get(this.progressId).then(p => {\r\n p?.cancel();\r\n });\r\n this.startWorkingOnAsset(false).then(() => {\r\n console.log(`Started working on lazy asset: ${this.id}`);\r\n }).catch(reason => {\r\n console.log(`Can't start working on lazy asset: ${this.id}\\nReason: ${reason}`);\r\n });\r\n });\r\n }\r\n\r\n async loadAsset(): Promise<IAsset> {\r\n await this.load();\r\n if (this.deleted) return null;\r\n if (this.assetId) {\r\n return this.assets.read(this.assetId);\r\n }\r\n if (this.progressId) {\r\n await this.progresses.waitToFinish(this.progressId);\r\n return this.loadAsset();\r\n }\r\n await this.startWorkingOnAsset(true);\r\n return this.loadAsset();\r\n }\r\n\r\n async writeAsset(asset: IAsset): Promise<IAsset> {\r\n this.data.assetId = asset.id;\r\n await this.save();\r\n return asset;\r\n }\r\n\r\n protected async startWorkingOnAsset(fromLoad: boolean): Promise<any> {\r\n this.data.progressId = (await this.progresses.create()).id;\r\n this.data.assetId = null;\r\n await this.save();\r\n await this.progresses.jobMan.enqueueWithName(this.data.jobName, {...this.data.jobParams, lazyId: this.id, fromLoad});\r\n }\r\n}\r\n","import {DependencyContainer, inject, injectable, injectAll, Lifecycle, scoped} from \"tsyringe\";\r\nimport {schedule, validate} from \"node-cron\";\r\nimport {socket, Socket} from \"zeromq\";\r\nimport {Subject, Subscription} from \"rxjs\";\r\nimport {filter, map} from \"rxjs/operators\";\r\nimport {ObjectId} from \"bson\";\r\nimport {\r\n DI_CONTAINER,\r\n IJob,\r\n IJobTask,\r\n IMessageBridge,\r\n ISocketMessage,\r\n JOB,\r\n JobParams,\r\n JobScheduleRange,\r\n JobScheduleTime,\r\n SocketParams,\r\n Type\r\n} from \"../common-types\";\r\nimport {\r\n colorize,\r\n ConsoleColor,\r\n getConstructorName,\r\n getType,\r\n isArray,\r\n isObject,\r\n jsonHighlight,\r\n promiseTimeout\r\n} from \"../utils\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class JobManager {\r\n\r\n protected jobTypes: Type<IJob>[];\r\n protected jobs: { [name: string]: (jobParams: JobParams, uniqueId: string) => Promise<any> };\r\n protected messages: Subject<ISocketMessage>;\r\n protected processing: boolean;\r\n\r\n protected apiPush: Socket;\r\n protected apiPull: Socket;\r\n protected workerPush: Socket;\r\n protected workerPull: Socket;\r\n\r\n readonly maxTimeout: number;\r\n\r\n constructor(readonly config: Configuration, @inject(DI_CONTAINER) readonly container: DependencyContainer, @injectAll(JOB) jobTypes: Type<IJob>[]) {\r\n this.jobTypes = jobTypes || [];\r\n this.jobs = this.jobTypes.reduce((res, jobType) => {\r\n const jobName = getConstructorName(jobType);\r\n res[jobName] = (jobParams: JobParams, uniqueId: string) => {\r\n const job = this.resolveJobInstance(jobType, jobParams, uniqueId);\r\n const messageBridge: IMessageBridge = {\r\n sendMessage: (message: string, params?: SocketParams) => {\r\n params.uniqueId = uniqueId;\r\n this.workerPush.send([message, JSON.stringify(params)]);\r\n }\r\n };\r\n messageBridge.sendMessage(`job-started`, {name: jobName});\r\n return job.process(messageBridge);\r\n }\r\n return res;\r\n }, {});\r\n this.messages = new Subject<ISocketMessage>();\r\n this.processing = false;\r\n this.maxTimeout = this.config.resolve(\"jobTimeout\");\r\n }\r\n\r\n on(message: string, cb: (params: SocketParams) => any): Subscription {\r\n return this.messages\r\n .pipe(filter(t => t.message === message))\r\n .pipe(map(t => t.params)).subscribe(cb);\r\n }\r\n\r\n async process(jobType: Type<IJob>, params: JobParams = {}): Promise<any> {\r\n let instance: IJob = null;\r\n try {\r\n instance = this.resolveJobInstance(jobType, params);\r\n } catch (e) {\r\n const jobName = getConstructorName(jobType);\r\n throw `Can't resolve params for job: ${jobName}, with params: ${JSON.stringify(params)}. Reason: ${e}`;\r\n }\r\n return instance.process();\r\n }\r\n\r\n async enqueueWithName(name: string, params: JobParams = {}): Promise<string> {\r\n return this.sendToWorkers(this.tryResolveFromName(name, params), params);\r\n }\r\n\r\n async enqueue(jobType: Type<IJob>, params: JobParams = {}): Promise<string> {\r\n return this.sendToWorkers(this.tryResolveAndInit(jobType, params), params);\r\n }\r\n\r\n schedule(minute: JobScheduleTime, hour: JobScheduleTime, dayOfMonth: JobScheduleTime, month: JobScheduleTime, dayOfWeek: JobScheduleTime, jobType: Type<IJob>, params: JobParams = {}): IJobTask {\r\n const expression = [minute, hour, dayOfMonth, month, dayOfWeek].map(t => {\r\n if (isObject(t)) {\r\n const range = t as JobScheduleRange;\r\n return `${range.min || 0}-${range.max || 0}`;\r\n }\r\n if (isArray(t)) {\r\n return t.join(\",\");\r\n }\r\n return `${t}`;\r\n }).join(\" \");\r\n const jobName = getConstructorName(jobType);\r\n if (!validate(expression)) {\r\n console.log(`Can't schedule the task: '${jobName}' because time expression is invalid.`);\r\n return null;\r\n }\r\n return schedule(expression, () => {\r\n this.enqueue(jobType, params).catch(e => {\r\n console.log(`Can't enqueue job: '${jobName}' because: ${e}`);\r\n });\r\n });\r\n }\r\n\r\n async startProcessing(): Promise<any> {\r\n if (this.processing) return null;\r\n this.processing = true;\r\n\r\n if (!this.config.resolve(\"isWorker\")) {\r\n console.log(colorize(`Processing can not be started because this is NOT a worker process!`, ConsoleColor.FgRed));\r\n return null;\r\n }\r\n\r\n const host = this.config.resolve(\"zmqRemoteHost\");\r\n const pushHost = `${host}:${this.config.resolve(\"zmqBackPort\")}`;\r\n this.workerPush = socket(\"push\");\r\n await this.workerPush.connect(pushHost);\r\n console.log(`Worker producer connected to: ${pushHost}`);\r\n\r\n const pullHost = `${host}:${this.config.resolve(\"zmqPort\")}`;\r\n this.workerPull = socket(\"pull\");\r\n await this.workerPull.connect(pullHost);\r\n console.log(`Worker consumer connected to: ${pullHost}`);\r\n\r\n this.workerPull.on(\"message\", async (name: Buffer, args: Buffer, uniqId: Buffer) => {\r\n try {\r\n const jobName = name.toString(\"utf8\");\r\n const jobParams = JSON.parse(args.toString(\"utf8\")) as JobParams;\r\n const uniqueId = uniqId?.toString(\"utf8\");\r\n\r\n console.time(uniqueId);\r\n console.timeLog(uniqueId, `Started working on background job: ${colorize(jobName, ConsoleColor.FgCyan)} with args: \\n${jsonHighlight(jobParams)}\\n\\n`);\r\n\r\n try {\r\n await Promise.race([this.jobs[jobName](jobParams, uniqueId), promiseTimeout(this.maxTimeout, true)]);\r\n console.timeLog(uniqueId, `Finished working on background job: ${colorize(jobName, ConsoleColor.FgCyan)}\\n\\n`);\r\n } catch (e) {\r\n console.timeLog(uniqueId, `Background job failed: ${colorize(jobName, ConsoleColor.FgRed)}\\n${e}\\n\\n`);\r\n }\r\n console.timeEnd(uniqueId);\r\n } catch (e) {\r\n console.log(`Failed to start job: ${e.message}`);\r\n }\r\n });\r\n }\r\n\r\n tryResolve(jobType: Type<IJob>, params: JobParams): string {\r\n const jobName = getConstructorName(jobType);\r\n if (!this.jobs[jobName]) {\r\n throw `Can't find job with name: ${jobName} so it can't be enqueued!`;\r\n }\r\n try {\r\n this.resolveJobInstance(jobType, params);\r\n } catch (e) {\r\n throw `Can't resolve params for job: ${jobName}, with params: ${JSON.stringify(params)}. Reason: ${e}`;\r\n }\r\n return jobName;\r\n }\r\n\r\n protected tryResolveFromName(jobName: string, params: JobParams): string {\r\n const jobType = this.jobTypes.find(type => {\r\n return getConstructorName(type) == jobName;\r\n });\r\n if (!jobType) {\r\n throw `Can't find job type with name: ${jobName} so it can't be enqueued!`;\r\n }\r\n return this.tryResolveAndInit(jobType, params);\r\n }\r\n\r\n protected tryResolveAndInit(jobType: Type<IJob>, params: JobParams): string {\r\n if (!this.apiPush) {\r\n const port = this.config.resolve(\"zmqPort\");\r\n this.apiPush = socket(\"push\");\r\n this.apiPush.bind(`tcp://0.0.0.0:${port}`);\r\n console.log(`API producer bound to port: ${port}`);\r\n }\r\n if (!this.apiPull) {\r\n const backPort = this.config.resolve(\"zmqBackPort\");\r\n this.apiPull = socket(\"pull\");\r\n this.apiPull.bind(`tcp://0.0.0.0:${backPort}`);\r\n this.apiPull.on(\"message\", (name: Buffer, args?: Buffer) => {\r\n const message = name.toString(\"utf8\");\r\n const params = JSON.parse(args?.toString(\"utf8\") || \"{}\") as JobParams;\r\n const paramTypes = Object.keys(params).reduce((res, key) => {\r\n res[key] = getType(params[key]);\r\n return res;\r\n }, {});\r\n console.log(`Received a message from worker: \"${colorize(message, ConsoleColor.FgCyan)}\" with args: ${jsonHighlight(paramTypes)}\\n\\n`);\r\n this.messages.next({message, params});\r\n });\r\n console.log(`API consumer bound to port: ${backPort}`);\r\n }\r\n return this.tryResolve(jobType, params);\r\n }\r\n\r\n protected resolveJobInstance(jobType: Type<IJob>, params: JobParams, uniqueId: string = \"\"): IJob {\r\n const container = this.container.createChildContainer();\r\n Object.keys(params).map((name) => {\r\n container.register(name, {useValue: params[name]});\r\n });\r\n container.register(\"uniqueId\", {useValue: uniqueId});\r\n container.register(jobType, jobType);\r\n return container.resolve(jobType) as IJob;\r\n }\r\n\r\n protected async sendToWorkers(jobName: string, params: JobParams): Promise<string> {\r\n const publisher = await this.apiPush;\r\n const uniqueId = new ObjectId().toHexString();\r\n await publisher.send([jobName, JSON.stringify(params), uniqueId]);\r\n return uniqueId;\r\n }\r\n}\r\n","import {ObjectId} from \"bson\";\r\nimport {Collection} from \"mongodb\";\r\nimport {IMessageBridge, IProgress} from \"../../common-types\";\r\nimport {BaseEntity} from \"./base-entity\";\r\n\r\nexport class Progress extends BaseEntity<IProgress> implements IProgress {\r\n\r\n protected messageBridge: IMessageBridge;\r\n\r\n get current(): number {\r\n return this.data.current;\r\n }\r\n\r\n get max(): number {\r\n return this.data.max;\r\n }\r\n\r\n get message(): string {\r\n return this.data.message;\r\n }\r\n\r\n get error(): string {\r\n return this.data.error;\r\n }\r\n\r\n get canceled(): boolean {\r\n return this.data.canceled;\r\n }\r\n\r\n get percent(): number {\r\n return this.max > 0 ? Math.round(this.current / this.max * 100) : 0;\r\n }\r\n\r\n get remaining(): number {\r\n return this.max > 0 ? this.max - this.current : 0;\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<IProgress>,\r\n collection: Collection) {\r\n super(id, data, collection);\r\n }\r\n\r\n setMessageBridge(messageBridge: IMessageBridge): this {\r\n this.messageBridge = messageBridge || this.messageBridge;\r\n return this;\r\n }\r\n\r\n async createSubProgress(progressValue: number, max?: number, message?: string): Promise<IProgress> {\r\n if (max <= 0 && progressValue > 0) {\r\n await this.advance(progressValue);\r\n }\r\n if (message !== null) {\r\n this.data.message = message;\r\n await this.save();\r\n }\r\n return new SubProgress(this, this.current, progressValue, Math.max(max, 1));\r\n }\r\n\r\n async setMax(max: number): Promise<any> {\r\n if (isNaN(max) || max <= 0) {\r\n throw \"Max progress value must be bigger than zero\";\r\n }\r\n this.data.max = max;\r\n await this.save();\r\n }\r\n\r\n async setMessage(message: string): Promise<any> {\r\n this.data.message = message;\r\n await this.save();\r\n }\r\n\r\n async setError(error: string): Promise<any> {\r\n this.data.error = error;\r\n await this.save();\r\n }\r\n\r\n async advance(value: number = 1): Promise<any> {\r\n if (isNaN(value) || value <= 0) {\r\n throw \"Advance value must be bigger than zero\";\r\n }\r\n await this.load();\r\n if (this.deleted || this.canceled) return null;\r\n this.data.current = Math.min(this.max, this.current + value);\r\n await this.save();\r\n }\r\n\r\n async cancel(): Promise<any> {\r\n this.data.canceled = true;\r\n await this.save();\r\n }\r\n\r\n save(): Promise<any> {\r\n if (this.messageBridge) {\r\n this.messageBridge.sendMessage(`progress-changed`, this.toJSON());\r\n }\r\n return super.save();\r\n }\r\n}\r\n\r\nexport class SubProgress implements IProgress {\r\n\r\n get id(): string {\r\n return this.parent.id;\r\n }\r\n\r\n get current(): number {\r\n return this.mCurrent;\r\n }\r\n\r\n get max(): number {\r\n return this.mMax;\r\n }\r\n\r\n get message(): string {\r\n return this.parent.message;\r\n }\r\n\r\n get error(): string {\r\n return this.parent.error;\r\n }\r\n\r\n get percent(): number {\r\n return this.parent.percent;\r\n }\r\n\r\n get remaining(): number {\r\n return this.max - this.mCurrent;\r\n }\r\n\r\n get canceled(): boolean {\r\n return !this.parent || this.parent.canceled;\r\n }\r\n\r\n protected mCurrent: number;\r\n\r\n constructor(protected parent: IProgress, protected progressFrom: number, protected progressValue: number, protected mMax: number = 100) {\r\n if (progressFrom < 0) {\r\n throw \"Progress from must be bigger than or zero\";\r\n }\r\n if (progressValue <= 0) {\r\n throw \"Progress value must be bigger than zero\";\r\n }\r\n this.mCurrent = 0;\r\n }\r\n\r\n setMessageBridge(messageBridge: IMessageBridge): this {\r\n if (!this.parent) return this;\r\n this.parent.setMessageBridge(messageBridge);\r\n return this;\r\n }\r\n\r\n async createSubProgress(progressValue: number, max?: number, message?: string): Promise<IProgress> {\r\n if (max <= 0 && progressValue > 0) {\r\n await this.advance(progressValue);\r\n }\r\n if (message !== null) {\r\n await this.setMessage(message);\r\n }\r\n return new SubProgress(this, this.current, progressValue, Math.max(max, 1));\r\n }\r\n\r\n async setMax(max: number): Promise<any> {\r\n if (isNaN(max) || max <= 0) {\r\n throw \"Max progress value must be bigger than zero\";\r\n }\r\n this.mMax = max;\r\n await this.save();\r\n }\r\n\r\n async setMessage(message: string): Promise<any> {\r\n if (!this.parent) return null;\r\n await this.parent.setMessage(message);\r\n }\r\n\r\n async setError(error: string): Promise<any> {\r\n if (!this.parent) return null;\r\n await this.parent.setError(error);\r\n }\r\n\r\n async advance(value: number = 1): Promise<any> {\r\n if (isNaN(value) || value <= 0) {\r\n throw \"Advance value must be bigger than zero\";\r\n }\r\n this.mCurrent = Math.min(this.max, this.mCurrent + value);\r\n await this.save();\r\n }\r\n\r\n async cancel(): Promise<any> {\r\n if (!this.parent) return null;\r\n await this.parent.cancel();\r\n }\r\n\r\n async save(): Promise<any> {\r\n const ratio = this.max > 0 ? this.mCurrent / this.max : 0;\r\n const newProgress = this.progressFrom + Math.round(this.progressValue * ratio);\r\n const current = this.parent.current;\r\n if (newProgress <= current) return null;\r\n await this.parent.advance(newProgress)\r\n }\r\n\r\n async load(): Promise<any> {\r\n return null;\r\n }\r\n\r\n toJSON(): any {\r\n return this.parent.toJSON();\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {ObjectId} from \"bson\";\r\nimport {Collection} from \"mongodb\";\r\nimport {FilterQuery} from \"mongoose\";\r\nimport {IProgress} from \"../common-types\";\r\nimport {promiseTimeout} from \"../utils\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {JobManager} from \"./job-manager\";\r\nimport {Progress} from \"./entities/progress\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class Progresses {\r\n\r\n protected collection: Collection;\r\n protected progresses: {[id: string]: IProgress};\r\n\r\n constructor(readonly connector: MongoConnector, readonly jobMan: JobManager) {\r\n this.collection = connector.database.collection(\"progresses\");\r\n this.progresses = {};\r\n this.jobMan.on(\"progress-changed\", progress => {\r\n const id = progress.id as string;\r\n this.progresses[id] = new Progress(new ObjectId(id), progress as any, this.collection);\r\n });\r\n }\r\n\r\n async waitToFinish(id: string): Promise<IProgress> {\r\n return Promise.race([\r\n this.waitForProgress(id, async () => {\r\n let progress = this.progresses[id];\r\n if (!progress || progress.percent < 100) {\r\n progress = await this.get(id);\r\n }\r\n if (!progress) {\r\n throw new Error(`Progress does not exists with id: ${id}`);\r\n }\r\n return progress;\r\n }, 500),\r\n this.waitForProgress(id, async () => {\r\n return this.progresses[id] || null;\r\n }, 25)\r\n ]);\r\n }\r\n\r\n async get(id: string): Promise<IProgress> {\r\n return !id ? null : this.find({_id: new ObjectId(id)});\r\n }\r\n\r\n async find(where: FilterQuery<IProgress>): Promise<IProgress> {\r\n const data = await this.collection.findOne(where);\r\n return !data ? null : new Progress(data._id, data, this.collection);\r\n }\r\n\r\n async create(max: number = 100): Promise<IProgress> {\r\n if (isNaN(max) || max <= 0) {\r\n throw new Error(`Max progress value must be bigger than zero`);\r\n }\r\n const data = {\r\n current: 0,\r\n max: max,\r\n message: \"\",\r\n error: \"\",\r\n canceled: false\r\n };\r\n const res = await this.collection.insertOne(data);\r\n return new Progress(res.insertedId, data, this.collection);\r\n }\r\n\r\n async remove(id: string): Promise<any> {\r\n await this.collection.deleteOne({_id: new ObjectId(id)});\r\n return id;\r\n }\r\n\r\n protected async waitForProgress(id: string, cb: () => Promise<IProgress>, delay: number): Promise<IProgress> {\r\n let isFinished = false;\r\n let progress: IProgress = null;\r\n let waitTime: number = 0;\r\n while (!isFinished) {\r\n progress = await cb();\r\n waitTime += delay;\r\n if (progress) {\r\n if (progress.error) {\r\n throw new Error(progress.error);\r\n }\r\n isFinished = progress.percent >= 100;\r\n }\r\n if (!isFinished) {\r\n if (waitTime >= this.jobMan.maxTimeout) {\r\n throw new Error(`Progress with id: ${id} probably never will be finished!`);\r\n }\r\n await promiseTimeout(delay);\r\n }\r\n }\r\n return progress;\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {ObjectId} from \"bson\";\r\nimport {Collection} from \"mongodb\";\r\nimport {FilterQuery} from \"mongoose\";\r\nimport {IJob, ILazyAsset, JobParams, Type} from \"../common-types\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {Assets} from \"./assets\";\r\nimport {LazyAsset} from \"./entities/lazy-asset\";\r\nimport {JobManager} from \"./job-manager\";\r\nimport {Progresses} from \"./progresses\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class LazyAssets {\r\n\r\n protected collection: Collection;\r\n\r\n constructor(readonly connector: MongoConnector,\r\n readonly assets: Assets,\r\n readonly progresses: Progresses,\r\n readonly jobMan: JobManager) {\r\n this.collection = connector.database.collection(\"lazyassets\");\r\n }\r\n\r\n async create(jobType: Type<IJob>, jobParams: JobParams = {}, jobQue: string = \"main\"): Promise<ILazyAsset> {\r\n const jobName = this.jobMan.tryResolve(jobType, {...jobParams, lazyId: \"\"});\r\n const data = {\r\n jobName,\r\n jobParams,\r\n jobQue\r\n };\r\n const existingAsset = await this.find(data);\r\n if (existingAsset) return existingAsset;\r\n const res = await this.collection.insertOne(data);\r\n return new LazyAsset(res.insertedId, data, this.collection, this.assets, this.progresses);\r\n }\r\n\r\n async read(id: string): Promise<ILazyAsset> {\r\n return !id ? null : this.find({_id: new ObjectId(id)});\r\n }\r\n\r\n async find(where: FilterQuery<ILazyAsset>): Promise<ILazyAsset> {\r\n const data = await this.collection.findOne(where);\r\n return !data\r\n ? null\r\n : new LazyAsset(data._id, data, this.collection, this.assets, this.progresses);\r\n }\r\n\r\n async unlink(id: string): Promise<any> {\r\n const asset = await this.read(id);\r\n if (!asset) return null;\r\n return asset.unlink();\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IAsset} from \"../common-types\";\r\nimport {Assets} from \"./assets\";\r\nimport {LazyAssets} from \"./lazy-assets\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class AssetResolver {\r\n\r\n constructor(readonly assets: Assets, readonly lazyAssets: LazyAssets) {\r\n\r\n }\r\n\r\n async resolve(id: string, lazy: boolean = false): Promise<IAsset> {\r\n let asset: IAsset = null;\r\n if (lazy) {\r\n const lazyAsset = await this.lazyAssets.read(id);\r\n if (!lazyAsset) return null;\r\n return lazyAsset.loadAsset();\r\n }\r\n asset = await this.assets.read(id);\r\n if (!asset) {\r\n const lazyAsset = await this.lazyAssets.read(id);\r\n if (!lazyAsset) return null;\r\n return lazyAsset.loadAsset();\r\n }\r\n return asset;\r\n }\r\n}\r\n","import {createServer, Server} from \"http\";\r\nimport express_, {Express} from \"express\";\r\nimport {injectable, singleton} from \"tsyringe\";\r\nimport socket_io, {Server as SocketServer} from \"socket.io\";\r\n\r\nconst express = express_;\r\nconst socketIO = socket_io;\r\n\r\n@injectable()\r\n@singleton()\r\nexport class BackendProvider {\r\n\r\n readonly express: Express;\r\n readonly server: Server;\r\n\r\n get io(): SocketServer {\r\n this.ioServer = this.ioServer || socketIO(this.server, {path: \"/socket\"});\r\n return this.ioServer;\r\n }\r\n\r\n protected ioServer: SocketServer;\r\n\r\n constructor() {\r\n this.express = express();\r\n this.server = createServer(this.express);\r\n }\r\n}\r\n","import {injectable, scoped, Lifecycle} from \"tsyringe\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class CacheProcessor {\r\n async serialize(data: any): Promise<any> {\r\n return data;\r\n }\r\n\r\n async deserialize(data: any): Promise<any> {\r\n return data;\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Collection} from \"mongodb\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {CacheProcessor} from \"./cache-processor\";\r\n\r\nexport interface ICacheItem {\r\n _id: string;\r\n data: any;\r\n tags?: any;\r\n expirationTimestamp?: number;\r\n expiresAt?: number;\r\n}\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Cache {\r\n\r\n protected collection: Collection<ICacheItem>;\r\n\r\n constructor(readonly connector: MongoConnector, protected config: Configuration, protected cacheProcessor: CacheProcessor) {\r\n\r\n }\r\n\r\n protected async prepare(): Promise<any> {\r\n if (this.collection) return;\r\n if (!this.connector.database) {\r\n throw new Error(`You can't use cache without mongo connection!`);\r\n }\r\n this.collection = this.connector.database.collection(this.config.resolve(\"cacheCollection\"));\r\n await this.collection.createIndex(\r\n {expiresAt: 1},\r\n {expireAfterSeconds: 0}\r\n );\r\n }\r\n\r\n async set(key: string, value: any, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n await this.prepare();\r\n const item: ICacheItem = {\r\n _id: key,\r\n data: await this.cacheProcessor.serialize(value),\r\n tags: await this.cacheProcessor.serialize(tags),\r\n expirationTimestamp,\r\n };\r\n if (ttl) {\r\n const now = Math.round(new Date().getTime() / 1000);\r\n item.expiresAt = now + ttl;\r\n }\r\n await this.collection.updateOne({_id: key}, {$set: item}, {upsert: true});\r\n return value;\r\n }\r\n\r\n async get(key: string): Promise<any> {\r\n await this.prepare();\r\n let item = await this.collection.findOne({_id: key});\r\n const now = Math.round(new Date().getTime() / 1000);\r\n if (item && item.expiresAt && item.expiresAt < now) {\r\n item = null;\r\n }\r\n if (!item) {\r\n throw new Error(`Cache probably doesn't exists with key: ${key}`);\r\n }\r\n return await this.cacheProcessor.deserialize(item.data);\r\n }\r\n\r\n async getOrSet(key: string, valueCb: () => Promise<any>, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n try {\r\n return await this.get(key);\r\n } catch (e) {\r\n return await this.set(key, await valueCb(), ttl, expirationTimestamp, tags);\r\n }\r\n }\r\n\r\n async delete(key: string): Promise<any> {\r\n await this.prepare();\r\n await this.collection.deleteOne({_id: key});\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Express} from \"express\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class EndpointProvider {\r\n\r\n async configure(app: Express): Promise<any> {\r\n console.log(`Express app is mounted to: ${app.mountpath}`);\r\n }\r\n}\r\n","import {injectable, injectAll, Lifecycle, scoped} from \"tsyringe\";\r\nimport {FIXTURE, IFixture} from \"../common-types\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Fixtures {\r\n\r\n constructor(@injectAll(FIXTURE) protected fixtures: IFixture[]) {\r\n\r\n }\r\n\r\n async load() {\r\n if (!this.fixtures) return;\r\n\r\n for (let fixture of this.fixtures) {\r\n await fixture.load();\r\n }\r\n }\r\n}\r\n","import {v4 as uuidv4} from \"uuid\";\r\nimport sharp_ from \"sharp\";\r\nimport {IGalleryImage, IGallerySize, IGalleryImageHandler} from \"../common-types\";\r\n\r\nconst sharp = sharp_;\r\nconst bigSize = 1500;\r\nconst thumbSize = 250;\r\n\r\nexport class GalleryImage implements IGalleryImage {\r\n\r\n readonly thumb: string;\r\n readonly big: string;\r\n readonly targetSize: IGallerySize;\r\n\r\n constructor(readonly folder: string, size: IGallerySize, readonly handler: IGalleryImageHandler) {\r\n this.thumb = uuidv4();\r\n this.big = uuidv4();\r\n this.targetSize = !size ? {width: thumbSize, height: thumbSize} : size;\r\n }\r\n\r\n async serve(id: string): Promise<Buffer> {\r\n const isThumb = id == this.thumb;\r\n\r\n if (await this.handler.hasResult(isThumb)) {\r\n return this.handler.serveResult(isThumb);\r\n }\r\n\r\n const original = sharp(await this.handler.getOriginal()).rotate();\r\n const meta = await original.metadata();\r\n const ratio = meta.width / meta.height;\r\n const sizeRatio = isThumb ? this.targetSize.width / this.targetSize.height : 1;\r\n const size = isThumb ? Math.max(this.targetSize.width, this.targetSize.height) : bigSize;\r\n const targetHeight = ratio > sizeRatio ? size : Math.round(size / ratio);\r\n const targetWidth = Math.round(targetHeight * ratio);\r\n\r\n const resized = original.resize(targetWidth, targetHeight);\r\n const buffer = await (isThumb ? resized.extract({\r\n left: Math.floor((targetWidth - this.targetSize.width) / 2),\r\n top: Math.floor((targetHeight - this.targetSize.height) / 2),\r\n width: this.targetSize.width,\r\n height: this.targetSize.height\r\n }).toBuffer() : resized.toBuffer());\r\n\r\n await this.handler.writeResult(isThumb, buffer);\r\n return this.handler.serveResult(isThumb);\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IGalleryImage, IGalleryImageHandler, IGallerySize} from \"../common-types\";\r\nimport {GalleryImage} from \"./gallery-image\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class GalleryCache {\r\n\r\n private readonly imgCache: { [id: string]: IGalleryImage };\r\n\r\n constructor() {\r\n this.imgCache = {};\r\n }\r\n\r\n put(img: IGalleryImage): void {\r\n this.imgCache[img.thumb] = img;\r\n this.imgCache[img.big] = img;\r\n }\r\n\r\n serve(id: string): Promise<Buffer> {\r\n const img = this.imgCache[id];\r\n return !img ? null : img.serve(id);\r\n }\r\n\r\n create(folder: string, targetSize: IGallerySize, handler: IGalleryImageHandler): IGalleryImage {\r\n const image = new GalleryImage(folder, targetSize, handler);\r\n this.put(image);\r\n return image;\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport sharp_ from \"sharp\";\r\nimport {access, constants, lstat, readdir, readFile, writeFile} from \"fs\";\r\nimport {join, dirname} from \"path\";\r\nimport {IGalleryImage, IGallerySize} from \"../common-types\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {GalleryCache} from \"./gallery-cache\";\r\nimport {mkdirRecursive} from \"../utils\";\r\n\r\nconst sharp = sharp_;\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Gallery {\r\n\r\n private readonly dir: string;\r\n private readonly output: string;\r\n private readonly cache: { [folder: string]: Promise<IGalleryImage[]> };\r\n\r\n constructor(readonly config: Configuration, readonly galleryCache: GalleryCache) {\r\n this.cache = {};\r\n this.dir = this.config.resolve(\"galleryDir\");\r\n this.output = join(this.config.resolve(\"cacheDir\"), \"gallery\");\r\n }\r\n\r\n async getFolder(folder: string, size: IGallerySize = null): Promise<IGalleryImage[]> {\r\n this.cache[folder] = this.cache[folder] || new Promise<IGalleryImage[]>(resolve => {\r\n lstat(join(this.dir, folder), (err, stats) => {\r\n if (err || !stats.isDirectory()) {\r\n resolve([]);\r\n return;\r\n }\r\n this.readRecursive(folder, \"\", size).then(resolve, () => resolve([]));\r\n });\r\n });\r\n return this.cache[folder];\r\n }\r\n\r\n protected readRecursive(path: string, folder: string, size: IGallerySize): Promise<IGalleryImage[]> {\r\n return new Promise<IGalleryImage[]>(resolve => {\r\n readdir(join(this.dir, path), (err, files) => {\r\n if (err) {\r\n resolve([]);\r\n return;\r\n }\r\n const promises = files.map(file => {\r\n return new Promise<IGalleryImage[]>(async resolve => {\r\n const filePath = join(path, file);\r\n const absoluteFilePath = join(this.dir, filePath);\r\n lstat(absoluteFilePath, (err, stats) => {\r\n if (err) {\r\n resolve([]);\r\n return;\r\n }\r\n if (stats.isDirectory()) {\r\n this.readRecursive(filePath, join(folder, file), size).then(resolve);\r\n return;\r\n }\r\n const sharpImg = sharp(absoluteFilePath);\r\n sharpImg.rotate().metadata().then(() => {\r\n const getResultPath = (isThumb) => {\r\n return join(this.output, filePath.replace(/.([a-z|A-Z]+)$/gi, function (ext) {\r\n const suffix = isThumb ? 'thumb' : 'big';\r\n return `-${suffix}${ext}`;\r\n }));\r\n };\r\n resolve([this.galleryCache.create(folder, size, {\r\n getOriginal: () => {\r\n return new Promise<Buffer>((res, rej) => {\r\n readFile(absoluteFilePath, (err, data) => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n },\r\n writeResult: (isThumb: boolean, buffer: Buffer) => {\r\n return new Promise<any>(async (res, rej) => {\r\n const resultPath = getResultPath(isThumb);\r\n await mkdirRecursive(dirname(resultPath));\r\n writeFile(resultPath, buffer, err => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res();\r\n });\r\n });\r\n },\r\n hasResult: (isThumb: boolean) => {\r\n return new Promise<boolean>(res => {\r\n access(getResultPath(isThumb), constants.R_OK, err => {\r\n res(!err);\r\n });\r\n });\r\n },\r\n serveResult: (isThumb: boolean) => {\r\n return new Promise<Buffer>((res, rej) => {\r\n readFile(getResultPath(isThumb), (err, data) => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n }\r\n })]);\r\n }, () => resolve([]));\r\n });\r\n });\r\n });\r\n Promise.all(promises).then(folders => {\r\n resolve([].concat.apply([], folders));\r\n });\r\n });\r\n });\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {rand} from \"../utils\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class IdGenerator {\r\n\r\n protected prefix: string;\r\n protected separator: string;\r\n protected chars: string;\r\n protected parts: number[];\r\n\r\n constructor(readonly config: Configuration) {\r\n this.prefix = config.resolve(\"idPrefix\");\r\n this.separator = config.resolve(\"idSeparator\");\r\n this.chars = config.resolve(\"idChars\");\r\n this.parts = config.resolve(\"idParts\");\r\n }\r\n\r\n async generate(checkCb: (id: string) => Promise<boolean>): Promise<string> {\r\n let id = null;\r\n let tries = 0;\r\n let notGood = true;\r\n while (notGood && tries < 5) {\r\n id = this.generateId();\r\n notGood = await checkCb(id);\r\n tries++;\r\n }\r\n if (notGood) {\r\n throw `Couldn't generate an unique id..`;\r\n }\r\n return id;\r\n }\r\n\r\n private generateId(): string {\r\n return this.prefix + this.parts.map(num => {\r\n let s = \"\";\r\n for (let i = 0; i < num; i++) {\r\n const ix = rand(0, this.chars.length - 1);\r\n s += this.chars[ix];\r\n }\r\n return s;\r\n }).join(this.separator);\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport axios from \"axios\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {ITranslations} from \"../common-types\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class TranslationProvider {\r\n\r\n protected cache: { [lang: string]: Promise<ITranslations> };\r\n\r\n constructor(readonly config: Configuration) {\r\n this.cache = {};\r\n }\r\n\r\n getDictionary(language: string): Promise<ITranslations> {\r\n this.cache[language] = this.cache[language] || axios.get(this.config.resolve(\"translationsTemplate\").replace(`[lang]`, language)).then(\r\n r => r.data,\r\n reason => ({\r\n message: reason\r\n })\r\n );\r\n return this.cache[language];\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {getValue, isDefined, isString} from \"../utils\";\r\nimport {ITranslations} from \"../common-types\";\r\nimport {TranslationProvider} from \"./translation-provider\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class Translator {\r\n\r\n protected cache: { [lang: string]: ITranslations };\r\n\r\n constructor(private translationProvider: TranslationProvider) {\r\n this.cache = {};\r\n }\r\n\r\n async getDictionary(language: string): Promise<ITranslations> {\r\n const dictionary = await this.translationProvider.getDictionary(language);\r\n this.cache[language] = dictionary;\r\n return dictionary;\r\n }\r\n\r\n getTranslationSync(language: string, key: string, params?: any): string {\r\n if (!isString(key) || !key.length) {\r\n throw new Error(`Parameter \"key\" required`);\r\n }\r\n const dictionary = this.cache[language];\r\n const translation = getValue(dictionary, key, key) || key;\r\n return this.interpolate(translation, params);\r\n }\r\n\r\n getTranslation(language: string, key: string, params?: any): Promise<string> {\r\n if (!isString(key) || !key.length) {\r\n throw new Error(`Parameter \"key\" required`);\r\n }\r\n return this.getDictionary(language).then(dictionary => {\r\n const translation = getValue(dictionary, key, key) || key;\r\n return this.interpolate(translation, params);\r\n });\r\n }\r\n\r\n getTranslations(language: string, ...keys: string[]): Promise<ITranslations> {\r\n return new Promise<ITranslations>(resolve => {\r\n Promise.all(keys.map(key => this.getTranslation(language, key))).then(translations => {\r\n resolve(keys.reduce((result, key, i) => {\r\n result[key] = translations[i];\r\n return result;\r\n }, {}));\r\n });\r\n });\r\n }\r\n\r\n protected interpolate(expr: string | Function, params?: any): string {\r\n if (typeof expr === \"string\") {\r\n return this.interpolateString(expr, params);\r\n }\r\n if (typeof expr === \"function\") {\r\n return expr(params);\r\n }\r\n return expr as string;\r\n }\r\n\r\n protected interpolateString(expr: string, params?: any) {\r\n if (!expr || !params) return expr;\r\n return expr.replace(/{{\\s?([^{}\\s]*)\\s?}}/g, (substring: string, b: string) => {\r\n const r = getValue(params, b);\r\n return isDefined(r) ? r : substring;\r\n });\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {lstatSync, readdir, readFileSync} from \"fs\";\r\nimport {join} from \"path\";\r\nimport * as Handlebars from \"handlebars\";\r\n\r\nimport {Translator} from \"./translator\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class TemplateRenderer {\r\n\r\n templates: {[name: string]: Function};\r\n\r\n protected initPromise: Promise<any>;\r\n\r\n constructor(readonly translator: Translator, readonly config: Configuration) {\r\n this.templates = {};\r\n Handlebars.registerHelper(`object`, function({hash}) {\r\n return hash;\r\n });\r\n Handlebars.registerHelper(`now`, function() {\r\n return new Date().getTime();\r\n });\r\n Handlebars.registerHelper(`keys`, function(obj: any) {\r\n return !obj ? [] : Object.keys(obj);\r\n });\r\n Handlebars.registerHelper(`translate`, function (key: string, params: any) {\r\n return translator.getTranslationSync(this.language, key, params);\r\n });\r\n }\r\n\r\n protected init(): Promise<any> {\r\n this.initPromise = this.initPromise || this.parseTemplates(this.config.resolve(\"templatesDir\"), []);\r\n return this.initPromise;\r\n }\r\n\r\n async parseTemplates(dir: string, dirPath: string[]): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n readdir(dir, async (err, files) => {\r\n for (let file of files) {\r\n const path = join(dir, file);\r\n if (lstatSync(path).isDirectory()) {\r\n await this.parseTemplates(join(dir, file), dirPath.concat([file]));\r\n continue;\r\n }\r\n const parts = file.split(\".\");\r\n parts.pop();\r\n const name = parts.join(\".\");\r\n const fullName = dirPath.concat([name]).join(\"-\");\r\n const content = readFileSync(path).toString(\"utf8\");\r\n this.templates[fullName] = Handlebars.compile(content);\r\n Handlebars.registerPartial(fullName, content);\r\n }\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n async render(template: string, language: string, context?: any): Promise<string> {\r\n await this.init();\r\n await this.translator.getDictionary(language);\r\n if (!this.templates[template]) {\r\n return Promise.reject(`Template not found with name: ${template}`);\r\n }\r\n context = Object.assign({language}, context || {});\r\n const res = this.templates[template](context);\r\n return res instanceof Error ? await Promise.reject(res) : res;\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {createTransport} from \"nodemailer\";\r\nimport * as Mail from \"nodemailer/lib/mailer\";\r\n\r\nimport {TemplateRenderer} from \"./template-renderer\";\r\nimport {Translator} from \"./translator\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\nexport interface MailOptions {\r\n to: string;\r\n from?: string;\r\n subject?: string;\r\n template: string;\r\n context: any;\r\n attachments?: Mail.Attachment[]\r\n}\r\n\r\n@injectable()\r\n@singleton()\r\nexport class MailSender {\r\n\r\n readonly transporter: Mail;\r\n\r\n get translator(): Translator {\r\n return this.renderer.translator;\r\n }\r\n\r\n constructor(readonly config: Configuration, readonly renderer: TemplateRenderer) {\r\n this.transporter = createTransport({\r\n host: this.config.resolve(\"smtpHost\"),\r\n port: this.config.resolve(\"smtpPort\"),\r\n auth: {\r\n user: this.config.resolve(\"smtpUser\"),\r\n pass: this.config.resolve(\"smtpPassword\"),\r\n }\r\n });\r\n }\r\n\r\n async sendMail(language: string, options: MailOptions): Promise<any> {\r\n const subject = await this.translator.getTranslation(language, options.subject || \"-\");\r\n const html = await this.renderer.render(options.template, language, options.context);\r\n return this.transporter.sendMail({\r\n from: options.from || this.config.resolve(\"mailSenderAddress\"),\r\n to: options.to,\r\n attachments: options.attachments,\r\n subject,\r\n html\r\n });\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Cache, ICacheItem} from \"./cache\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class MemoryCache {\r\n\r\n protected readonly cacheMap: Map<string, ICacheItem>;\r\n\r\n constructor(protected readonly cache: Cache) {\r\n this.cacheMap = new Map<string, ICacheItem>();\r\n }\r\n\r\n async set(key: string, value: any, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n const now = Math.round(new Date().getTime() / 1000);\r\n const expTimestamp = Math.min(isNaN(ttl) ? Number.MAX_SAFE_INTEGER : ttl, 3600);\r\n this.cacheMap.set(key, {\r\n _id: key,\r\n data: value,\r\n expirationTimestamp: expTimestamp,\r\n expiresAt: now + expTimestamp,\r\n });\r\n return this.cache.set(key, value, ttl, expirationTimestamp, tags);\r\n }\r\n\r\n async get(key: string): Promise<any> {\r\n let item = this.cacheMap.get(key);\r\n const now = Math.round(new Date().getTime() / 1000);\r\n let expTimestamp = 3600;\r\n if (item && item.expiresAt && item.expiresAt < now) {\r\n expTimestamp = item.expirationTimestamp;\r\n item = null;\r\n }\r\n if (!item) {\r\n const value = await this.cache.get(key);\r\n this.cacheMap.set(key, {\r\n _id: key,\r\n data: value,\r\n expirationTimestamp: expTimestamp,\r\n expiresAt: now + expTimestamp,\r\n });\r\n return value;\r\n }\r\n return item.data;\r\n }\r\n\r\n async getOrSet(key: string, valueCb: () => Promise<any>, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n try {\r\n return await this.get(key);\r\n } catch (e) {\r\n return await this.set(key, await valueCb(), ttl, expirationTimestamp, tags);\r\n }\r\n }\r\n\r\n async delete(key: string): Promise<any> {\r\n this.cacheMap.delete(key);\r\n await this.cacheMap.delete(key);\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IUser} from \"../common-types\";\r\n\r\nconst sampleUser: IUser = {\r\n id: \"5a3cdf7c6a9cf0ba32feccdf\",\r\n email: \"admin@site.com\",\r\n password: \"\",\r\n roles: [\"admin\"]\r\n};\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class UserManager {\r\n\r\n async getByCredentials(credentials: any): Promise<IUser> {\r\n return (sampleUser.email == credentials.email) ? sampleUser : await Promise.reject(\"message.login.error\");\r\n }\r\n\r\n async getById(id: string): Promise<IUser> {\r\n return (sampleUser.id == id) ? sampleUser : null;\r\n }\r\n\r\n async serialize(user: IUser): Promise<any> {\r\n const res = Object.assign({}, user);\r\n delete res.password;\r\n return res;\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {Response} from \"express\";\r\nimport {injectable} from \"tsyringe\";\r\nimport {\r\n Authorized,\r\n Body,\r\n Controller,\r\n Get,\r\n HttpError,\r\n Param,\r\n Post,\r\n QueryParam,\r\n QueryParams,\r\n Res,\r\n UploadedFile\r\n} from \"routing-controllers\";\r\nimport {IAsset, IAssetImageParams} from \"../common-types\";\r\nimport {Assets} from \"../services/assets\";\r\nimport {AssetResolver} from \"../services/asset-resolver\";\r\n\r\n@injectable()\r\n@Controller(\"/assets\")\r\nexport class AssetsController {\r\n\r\n constructor(readonly assets: Assets, readonly assetResolver: AssetResolver) {\r\n\r\n }\r\n\r\n @Authorized()\r\n @Post(\"\")\r\n async upload(@UploadedFile(\"file\") file: Express.Multer.File) {\r\n try {\r\n const contentType = file.mimetype === \"application/octet-stream\" ? null : file.mimetype;\r\n const asset = await this.assets.writeBuffer(file.buffer, {filename: file.filename}, contentType);\r\n return asset.toJSON();\r\n } catch (e) {\r\n const msg = e?.message || e || \"Unknown error\";\r\n throw new HttpError(400, `Asset can't be uploaded.\\n${msg}`);\r\n }\r\n }\r\n\r\n @Authorized()\r\n @Post(\"url\")\r\n async uploadUrl(@Body() body: any) {\r\n try {\r\n const asset = await this.assets.writeUrl(body.url, body);\r\n return asset.toJSON();\r\n } catch (e) {\r\n const msg = e?.message || e || \"Unknown error\";\r\n throw new HttpError(400, `Asset can't be uploaded.\\n${msg}`);\r\n }\r\n }\r\n\r\n @Get(\"/:id\")\r\n async getFile(@Param(\"id\") id: string, @QueryParam(\"lazy\") lazy: boolean, @Res() res: Response): Promise<Readable> {\r\n const asset = await this.getAsset(\"Asset\", id, lazy, res);\r\n return asset.download();\r\n }\r\n\r\n @Get(\"/image/:id/:rotation\")\r\n async getImageRotation(@Param(\"id\") id: string, @QueryParams() params: IAssetImageParams, @Res() res: Response, @Param(\"rotation\") rotation: number = 0): Promise<Readable> {\r\n const asset = await this.getAsset(\"Image\", id, params.lazy, res);\r\n if (rotation !== 0) {\r\n params.rotation = params.rotation || rotation;\r\n }\r\n return asset.downloadImage(params);\r\n }\r\n\r\n @Get(\"/image/:id\")\r\n async getImage(@Param(\"id\") id: string, @QueryParams() params: IAssetImageParams, @Res() res: Response): Promise<Readable> {\r\n return this.getImageRotation(id, params, res);\r\n }\r\n\r\n @Get(\"/by-name/:id\")\r\n async getFileByName(@Param(\"name\") name: string, @Res() res: Response): Promise<Readable> {\r\n const asset = await this.getAssetByName(\"Asset\", name, res);\r\n return asset.download();\r\n }\r\n\r\n @Get(\"/by-name/image/:id\")\r\n async getImageByName(@Param(\"name\") name: string, @QueryParams() params: IAssetImageParams, @Res() res: Response): Promise<Readable> {\r\n const asset = await this.getAssetByName(\"Image\", name, res);\r\n return asset.downloadImage(params);\r\n }\r\n\r\n protected setAssetHeaders(type: string, asset: IAsset, res: Response): void {\r\n if (asset.metadata?.classified) {\r\n throw new HttpError(403, `${type} is classified, and can be only downloaded from a custom url.`);\r\n }\r\n const ext = asset.metadata?.extension;\r\n if (ext) {\r\n res.header(\"content-disposition\", `inline; filename=${asset.filename}.${ext}`);\r\n }\r\n if (asset.contentType) {\r\n res.header(\"content-type\", asset.contentType);\r\n }\r\n }\r\n\r\n protected async getAsset(type: string, id: string, lazy: boolean, res: Response): Promise<IAsset> {\r\n const asset = await this.assetResolver.resolve(id, lazy);\r\n if (!asset) {\r\n throw new HttpError(404, `${type} with id: '${id}' not found.`);\r\n }\r\n this.setAssetHeaders(type, asset, res);\r\n return asset;\r\n }\r\n\r\n protected async getAssetByName(type: string, filename: string, res: Response): Promise<IAsset> {\r\n const asset = await this.assets.find({filename});\r\n if (!asset) {\r\n throw new HttpError(404, `${type} with filename: '${filename}' not found.`);\r\n }\r\n this.setAssetHeaders(type, asset, res);\r\n return asset;\r\n }\r\n}\r\n","import {Response} from \"express\";\r\nimport {sign} from \"jsonwebtoken\";\r\nimport {injectable} from \"tsyringe\";\r\nimport {Authorized, Body, Controller, CurrentUser, Get, HttpError, Post, Res} from \"routing-controllers\";\r\nimport {compare} from \"bcrypt\";\r\n\r\nimport {Configuration} from \"../services/configuration\";\r\nimport {UserManager} from \"../services/user-manager\";\r\nimport {IUser} from \"../common-types\";\r\n\r\n@injectable()\r\n@Controller()\r\nexport class AuthController {\r\n\r\n constructor(readonly config: Configuration, readonly userManager: UserManager) {}\r\n\r\n @Post(\"/login\")\r\n async login(@Body() credentials: any, @Res() res: Response) {\r\n try {\r\n const user = await this.userManager.getByCredentials(credentials);\r\n const valid = await compare(credentials.password, user.password);\r\n if (valid !== true) throw \"message.login.error\";\r\n return {\r\n token: sign({ id: user._id || user.id }, this.config.resolve(\"jwtSecret\")),\r\n user: await this.userManager.serialize(user)\r\n };\r\n } catch (reason) {\r\n throw new HttpError(401, reason);\r\n }\r\n }\r\n\r\n @Authorized()\r\n @Get(\"/user\")\r\n getProfile(@CurrentUser() user: IUser) {\r\n return this.userManager.serialize(user);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {Controller, Get, Param} from \"routing-controllers\";\r\nimport {GalleryCache} from \"../services/gallery-cache\";\r\n\r\n@injectable()\r\n@Controller(\"/gallery\")\r\nexport class GalleryController {\r\n\r\n constructor(readonly galleryCache: GalleryCache) { }\r\n\r\n @Get(\"/:id\")\r\n getFile(@Param(\"id\") id: string) {\r\n return this.galleryCache.serve(id);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {Controller, Get, Param} from \"routing-controllers\";\r\nimport {Progresses} from \"../services/progresses\";\r\nimport {Configuration} from \"../services/configuration\";\r\n\r\n@injectable()\r\n@Controller(\"/progresses\")\r\nexport class ProgressesController {\r\n\r\n protected connectionType: string;\r\n\r\n constructor(readonly progresses: Progresses, readonly config: Configuration) {\r\n const mainEndpoint = this.config.resolve(\"mainEndpoint\");\r\n this.connectionType = !mainEndpoint ? \"polling\" : \"socket\";\r\n }\r\n\r\n @Get(\"/:id\")\r\n async getProgress(@Param(\"id\") id: string) {\r\n const progress = await this.progresses.get(id);\r\n if (!progress) return null;\r\n const json = progress.toJSON();\r\n json.connectionType = this.connectionType;\r\n return json;\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {BadRequestError, ExpressErrorMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {Response} from \"express\";\r\n\r\nimport {IRequest} from \"../common-types\";\r\nimport {Translator} from \"../services/translator\";\r\nimport {Configuration} from \"../services/configuration\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"after\" })\r\nexport class ErrorHandlerMiddleware implements ExpressErrorMiddlewareInterface {\r\n\r\n get isDev(): boolean {\r\n return this.configuration.resolve(\"nodeEnv\") === \"development\";\r\n }\r\n\r\n constructor(readonly configuration: Configuration, readonly translator: Translator) {\r\n\r\n }\r\n\r\n async error(error: any, req: IRequest, res: Response, next: (err?: any) => any) {\r\n const result = await this.getResult(error, req, res);\r\n if (this.isDev) {\r\n console.log(\"ERROR\", result, res.statusCode);\r\n }\r\n res.json(result);\r\n }\r\n\r\n protected async getResult(error, req: IRequest, res: Response) {\r\n\r\n const result: any = {};\r\n\r\n if (error instanceof BadRequestError) {\r\n res.status(400);\r\n if (error.constructor.name === \"ParamRequiredError\") {\r\n result.message = await this.translator.getTranslation(req.language, \"message.parameter-required.error\");\r\n result.param = error.message;\r\n } else {\r\n result.message = error.message || await this.translator.getTranslation(req.language, \"message.form-validation.error\");\r\n result.errors = error[\"errors\"];\r\n if (this.isDev) {\r\n result.stack = error.stack;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n res.status(error.httpCode || 500);\r\n\r\n if (error instanceof Error) {\r\n if (error.name) {\r\n result.name = error.name;\r\n }\r\n if (error.message) {\r\n result.message = error.message;\r\n }\r\n if (error.stack && this.isDev) {\r\n result.stack = error.stack;\r\n }\r\n } else if (typeof error === \"string\") {\r\n result.message = error;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {inject, injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {DI_CONTAINER, IRequest} from \"../common-types\";\r\nimport {DependencyContainer} from \"tsyringe\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class ContainerMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(@inject(DI_CONTAINER) readonly container: DependencyContainer) {\r\n\r\n }\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.container = this.container;\r\n next(null);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {IRequest} from \"../common-types\";\r\nimport {Configuration} from \"../services/configuration\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class LanguageMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(readonly config: Configuration) {\r\n\r\n }\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.language = request.query.language as string || this.config.resolve(\"defaultLanguage\");\r\n next(null);\r\n }\r\n\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport moment from \"moment\";\r\nimport {IRequest} from \"../common-types\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"after\" })\r\nexport class RequestEndedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.ended = moment();\r\n const diff = request.ended.diff(request.started);\r\n const duration = moment.duration(diff);\r\n console.log(`Request '${request.id}' ended at: ${request.ended.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`);\r\n console.log(`Request '${request.id}' lasted: ${duration.asMilliseconds()}ms`)\r\n next(null);\r\n }\r\n\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {ObjectId} from \"bson\";\r\nimport moment from \"moment\";\r\nimport {IRequest} from \"../common-types\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class RequestStartedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.id = new ObjectId().toHexString();\r\n request.started = moment();\r\n console.log(`Request '${request.id}' started at: ${request.started.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`);\r\n next(null);\r\n }\r\n\r\n}\r\n","import {inject, injectable} from \"tsyringe\";\r\nimport {ConnectedSocket, MessageBody, OnMessage, SocketController,} from \"socket-controllers\";\r\nimport {Server} from \"socket.io\";\r\nimport {IClientSocket, SOCKET_SERVER} from \"../common-types\";\r\nimport {broadcast} from \"../utils\";\r\nimport {Progresses} from \"../services/progresses\";\r\n\r\n@injectable()\r\n@SocketController()\r\nexport class ProgressController {\r\n\r\n constructor(readonly progresses: Progresses, @inject(SOCKET_SERVER) readonly socketServer: Server) {\r\n }\r\n\r\n @OnMessage(\"background-progress\")\r\n async advanceProgress(@ConnectedSocket() client: IClientSocket, @MessageBody() progressId: string) {\r\n const progress = await this.progresses.get(progressId);\r\n if (!progress) return;\r\n const json = progress.toJSON();\r\n broadcast(this.socketServer, c => {\r\n if (c.interestedProgresses instanceof Set && c.interestedProgresses.has(progressId)) {\r\n client.emit(\"background-progress-changed\", json);\r\n }\r\n });\r\n console.log(`progress changed: ${client.id}, data: ${JSON.stringify(json)}`);\r\n }\r\n\r\n @OnMessage(\"background-progress-interest\")\r\n async setProgressInterest(@ConnectedSocket() client: IClientSocket, @MessageBody() progressId: string) {\r\n const progress = await this.progresses.get(progressId);\r\n if (!progress) return;\r\n const json = progress.toJSON();\r\n client.interestedProgresses = client.interestedProgresses || new Set<string>();\r\n if (client.interestedProgresses.has(progressId)) return;\r\n client.interestedProgresses.add(progressId);\r\n client.emit(\"background-progress-changed\", json);\r\n console.log(`progress interest added: ${client.id}, data: ${JSON.stringify(json)}`);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {Middleware, MiddlewareInterface} from \"socket-controllers\";\r\n\r\n@injectable()\r\n@Middleware()\r\nexport class CompressionMiddleware implements MiddlewareInterface {\r\n\r\n use(socket: any, next: (err?: any) => any) {\r\n next();\r\n }\r\n}\r\n","import {IDependencyContainer, ITree} from \"../common-types\";\r\nimport {isString} from \"../utils\";\r\n\r\nexport class Tree implements ITree {\r\n\r\n protected map: Map<string, Tree>;\r\n\r\n protected get parentTree(): ITree {\r\n return this.container.parent.tree;\r\n }\r\n\r\n constructor(protected container: IDependencyContainer, protected exists: boolean, readonly path: string) {\r\n this.map = new Map<string, Tree>();\r\n }\r\n\r\n resolveService(): any {\r\n return !this.exists ? null : this.container.resolve(this.path);\r\n }\r\n\r\n resolveLeaves(): Map<string, ITree> {\r\n let map: Map<string, ITree>;\r\n try {\r\n const parentTree = this.parentTree.resolvePath(this.path);\r\n map = parentTree.resolveLeaves();\r\n } catch (e) {\r\n map = new Map<string, ITree>();\r\n }\r\n const visitor = (treeMap: Map<string, Tree>, path: string) => {\r\n treeMap.forEach((tree, key) => {\r\n const subKey = !path ? key : `${path}.${key}`;\r\n if (tree.map.size == 0) {\r\n map.set(subKey, tree);\r\n return;\r\n }\r\n visitor(tree.map, subKey);\r\n });\r\n };\r\n visitor(this.map, \"\");\r\n return map;\r\n }\r\n\r\n resolveServices(): Map<string, any> {\r\n const map = new Map<string, any>();\r\n this.resolveLeaves().forEach((leaf, key) => {\r\n map.set(key, leaf.resolveService());\r\n });\r\n return map;\r\n }\r\n\r\n resolveAncestor(path: string): ITree {\r\n if (!isString(path) || path.length == 0) {\r\n return this;\r\n }\r\n let parentTree: ITree;\r\n try {\r\n parentTree = this.parentTree.resolvePath(this.path);\r\n parentTree = parentTree.resolveAncestor(path);\r\n } catch (e) {\r\n parentTree = new Tree(this.container, false, \"\");\r\n }\r\n const pathParts = path.split(\".\");\r\n let tree: Tree = this;\r\n let previousTree: Tree = this;\r\n for (let part of pathParts) {\r\n tree = tree.map.get(part);\r\n if (!tree) {\r\n if (previousTree == this) {\r\n if (parentTree.path.length > 0) {\r\n return parentTree;\r\n }\r\n throw new Error(`Ancestor '${path}' not found in current tree: '${this.path}'`);\r\n }\r\n return previousTree;\r\n }\r\n previousTree = tree;\r\n }\r\n return parentTree.path.length > previousTree.path.length\r\n ? parentTree : previousTree;\r\n }\r\n\r\n resolvePath(path: string, throwError: boolean = true): ITree {\r\n const absolutePath = !this.path ? path : `${this.path}.${path}`;\r\n let tree: ITree = new Tree(this.container, false, absolutePath);\r\n try {\r\n tree = this.resolveAncestor(path);\r\n } catch (e) {\r\n if (throwError) {\r\n throw new Error(`Path '${path}' not found in current tree: '${this.path}'`);\r\n }\r\n return tree;\r\n }\r\n if (tree.path !== absolutePath) {\r\n if (throwError) {\r\n throw new Error(`Path '${path}' not found in current tree: '${this.path}'`);\r\n }\r\n return tree;\r\n }\r\n return tree;\r\n }\r\n\r\n addPath(path: string): this {\r\n if (!isString(path) || path.length == 0) {\r\n return this;\r\n }\r\n const pathParts = path.split(\".\");\r\n const maxIx = pathParts.length - 1;\r\n let tree: Tree = this;\r\n path = this.path;\r\n for (let ix = 0; ix <= maxIx; ix++) {\r\n const part = pathParts[ix];\r\n if (!tree.map.has(part)) {\r\n tree.map.set(part, new Tree(this.container, false, !path ? part : `${path}.${part}`))\r\n }\r\n tree = tree.map.get(part);\r\n tree.exists = tree.exists || ix == maxIx;\r\n path = tree.path;\r\n }\r\n return this;\r\n }\r\n}\r\n","import {\r\n ClassProvider,\r\n DependencyContainer,\r\n Frequency,\r\n InjectionToken,\r\n isFactoryProvider,\r\n RegistrationOptions,\r\n TokenProvider,\r\n ValueProvider\r\n} from \"tsyringe\";\r\nimport {FactoryProvider, IDependencyContainer, ITree, Type} from \"../common-types\";\r\nimport {Tree} from \"./tree\";\r\nimport {isString} from \"../utils\";\r\n\r\ninterface PreResolutionInterceptorCallback<T = any> {\r\n (token: InjectionToken<T>, resolutionType: \"Single\" | \"All\"): void;\r\n}\r\n\r\ninterface PostResolutionInterceptorCallback<T = any> {\r\n (token: InjectionToken<T>, result: T | T[], resolutionType: \"Single\" | \"All\"): void;\r\n}\r\n\r\nexport class DiContainer implements IDependencyContainer {\r\n\r\n get registeredTokens(): ReadonlyArray<InjectionToken> {\r\n return (this.parent?.registeredTokens || []).concat(this.tokens);\r\n }\r\n\r\n get tree(): ITree {\r\n return this.root;\r\n }\r\n\r\n protected tokens: Array<InjectionToken>;\r\n protected tokenSet: Set<InjectionToken>;\r\n protected root: Tree;\r\n\r\n constructor(protected container: DependencyContainer, readonly parent: IDependencyContainer = null) {\r\n container[\"wrapperContainer\"] = this;\r\n this.tokens = [];\r\n this.tokenSet = new Set<InjectionToken>();\r\n this.root = new Tree(this, false, \"\");\r\n }\r\n\r\n beforeResolution<T>(token: InjectionToken<T>, callback: PreResolutionInterceptorCallback<T>, options?: { frequency: Frequency }): void {\r\n this.container.beforeResolution(token, callback, options);\r\n }\r\n\r\n afterResolution<T>(token: InjectionToken<T>, callback: PostResolutionInterceptorCallback<T>, options?: { frequency: Frequency }): void {\r\n this.container.afterResolution(token, callback, options);\r\n }\r\n\r\n clearInstances(): void {\r\n this.container.clearInstances();\r\n }\r\n\r\n createChildContainer(): IDependencyContainer {\r\n return new DiContainer(this.container.createChildContainer(), this);\r\n }\r\n\r\n isRegistered<T>(token: InjectionToken<T>, recursive?: boolean): boolean {\r\n return this.container.isRegistered(token, recursive);\r\n }\r\n\r\n register<T>(token: InjectionToken<T>, provider: ValueProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: FactoryProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: TokenProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: ClassProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: Type<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register(token, provider, options?: RegistrationOptions): IDependencyContainer {\r\n if (isFactoryProvider(provider)) {\r\n this.container.register(token, {\r\n useFactory: dc => {\r\n return provider.useFactory(dc[\"wrapperContainer\"]);\r\n }\r\n });\r\n return this.addToken(token);\r\n }\r\n this.container.register(token, provider);\r\n return this.addToken(token);\r\n }\r\n\r\n registerInstance<T>(token: InjectionToken<T>, instance: T): IDependencyContainer {\r\n this.container.registerInstance(token, instance);\r\n return this.addToken(token);\r\n }\r\n\r\n registerSingleton<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer;\r\n registerSingleton<T>(token: Type<T>): IDependencyContainer;\r\n registerSingleton(from, to?): IDependencyContainer {\r\n this.container.registerSingleton(from, to);\r\n return this.addToken(from);\r\n }\r\n\r\n registerType<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer {\r\n this.container.registerType(from, to);\r\n return this.addToken(from);\r\n }\r\n\r\n reset(): void {\r\n this.tokens = [];\r\n this.tokenSet = new Set<InjectionToken>();\r\n this.container.reset();\r\n }\r\n\r\n resolve<T>(token: InjectionToken<T>): T {\r\n return this.container.resolve(token);\r\n }\r\n\r\n resolveAll<T>(token: InjectionToken<T>): T[] {\r\n return this.container.resolveAll(token);\r\n }\r\n\r\n get<T>(token: InjectionToken<T>): T {\r\n return this.container.resolve(token);\r\n }\r\n\r\n protected addToken<T>(token: InjectionToken<T>): this {\r\n if (this.tokenSet.has(token)) return this;\r\n this.tokenSet.add(token);\r\n this.tokens.push(token);\r\n if (isString(token)) {\r\n this.root.addPath(token);\r\n }\r\n return this;\r\n }\r\n}\r\n","import {existsSync} from \"fs\";\r\nimport {resolve} from \"path\";\r\nimport {static as serveStatic} from \"express\";\r\nimport {EXPRESS, IDependencyContainer} from \"./common-types\";\r\nimport {EndpointProvider} from \"./services/endpoint-provider\";\r\n\r\nexport async function setupStatic(rootFolder: string, container: IDependencyContainer): Promise<any> {\r\n\r\n const browserFolder = resolve(rootFolder || __dirname, `public_html`);\r\n const app = container.get(EXPRESS);\r\n const ep = container.get(EndpointProvider);\r\n\r\n console.log(browserFolder, existsSync(browserFolder));\r\n\r\n if (existsSync(browserFolder)) {\r\n console.log(`public_html exists. setting up static files serving...`);\r\n app.use(serveStatic(browserFolder, {\r\n maxAge: \"1y\"\r\n }));\r\n } else {\r\n console.log(`public_html does not exist on path: \"${browserFolder}\"`);\r\n }\r\n\r\n await ep.configure(app);\r\n}\r\n","import {IAsset, IJob, IMessageBridge, IProgress} from \"../common-types\";\r\nimport {Assets} from \"../services/assets\";\r\nimport {LazyAssets} from \"../services/lazy-assets\";\r\nimport {AssetResolver} from \"../services/asset-resolver\";\r\nimport {Progresses} from \"../services/progresses\";\r\n\r\nexport abstract class LazyAssetGenerator implements IJob {\r\n\r\n get assets(): Assets {\r\n return this.assetResolver.assets;\r\n }\r\n\r\n get lazyAssets(): LazyAssets {\r\n return this.assetResolver.lazyAssets;\r\n }\r\n\r\n protected constructor(protected assetResolver: AssetResolver, protected progresses: Progresses, protected lazyId: string) {\r\n }\r\n\r\n abstract generate(progress: IProgress, messaging?: IMessageBridge): Promise<IAsset>;\r\n\r\n async process(messaging: IMessageBridge): Promise<any> {\r\n const lazyAsset = await this.lazyAssets.read(this.lazyId);\r\n let progress = await this.progresses.get(lazyAsset.progressId);\r\n if (!progress || progress.canceled) return null;\r\n progress.setMessageBridge(messaging);\r\n try {\r\n const asset = await this.generate(progress, messaging);\r\n progress = await progress.load();\r\n if (!progress || progress.canceled) return null;\r\n await lazyAsset.writeAsset(asset);\r\n } catch (e) {\r\n await progress.setError(e.message || e);\r\n throw e;\r\n }\r\n if (progress.remaining > 0) {\r\n await progress.advance(progress.remaining);\r\n }\r\n }\r\n}\r\n","import {join} from \"path\";\r\nimport {json} from \"body-parser\";\r\nimport {verify} from \"jsonwebtoken\";\r\nimport {container, DependencyContainer} from \"tsyringe\";\r\nimport {Action, HttpError, useContainer as useRoutingContainer, useExpressServer} from \"routing-controllers\";\r\nimport {useContainer as useSocketContainer, useSocketServer} from \"socket-controllers\";\r\n\r\nimport {getApiDocs} from \"./rest-openapi\";\r\n\r\nimport {\r\n DI_CONTAINER,\r\n EXPRESS,\r\n FIXTURE,\r\n HTTP_SERVER,\r\n IBackendConfig,\r\n IDependencyContainer,\r\n IPaginationParams,\r\n IRequest,\r\n IUser,\r\n JOB,\r\n Parameter,\r\n PARAMETER,\r\n Provider,\r\n SOCKET_SERVER,\r\n Type\r\n} from \"./common-types\";\r\n\r\nimport {AssetProcessor} from \"./services/asset-processor\";\r\nimport {AssetResolver} from \"./services/asset-resolver\";\r\nimport {Assets} from \"./services/assets\";\r\nimport {BackendProvider} from \"./services/backend-provider\";\r\nimport {Cache} from \"./services/cache\";\r\nimport {CacheProcessor} from \"./services/cache-processor\";\r\nimport {Configuration} from \"./services/configuration\";\r\nimport {EndpointProvider} from \"./services/endpoint-provider\";\r\nimport {Fixtures} from \"./services/fixtures\";\r\nimport {Gallery} from \"./services/gallery\";\r\nimport {GalleryCache} from \"./services/gallery-cache\";\r\nimport {IdGenerator} from \"./services/id-generator\";\r\nimport {JobManager} from \"./services/job-manager\";\r\nimport {LazyAssets} from \"./services/lazy-assets\";\r\nimport {MailSender} from \"./services/mail-sender\";\r\nimport {MemoryCache} from \"./services/memory-cache\";\r\nimport {MongoConnector} from \"./services/mongo-connector\";\r\nimport {Progresses} from \"./services/progresses\";\r\nimport {TemplateRenderer} from \"./services/template-renderer\";\r\nimport {TranslationProvider} from \"./services/translation-provider\";\r\nimport {Translator} from \"./services/translator\";\r\nimport {UserManager} from \"./services/user-manager\";\r\n\r\nimport {AssetsController} from \"./rest-controllers/assets.controller\";\r\nimport {AuthController} from \"./rest-controllers/auth.controller\";\r\nimport {GalleryController} from \"./rest-controllers/gallery.controller\";\r\nimport {ProgressesController} from \"./rest-controllers/progresses.controller\";\r\n\r\nimport {ErrorHandlerMiddleware} from \"./rest-middlewares/error-handler.middleware\";\r\nimport {ContainerMiddleware} from \"./rest-middlewares/container.middleware\";\r\nimport {LanguageMiddleware} from \"./rest-middlewares/language.middleware\";\r\nimport {RequestEndedMiddleware} from \"./rest-middlewares/request-ended.middleware\";\r\nimport {RequestStartedMiddleware} from \"./rest-middlewares/request-started.middleware\";\r\n\r\nimport {ProgressController} from \"./socket-controllers/progress.controller\";\r\n\r\nimport {CompressionMiddleware} from \"./socket-middlewares/compression.middleware\";\r\nimport {diContainers, isFunction, isString, isType, valueToPromise} from \"./utils\";\r\nimport {DiContainer} from \"./utilities/di-container\";\r\nimport {setupStatic} from \"./static\";\r\n\r\nexport {\r\n FilterPredicate,\r\n isNullOrUndefined,\r\n isDefined,\r\n getType,\r\n isObject,\r\n isArray,\r\n isBoolean,\r\n isDate,\r\n isPrimitive,\r\n isString,\r\n isFunction,\r\n isConstructor,\r\n isType,\r\n isInterface,\r\n ucFirst,\r\n lcFirst,\r\n isObjectId,\r\n firstItem,\r\n lastItem,\r\n regroup,\r\n uniqueItems,\r\n getValue,\r\n groupBy,\r\n convertValue,\r\n injectServices,\r\n paginate,\r\n lookupStages,\r\n letsLookupStage,\r\n hydratePopulated,\r\n paginateAggregations,\r\n toImage,\r\n bufferToStream,\r\n streamToBuffer,\r\n copyStream,\r\n mkdirRecursive,\r\n deleteFile,\r\n readFile,\r\n readAndDeleteFile,\r\n writeFile,\r\n valueToPromise,\r\n promiseTimeout,\r\n getConstructorName,\r\n getFunctionParams,\r\n proxyFunction,\r\n proxyFunctions,\r\n ResolveEntity,\r\n getFileName,\r\n getExtension,\r\n idToString,\r\n createTransformer,\r\n broadcast,\r\n rand,\r\n random,\r\n multiSubscription,\r\n observableFromFunction,\r\n padLeft,\r\n padRight,\r\n deleteFromBucket,\r\n filter,\r\n copy,\r\n assign,\r\n md5,\r\n runCommand,\r\n ConsoleColor,\r\n IJsonColors,\r\n colorize,\r\n jsonHighlight,\r\n replaceSpecialChars\r\n} from \"./utils\";\r\n\r\nexport {IsFile, IsObjectId} from \"./validators\";\r\n\r\nexport {\r\n FIXTURE,\r\n JOB,\r\n EXPRESS,\r\n HTTP_SERVER,\r\n SOCKET_SERVER,\r\n PARAMETER,\r\n DI_CONTAINER,\r\n Type,\r\n FactoryProvider,\r\n IDependencyContainer,\r\n ClassBasedProvider,\r\n ValueBasedProvider,\r\n FactoryBasedProvider,\r\n TokenBasedProvider,\r\n SyringeProvider,\r\n Provider,\r\n IFixture,\r\n SchemaConverter,\r\n ParamResolver,\r\n Parameter,\r\n SocketParam,\r\n SocketParams,\r\n ISocketMessage,\r\n IMessageBridge,\r\n IJob,\r\n IJobTask,\r\n JobParams,\r\n JobScheduleRange,\r\n JobScheduleTime,\r\n IProgress,\r\n IAssetCropInfo,\r\n IAssetMeta,\r\n IAssetImageParams,\r\n IAsset,\r\n ILazyAsset,\r\n IUser,\r\n IClientSocket,\r\n IRequestBase,\r\n IRequest,\r\n IGalleryImage,\r\n IGallerySize,\r\n IGalleryImageHandler,\r\n ITranslations,\r\n IPaginationMeta,\r\n IPaginationBase,\r\n IPagination,\r\n IPaginationParams,\r\n FontFormat,\r\n IFileType,\r\n IBackendConfig\r\n} from \"./common-types\";\r\n\r\nexport {AssetProcessor} from \"./services/asset-processor\";\r\nexport {AssetResolver} from \"./services/asset-resolver\";\r\nexport {Assets} from \"./services/assets\";\r\nexport {BackendProvider} from \"./services/backend-provider\";\r\nexport {Cache} from \"./services/cache\";\r\nexport {CacheProcessor} from \"./services/cache-processor\";\r\nexport {Configuration} from \"./services/configuration\";\r\nexport {EndpointProvider} from \"./services/endpoint-provider\";\r\nexport {Fixtures} from \"./services/fixtures\";\r\nexport {Gallery} from \"./services/gallery\";\r\nexport {GalleryCache} from \"./services/gallery-cache\";\r\nexport {IdGenerator} from \"./services/id-generator\";\r\nexport {JobManager} from \"./services/job-manager\";\r\nexport {LazyAssets} from \"./services/lazy-assets\";\r\nexport {MailSender} from \"./services/mail-sender\";\r\nexport {MemoryCache} from \"./services/memory-cache\";\r\nexport {MongoConnector} from \"./services/mongo-connector\";\r\nexport {Progresses} from \"./services/progresses\";\r\nexport {TemplateRenderer} from \"./services/template-renderer\";\r\nexport {TranslationProvider} from \"./services/translation-provider\";\r\nexport {Translator} from \"./services/translator\";\r\nexport {UserManager} from \"./services/user-manager\";\r\n\r\nexport {AuthController} from \"./rest-controllers/auth.controller\";\r\nexport {GalleryController} from \"./rest-controllers/gallery.controller\";\r\n\r\nexport {ErrorHandlerMiddleware} from \"./rest-middlewares/error-handler.middleware\";\r\nexport {LanguageMiddleware} from \"./rest-middlewares/language.middleware\";\r\n\r\nexport {LazyAssetGenerator} from \"./utilities/lazy-asset-generator\";\r\n\r\nasync function resolveUser(container: DependencyContainer, req: IRequest): Promise<IUser> {\r\n if (req.user) return req.user;\r\n const auth = req.header(\"Authorization\") || \"\";\r\n let payload = null;\r\n try {\r\n const config = container.resolve(Configuration);\r\n payload = verify(auth.split(\" \")[1], config.resolve(\"jwtSecret\")) as any;\r\n } catch (e) {\r\n throw new HttpError(401, `Authentication failed. (${e.message})`);\r\n }\r\n if (!payload) {\r\n throw new HttpError(401, `Authentication failed. (Maybe invalid token)`);\r\n }\r\n req.user = await container.resolve(UserManager).getById(payload.id);\r\n return req.user;\r\n}\r\n\r\nexport function createServices(): IDependencyContainer {\r\n // List of parameters\r\n const params = [\r\n new Parameter(\"templatesDir\", join(__dirname, \"templates\")),\r\n new Parameter(\"galleryDir\", join(__dirname, \"gallery\")),\r\n new Parameter(\"cacheDir\", join(__dirname, \"cache\")),\r\n new Parameter(\"defaultLanguage\", \"en\"),\r\n new Parameter(\"smtpHost\", \"smtp.sendgrid.net\"),\r\n new Parameter(\"smtpPort\", 587),\r\n new Parameter(\"smtpUser\", \"apikey\"),\r\n new Parameter(\"smtpPassword\", \"\"),\r\n new Parameter(\"mailSenderAddress\", \"info@stemy.hu\"),\r\n new Parameter(\"translationsTemplate\", \"https://translation.service/[lang]\"),\r\n new Parameter(\"jwtSecret\", \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9\"),\r\n new Parameter(\"mongoUri\", \"\"),\r\n new Parameter(\"mongoDb\", \"node-backend\"),\r\n new Parameter(\"mongoUser\", null),\r\n new Parameter(\"mongoPassword\", null),\r\n new Parameter(\"nodeEnv\", \"production\"),\r\n new Parameter(\"appPort\", 80),\r\n new Parameter(\"zmqPort\", 3000),\r\n new Parameter(\"zmqBackPort\", 3100),\r\n new Parameter(\"zmqRemoteHost\", \"tcp://127.0.0.1\"),\r\n new Parameter(\"isWorker\", false),\r\n new Parameter(\"mainEndpoint\", \"\"),\r\n new Parameter(\"idChars\", \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"),\r\n new Parameter(\"idSeparator\", \"-\"),\r\n new Parameter(\"idPrefix\", \"ID-\"),\r\n new Parameter(\"idParts\", [4, 4]),\r\n new Parameter(\"jsonLimit\", \"250mb\"),\r\n new Parameter(\"jobTimeout\", 5 * 60 * 1000),\r\n new Parameter(\"cacheCollection\", \"cache\"),\r\n ];\r\n\r\n // Convert parameters to providers\r\n const paramProviders = params.map(p => {\r\n return {\r\n provide: PARAMETER,\r\n useValue: p\r\n }\r\n });\r\n\r\n // List of services\r\n const services = [\r\n AssetProcessor,\r\n AssetResolver,\r\n Assets,\r\n BackendProvider,\r\n Cache,\r\n CacheProcessor,\r\n Configuration,\r\n EndpointProvider,\r\n Fixtures,\r\n Gallery,\r\n GalleryCache,\r\n IdGenerator,\r\n JobManager,\r\n LazyAssets,\r\n MailSender,\r\n MemoryCache,\r\n MongoConnector,\r\n Progresses,\r\n TemplateRenderer,\r\n TranslationProvider,\r\n Translator,\r\n UserManager\r\n ] as Type<any>[];\r\n\r\n // Create container\r\n const diContainer = new DiContainer(container.createChildContainer());\r\n paramProviders.forEach(provider => {\r\n diContainer.register(provider.provide, provider);\r\n });\r\n services.forEach(service => {\r\n if (!container.isRegistered(service))\r\n diContainer.register(service, service);\r\n });\r\n return diContainer;\r\n}\r\n\r\nexport async function setupBackend(config: IBackendConfig, providers?: Provider<any>[], parent?: IDependencyContainer): Promise<IDependencyContainer> {\r\n\r\n providers = Array.isArray(providers) ? providers : [];\r\n parent = parent || createServices();\r\n\r\n // Create fixtures\r\n const fixtureTypes = (config.fixtures || []);\r\n const fixtureProviders = fixtureTypes.map(fixture => {\r\n return {\r\n provide: FIXTURE,\r\n useClass: fixture\r\n };\r\n });\r\n\r\n // Create params\r\n const paramProviders = (config.params || []).map(p => {\r\n return {\r\n provide: PARAMETER,\r\n useValue: p\r\n }\r\n });\r\n\r\n // Create jobs\r\n const jobProviders = (config.jobs || []).map(jobType => {\r\n return {\r\n provide: JOB,\r\n useValue: jobType\r\n };\r\n });\r\n\r\n // Setup rest API\r\n const restOptions = config.restOptions || {};\r\n restOptions.defaultErrorHandler = false;\r\n restOptions.cors = Object.assign({\r\n credentials: true,\r\n exposedHeaders: [\"content-disposition\"],\r\n origin: (origin, callback) => {\r\n callback(null, true);\r\n }\r\n }, restOptions.cors || {});\r\n restOptions.routePrefix = config.routePrefix || \"/api\";\r\n restOptions.routePrefix = restOptions.routePrefix == \"/\" ? \"\" : restOptions.routePrefix;\r\n restOptions.middlewares = [ErrorHandlerMiddleware, ContainerMiddleware, LanguageMiddleware, RequestStartedMiddleware, RequestEndedMiddleware]\r\n .concat(restOptions.middlewares as any || []);\r\n restOptions.controllers = [AssetsController, AuthController, GalleryController, ProgressesController]\r\n .concat(restOptions.controllers as any || []);\r\n\r\n // Setup socket API\r\n const socketOptions = config.socketOptions || {};\r\n socketOptions.middlewares = [CompressionMiddleware].concat(socketOptions.middlewares as any || []);\r\n socketOptions.controllers = [ProgressController].concat(socketOptions.controllers as any || []);\r\n\r\n // Create providers\r\n\r\n const allProviders: Provider<any>[] = [];\r\n\r\n // Add multi tokens to sub container\r\n [PARAMETER].forEach(provide => {\r\n const values = parent.resolveAll(provide);\r\n values.forEach(useValue => {\r\n allProviders.push({provide, useValue});\r\n });\r\n });\r\n\r\n // Add other providers\r\n allProviders.push(\r\n ...fixtureTypes,\r\n ...fixtureProviders,\r\n ...paramProviders,\r\n ...jobProviders,\r\n ...restOptions.middlewares as Type<any>[],\r\n ...restOptions.controllers as Type<any>[],\r\n ...socketOptions.middlewares as Type<any>[],\r\n ...socketOptions.controllers as Type<any>[],\r\n ...providers,\r\n {\r\n provide: EXPRESS,\r\n useFactory: (container: DependencyContainer) => {\r\n return container.resolve(BackendProvider).express;\r\n }\r\n },\r\n {\r\n provide: HTTP_SERVER,\r\n useFactory: (container: DependencyContainer) => {\r\n return container.resolve(BackendProvider).server;\r\n }\r\n },\r\n {\r\n provide: SOCKET_SERVER,\r\n useFactory: (container: DependencyContainer) => {\r\n return container.resolve(BackendProvider).io;\r\n }\r\n }\r\n )\r\n\r\n // Create DI container\r\n\r\n const diContainer = parent.createChildContainer();\r\n\r\n allProviders.forEach(provider => {\r\n if (isType(provider)) {\r\n if (container.isRegistered(provider)) return;\r\n diContainer.register(provider, provider);\r\n return;\r\n }\r\n diContainer.register(provider.provide, provider as any);\r\n });\r\n\r\n diContainer.register(DI_CONTAINER, {\r\n useValue: diContainer\r\n });\r\n\r\n diContainers.appContainer = diContainers.appContainer || diContainer;\r\n\r\n // Authentication\r\n restOptions.authorizationChecker = async (action: Action, roles: any[]) => {\r\n const user = await resolveUser(diContainer, action.request);\r\n if (!user) {\r\n throw new HttpError(401, \"Authentication failed. (User can't be found.)\");\r\n }\r\n const userRoles = Array.isArray(user.roles) ? user.roles : [];\r\n if (Array.isArray(roles) && roles.length > 0) {\r\n let lastError = null;\r\n for (let role of roles) {\r\n if (isFunction(role)) {\r\n try {\r\n if (await valueToPromise(role(user, action))) {\r\n return true;\r\n }\r\n } catch (e) {\r\n lastError = e;\r\n }\r\n }\r\n if (userRoles.indexOf(role) >= 0) return true;\r\n }\r\n const error = !lastError || (!lastError.message && !isString(lastError))\r\n ? \"User doesn't have access to this resource\"\r\n : lastError.message || lastError;\r\n throw new HttpError(401, `Authentication failed. (${error})`);\r\n }\r\n return true;\r\n };\r\n restOptions.currentUserChecker = async (action: Action) => {\r\n return resolveUser(diContainer, action.request);\r\n };\r\n\r\n // Final setup\r\n const configuration = diContainer.resolve(Configuration);\r\n const bp = diContainer.resolve(BackendProvider);\r\n\r\n if (config.restOptions) {\r\n bp.express.use(json({\r\n limit: configuration.hasParam(\"jsonLimit\")\r\n ? configuration.resolve(\"jsonLimit\")\r\n : \"250mb\"\r\n }));\r\n useRoutingContainer(diContainer);\r\n useExpressServer(bp.express, restOptions);\r\n // Setup rest ai docs\r\n bp.express.get(\"/api-docs\", (req, res) => {\r\n res.status(200).end(getApiDocs(config.customValidation));\r\n });\r\n }\r\n if (config.socketOptions) {\r\n useSocketContainer(diContainer);\r\n useSocketServer(bp.io, socketOptions);\r\n }\r\n\r\n // Connect to mongo if necessary\r\n if (configuration.hasParam(\"mongoUri\") && configuration.resolve(\"mongoUri\")) {\r\n console.log(\"Connecting to MongoDB...\");\r\n const connector = diContainer.resolve(MongoConnector);\r\n await connector.connect();\r\n console.log(\"Successfully connected to MongoDB.\");\r\n }\r\n\r\n await setupStatic(config.rootFolder, diContainer);\r\n\r\n return diContainer;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["sharp","getMongoValue","setMongoValue","fsReadFile","fsWriteFile","__awaiter","execChildProcess","__decorate","__param","__metadata","filter","uuidv4","readFile","writeFile","Middleware","serveStatic","useRoutingContainer","useSocketContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stemy-backend.js","sources":["../../src/utils.ts","../../src/validators.ts","../../src/rest-openapi.ts","../../src/common-types.ts","../../src/services/asset-processor.ts","../../src/services/configuration.ts","../../src/services/mongo-connector.ts","../../src/services/entities/base-entity.ts","../../src/services/entities/asset.ts","../../src/services/entities/temp-asset.ts","../../src/services/assets.ts","../../src/services/entities/lazy-asset.ts","../../src/services/job-manager.ts","../../src/services/entities/progress.ts","../../src/services/progresses.ts","../../src/services/lazy-assets.ts","../../src/services/asset-resolver.ts","../../src/services/backend-provider.ts","../../src/services/cache-processor.ts","../../src/services/cache.ts","../../src/services/endpoint-provider.ts","../../src/services/fixtures.ts","../../src/services/gallery-image.ts","../../src/services/gallery-cache.ts","../../src/services/gallery.ts","../../src/services/id-generator.ts","../../src/services/translation-provider.ts","../../src/services/translator.ts","../../src/services/template-renderer.ts","../../src/services/mail-sender.ts","../../src/services/memory-cache.ts","../../src/services/user-manager.ts","../../src/rest-controllers/assets.controller.ts","../../src/rest-controllers/auth.controller.ts","../../src/rest-controllers/gallery.controller.ts","../../src/rest-controllers/progresses.controller.ts","../../src/rest-middlewares/error-handler.middleware.ts","../../src/rest-middlewares/container.middleware.ts","../../src/rest-middlewares/language.middleware.ts","../../src/rest-middlewares/request-ended.middleware.ts","../../src/rest-middlewares/request-started.middleware.ts","../../src/socket-controllers/progress.controller.ts","../../src/socket-middlewares/compression.middleware.ts","../../src/utilities/tree.ts","../../src/utilities/di-container.ts","../../src/static.ts","../../src/utilities/lazy-asset-generator.ts","../../src/public_api.ts","../../src/stemy-backend.ts"],"sourcesContent":["import {exec as execChildProcess} from \"child_process\";\r\nimport {createHash} from \"crypto\";\r\nimport {InjectionToken, DependencyContainer} from \"tsyringe\";\r\nimport {from, Observable, Subject, Subscription} from \"rxjs\";\r\nimport {canReportError} from \"rxjs/internal/util/canReportError\";\r\nimport {Server} from \"socket.io\";\r\nimport {mkdir, readFile as fsReadFile, unlink, writeFile as fsWriteFile} from \"fs\";\r\nimport {basename, dirname} from \"path\";\r\nimport {GridFSBucket} from \"mongodb\";\r\nimport {Document, DocumentQuery, FilterQuery, Model, model, Schema, Types} from \"mongoose\";\r\nimport {getValue as getMongoValue, setValue as setMongoValue} from \"mongoose/lib/utils\";\r\nimport {PassThrough, Readable, ReadableOptions} from \"stream\";\r\nimport {ObjectId} from \"bson\";\r\nimport sharp_, {Region} from \"sharp\";\r\nimport {Action, BadRequestError, createParamDecorator, HttpError} from \"routing-controllers\";\r\nimport {\r\n IAssetCropInfo, IAssetImageParams,\r\n IAssetMeta,\r\n IClientSocket,\r\n IPaginationBase,\r\n IPaginationParams,\r\n IRequest,\r\n Type\r\n} from \"./common-types\";\r\n\r\nconst sharp = sharp_;\r\n\r\nexport interface IDIContainers {\r\n appContainer: DependencyContainer\r\n}\r\n\r\nexport const diContainers: IDIContainers = {\r\n appContainer: null\r\n};\r\n\r\nexport type FilterPredicate = (value: any, key?: any, target?: any, source?: any) => boolean;\r\n\r\nexport function isNullOrUndefined(value: any): boolean {\r\n return value == null || typeof value == \"undefined\";\r\n}\r\n\r\nexport function isDefined(value: any): boolean {\r\n return !isNullOrUndefined(value);\r\n}\r\n\r\nexport function getType(obj: any): string {\r\n const regex = new RegExp(\"\\\\s([a-zA-Z]+)\");\r\n return Object.prototype.toString.call(obj).match(regex)[1].toLowerCase();\r\n}\r\n\r\nexport function isObject(value: any): boolean {\r\n return getType(value) == \"object\";\r\n}\r\n\r\nexport function isArray(value: any): value is Array<any> {\r\n return Array.isArray(value);\r\n}\r\n\r\nexport function isBoolean(value: any): value is boolean {\r\n return typeof value === \"boolean\";\r\n}\r\n\r\nexport function isDate(value: any): value is Date {\r\n return !!value && value[Symbol.toPrimitive] && !isNaN(value) && \"undefined\" !== typeof value.getDate;\r\n}\r\n\r\nexport function isPrimitive(value: any): boolean {\r\n const type = typeof value;\r\n return value == null || (type !== \"object\" && type !== \"function\");\r\n}\r\n\r\nexport function isString(value: any): value is string {\r\n return typeof value === \"string\";\r\n}\r\n\r\nexport function isFunction(value: any): value is Function {\r\n return typeof value === \"function\";\r\n}\r\n\r\nexport function isConstructor(value: any): boolean {\r\n return (value && typeof value === \"function\" && value.prototype && value.prototype.constructor) === value && value.name !== \"Object\";\r\n}\r\n\r\nexport function isType(value: any): value is Type<any> {\r\n return isConstructor(value);\r\n}\r\n\r\nexport function isInterface(obj: any, interFaceObject: { [key: string]: string }): boolean {\r\n if (!obj || typeof obj !== \"object\" || isArray(obj) || !isObject(interFaceObject)) return false;\r\n const keys = Object.keys(interFaceObject);\r\n for (const key of keys) {\r\n let type = interFaceObject[key] || \"\";\r\n if (type.startsWith(\"*\")) {\r\n type = type.substr(1);\r\n if (obj.hasOwnProperty(key) && getType(obj[key]) !== type) return false;\r\n } else if (!obj.hasOwnProperty(key) || getType(obj[key]) !== type) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function ucFirst(value: string): string {\r\n if (!value) return \"\";\r\n return value[0].toUpperCase() + value.substr(1);\r\n}\r\n\r\nexport function lcFirst(value: string): string {\r\n if (!value) return \"\";\r\n return value[0].toLowerCase() + value.substr(1);\r\n}\r\n\r\nexport function isObjectId(id: string): boolean {\r\n return typeof id === \"string\" && id.length == 24 && !isNaN(Number(\"0x\" + id));\r\n}\r\n\r\nexport function firstItem<T>(value: T[]): T {\r\n return value[0];\r\n}\r\n\r\nexport function lastItem<T>(value: T[]): T {\r\n return value[value.length - 1];\r\n}\r\n\r\nexport function regroup<T>(value: T[], comparator: (a: T, b: T) => boolean): Array<T[]> {\r\n const result: Array<T[]> = [];\r\n if (!isArray(value) || value.length == 0) return result;\r\n value = Array.from(value);\r\n result.push([value.shift()]);\r\n value.forEach(item => {\r\n const group = result.find(g => g.some(a => comparator(a, item)));\r\n if (group) {\r\n group.push(item);\r\n return;\r\n }\r\n result.push([item]);\r\n });\r\n return result;\r\n}\r\n\r\nexport function uniqueItems<T>(value: T[]): T[] {\r\n return value.filter((v, ix) => value.indexOf(v) === ix);\r\n}\r\n\r\nexport function getValue(obj: any, key: string, defaultValue?: any, treeFallback: boolean = false): any {\r\n key = key || \"\";\r\n const keys = key.split(\".\");\r\n let curKey = \"\";\r\n do {\r\n curKey += keys.shift();\r\n if (isDefined(obj) && isDefined(obj[curKey]) && (typeof obj[curKey] === \"object\" || !keys.length)) {\r\n obj = obj[curKey];\r\n curKey = \"\";\r\n } else if (!keys.length) {\r\n defaultValue = typeof defaultValue == \"undefined\" ? key.replace(new RegExp(`${curKey}$`), `{${curKey}}`) : defaultValue;\r\n obj = treeFallback ? obj || defaultValue : defaultValue;\r\n } else {\r\n curKey += \".\";\r\n }\r\n } while (keys.length);\r\n return obj;\r\n}\r\n\r\nexport function groupBy<T>(items: T[], cb: (item: T) => string) {\r\n return items.reduce((res, item) => {\r\n const group = cb(item);\r\n res[group] = res[group] || [];\r\n res[group].push(item);\r\n return res;\r\n }, {});\r\n}\r\n\r\nexport function convertValue(value: any, type: string): any {\r\n switch (type) {\r\n case \"boolean\":\r\n value = typeof value == \"string\" ? value.toLowerCase() : value;\r\n return (value == \"no\" || value == \"false\" || value == \"0\") ? false : !!value;\r\n case \"number\":\r\n const val = parseFloat(value);\r\n return isNaN(val) ? 0 : val;\r\n case \"array\":\r\n try {\r\n return JSON.parse(value);\r\n } catch (e) {\r\n return `${value}`.split(\", \");\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nexport function injectServices(schema: Schema<any>, services: { [prop: string]: InjectionToken<any> }) {\r\n const serviceMap: { [prop: string]: any } = {};\r\n Object.keys(services).forEach(prop => {\r\n schema\r\n .virtual(prop)\r\n .get(() => {\r\n const diContainer = diContainers.appContainer;\r\n serviceMap[prop] = serviceMap[prop] || (!diContainer ? {} : diContainer.resolve(services[prop]));\r\n return serviceMap[prop];\r\n });\r\n });\r\n}\r\n\r\nexport function paginate<T extends Document>(model: Model<T>, where: FilterQuery<T>, params: IPaginationParams): Promise<IPaginationBase<T>> {\r\n return model.countDocuments(where).then(count => {\r\n let query = model.find(where);\r\n if (isString(params.sort)) {\r\n query = query.sort(params.sort);\r\n }\r\n if (isArray(params.populate)) {\r\n params.populate.forEach(field => {\r\n query = query.populate(field);\r\n });\r\n }\r\n return (params.limit > 0 ? query.skip(params.page * params.limit).limit(params.limit) : query).then(items => {\r\n const meta = {total: count};\r\n return {count, items, meta};\r\n });\r\n });\r\n}\r\n\r\nexport function lookupStages(from: string, localField: string, as: string = null, foreignField: string = \"_id\", shouldUnwind: boolean = true): any[] {\r\n as = as || localField.replace(\"Id\", \"\");\r\n const pipelines: any[] = [\r\n {\r\n $lookup: {\r\n from,\r\n localField,\r\n foreignField,\r\n as\r\n }\r\n }\r\n ];\r\n if (shouldUnwind) {\r\n pipelines.push({\r\n $unwind: {\r\n path: `$${as}`,\r\n preserveNullAndEmptyArrays: true\r\n }\r\n })\r\n }\r\n return pipelines;\r\n}\r\n\r\nexport function letsLookupStage(from: string, pipeline: any[], as: string = null, letFields: any = null) {\r\n as = as || from;\r\n letFields = letFields || {id: \"$_id\"};\r\n return {\r\n $lookup: {\r\n from,\r\n let: letFields,\r\n pipeline,\r\n as\r\n }\r\n };\r\n}\r\n\r\nexport function hydratePopulated<T extends Document>(modelType: Model<T>, json: any): T {\r\n let object = modelType.hydrate(json);\r\n\r\n for (const [path, obj] of Object.entries(modelType.schema.obj)) {\r\n let {ref, type} = obj as any;\r\n if (Array.isArray(type) && type.length > 0) {\r\n ref = type[0].ref;\r\n }\r\n if (!ref) continue;\r\n const value = getMongoValue(path, json);\r\n const hydrateVal = val => {\r\n if (val == null || val instanceof Types.ObjectId) return val;\r\n return hydratePopulated(model(ref), val);\r\n };\r\n if (Array.isArray(value)) {\r\n setMongoValue(path, value.map(hydrateVal), object);\r\n continue;\r\n }\r\n setMongoValue(path, hydrateVal(value), object);\r\n }\r\n\r\n return object;\r\n\r\n}\r\n\r\nexport async function paginateAggregations<T extends Document>(model: Model<T>, aggregations: any[], params: IPaginationParams, metaProjection: any = {}): Promise<IPaginationBase<T>> {\r\n const sortField = !isString(params.sort) || !params.sort ? null : (params.sort.startsWith(\"-\") ? params.sort.substr(1) : params.sort);\r\n const sortAggregation = !sortField ? [] : [{\r\n $sort: {[sortField]: sortField == params.sort ? 1 : -1}\r\n }];\r\n const result = await model.aggregate([\r\n ...aggregations,\r\n ...sortAggregation,\r\n {\r\n $group: {\r\n _id: \"results\",\r\n result: {$push: \"$$CURRENT\"}\r\n }\r\n },\r\n {\r\n $project: {\r\n _id: 0,\r\n items: params.limit > 0 ? {$slice: [\"$result\", params.page * params.limit, params.limit]} : \"$result\",\r\n count: {$size: \"$result\"},\r\n meta: {\r\n total: {$size: \"$result\"},\r\n ...metaProjection\r\n }\r\n }\r\n }\r\n ]);\r\n const pagination = result[0] as IPaginationBase<T>;\r\n if (!pagination) {\r\n return {items: [], count: 0, meta: {total: 0}};\r\n }\r\n pagination.items = pagination.items.map(i => hydratePopulated(model, i));\r\n return pagination;\r\n}\r\n\r\nconst cropInterface = {\r\n x: \"number\",\r\n y: \"number\",\r\n w: \"number\",\r\n h: \"number\"\r\n};\r\n\r\nfunction toCropRegion(cropInfo: string | IAssetCropInfo): Region {\r\n let crop = cropInfo as IAssetCropInfo;\r\n if (isString(cropInfo)) {\r\n try {\r\n crop = JSON.parse(cropInfo as string);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n if (!isInterface(crop, cropInterface)) return null;\r\n return {\r\n width: Math.round(crop.w),\r\n height: Math.round(crop.h),\r\n top: Math.round(crop.y),\r\n left: Math.round(crop.x)\r\n };\r\n}\r\n\r\nexport async function toImage<T = Buffer | Readable>(src: T, params?: IAssetImageParams, meta?: IAssetMeta): Promise<T> {\r\n\r\n // Default params and meta\r\n params = params || {};\r\n meta = meta || {};\r\n\r\n // Get default crop info\r\n const crop = toCropRegion(meta.crop);\r\n\r\n // Return the src if there are no params and no default crop exists\r\n if (meta.extension === \"svg\" || (Object.keys(params).length == 0 && !crop)) {\r\n return src;\r\n }\r\n\r\n // Parse params\r\n params.rotation = isNaN(params.rotation) ? 0 : Math.round(params.rotation / 90) * 90;\r\n params.canvasScaleX = isNaN(params.canvasScaleX) ? 1 : Number(params.canvasScaleX);\r\n params.canvasScaleY = isNaN(params.canvasScaleY) ? 1 : Number(params.canvasScaleY);\r\n params.scaleX = isNaN(params.scaleX) ? 1 : Number(params.scaleX);\r\n params.scaleY = isNaN(params.scaleY) ? 1 : Number(params.scaleY);\r\n params.crop = isBoolean(params.crop) ? params.crop : params.crop == \"true\";\r\n\r\n let buffer = src instanceof Readable ? await streamToBuffer(src) : src as any;\r\n try {\r\n // Get crop info\r\n const cropBefore = toCropRegion(params.cropBefore || (params.crop ? meta.cropBefore : null));\r\n const cropAfter = toCropRegion(params.cropAfter || (params.crop ? meta.cropAfter : null));\r\n // Get metadata\r\n let img = sharp(buffer);\r\n let {width, height} = await img.metadata();\r\n // Crop before resize\r\n if (cropBefore) {\r\n width = cropBefore.width;\r\n height = cropBefore.height;\r\n img = img.extract(cropBefore);\r\n } else if (crop) {\r\n width = crop.width;\r\n height = crop.height;\r\n img = img.extract(crop);\r\n }\r\n // Resize canvas\r\n const canvasScaleX = meta?.canvasScaleX || 1;\r\n const canvasScaleY = meta?.canvasScaleY || 1;\r\n if (params.canvasScaleX !== canvasScaleX || params.canvasScaleY !== canvasScaleY) {\r\n width = Math.round(width * params.canvasScaleX);\r\n height = Math.round(height * params.canvasScaleY);\r\n img = img.resize({width, height, background: \"#00000000\", fit: \"contain\"});\r\n }\r\n // Resize image\r\n if (params.scaleX !== 1 || params.scaleY !== 1) {\r\n width = Math.round(width * params.scaleX);\r\n height = Math.round(height * params.scaleY);\r\n img = img.resize({width, height, background: \"#00000000\", fit: \"fill\"});\r\n }\r\n // Crop after resize\r\n if (cropAfter) {\r\n img = img.extract(cropAfter);\r\n }\r\n // Rotate\r\n if (params.rotation !== 0) {\r\n buffer = await img.toBuffer();\r\n img = sharp(buffer).rotate(params.rotation);\r\n }\r\n buffer = await img.toBuffer();\r\n src = src instanceof Readable ? bufferToStream(buffer) : buffer;\r\n return src;\r\n } catch (e) {\r\n console.log(\"Image conversion error\", e);\r\n src = src instanceof Readable ? bufferToStream(buffer) : buffer;\r\n return src;\r\n }\r\n}\r\n\r\nexport function bufferToStream(buffer: Buffer): Readable {\r\n const readStream = new PassThrough();\r\n readStream.end(buffer);\r\n return readStream\r\n}\r\n\r\nexport function streamToBuffer(stream: Readable): Promise<Buffer> {\r\n return new Promise<Buffer>((resolve, reject) => {\r\n const concat = [];\r\n stream.on(\"data\", data => {\r\n concat.push(data);\r\n });\r\n stream.on(\"error\", reject);\r\n stream.on(\"end\", () => resolve(Buffer.concat(concat)));\r\n })\r\n}\r\n\r\nclass ReadableStreamClone extends Readable {\r\n\r\n constructor(readableStream: Readable, opts?: ReadableOptions) {\r\n super(opts);\r\n readableStream?.on(\"data\", chunk => {\r\n this.push(chunk);\r\n });\r\n readableStream?.on(\"end\", () => {\r\n this.push(null);\r\n });\r\n readableStream?.on(\"error\", err => {\r\n this.emit(\"error\", err);\r\n });\r\n }\r\n\r\n _read(size: number) {\r\n\r\n }\r\n}\r\n\r\nexport function copyStream(stream: Readable, opts?: ReadableOptions): Readable {\r\n return new ReadableStreamClone(stream, opts);\r\n}\r\n\r\nexport function mkdirRecursive(path: string, mode: number = null): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n mkdir(path, {mode: mode || 0o777, recursive: true}, err => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve();\r\n });\r\n });\r\n}\r\n\r\nexport function deleteFile(path: string): Promise<any> {\r\n return new Promise<Buffer>((resolve, reject) => {\r\n unlink(path, err => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve();\r\n });\r\n });\r\n}\r\n\r\nexport function readFile(path: string): Promise<Buffer> {\r\n return new Promise<Buffer>((res, rej) => {\r\n fsReadFile(path, (err, data) => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n}\r\n\r\nexport async function readAndDeleteFile(path: string, timeout: number = 5000): Promise<Buffer> {\r\n const data = await readFile(path);\r\n setTimeout(() => {\r\n unlink(path, () => {\r\n });\r\n }, timeout);\r\n return data;\r\n}\r\n\r\nexport async function writeFile(path: string, data: Buffer): Promise<Buffer> {\r\n await mkdirRecursive(dirname(path));\r\n return new Promise<Buffer>((res, rej) => {\r\n fsWriteFile(path, data, err => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n}\r\n\r\nexport function valueToPromise(value: any): Promise<any> {\r\n return value instanceof Promise ? value : Promise.resolve(value);\r\n}\r\n\r\nexport function promiseTimeout(timeout: number = 1000, error: boolean = false): Promise<string> {\r\n return new Promise<any>((resolve, reject) => {\r\n setTimeout(() => {\r\n if (error) {\r\n reject(`Timeout exceeded: ${timeout}ms`);\r\n return;\r\n }\r\n resolve(`Timeout: ${timeout}ms`);\r\n }, timeout);\r\n });\r\n}\r\n\r\nexport function getConstructorName(type: Type<any>): string {\r\n return type.prototype.constructor.name;\r\n}\r\n\r\nexport function getFunctionParams(func: Function): string[] {\r\n // Remove comments of the form /* ... */\r\n // Removing comments of the form //\r\n // Remove body of the function { ... }\r\n // removing \"=>\" if func is arrow function\r\n const str = func.toString()\r\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\r\n .replace(/\\/\\/(.)*/g, \"\")\r\n .replace(/{[\\s\\S]*}/, \"\")\r\n .replace(/=>/g, \"\")\r\n .trim();\r\n\r\n // Start parameter names after first \"(\"\r\n const start = str.indexOf(\"(\") + 1;\r\n\r\n // End parameter names is just before last \")\"\r\n const end = str.length - 1;\r\n const result = str.substring(start, end).split(\", \");\r\n const params = [];\r\n\r\n result.forEach(element => {\r\n\r\n // Removing any default value\r\n element = element.replace(/=[\\s\\S]*/g, \"\").trim();\r\n\r\n if (element.length > 0)\r\n params.push(element);\r\n });\r\n\r\n return params;\r\n}\r\n\r\nexport function proxyFunction(name: string): Function {\r\n return function () {\r\n const args = Array.from(arguments);\r\n args.unshift(this);\r\n return (this.helper[name] as Function).apply(this.helper, args);\r\n }\r\n}\r\n\r\nexport function proxyFunctions(schema: Schema, helper: Type<any>, paramName: string = null): void {\r\n paramName = paramName || lcFirst(getConstructorName(helper)).replace(/helper$/gi, \"\");\r\n const descriptors = Object.getOwnPropertyDescriptors(helper.prototype);\r\n Object.keys(descriptors).forEach(name => {\r\n const func = descriptors[name].value;\r\n if (isFunction(func) && name !== \"constructor\") {\r\n const paramNames = getFunctionParams(func);\r\n if (paramNames[0] == paramName) {\r\n schema.methods[name] = proxyFunction(name);\r\n }\r\n }\r\n });\r\n injectServices(schema, {\r\n \"helper\": helper\r\n });\r\n}\r\n\r\nexport function ResolveEntity<T extends Document>(model: Model<T>, extraCheck?: (query: DocumentQuery<T, any>, action: Action) => T | Promise<T>): ParameterDecorator {\r\n const modelName = model.modelName;\r\n const paramName = modelName.toLowerCase();\r\n return createParamDecorator({\r\n required: false,\r\n value: async action => {\r\n const req = action.request as IRequest;\r\n const token = req.header(`x-${paramName}-token`);\r\n const id = req.params[`${paramName}Id`] as string;\r\n if (!id && !token) {\r\n throw new BadRequestError(`${modelName} id or token should be defined!`);\r\n }\r\n const query = !token\r\n ? model.findById(id)\r\n : model.findOne({token} as any);\r\n const doc = await query;\r\n if (!doc) {\r\n throw new HttpError(404, !token\r\n ? `${modelName} could not be found with id: ${id}`\r\n : `${modelName} could not be found with token: ${token}`);\r\n }\r\n if (isFunction(extraCheck)) {\r\n try {\r\n action.request[paramName] = await valueToPromise(extraCheck(query, action)) || doc;\r\n return action.request[paramName];\r\n } catch (e) {\r\n throw new BadRequestError(`${modelName} check error: ${e.message || e}`);\r\n }\r\n }\r\n action.request[paramName] = doc;\r\n return doc;\r\n }\r\n });\r\n}\r\n\r\nexport function getFileName(path: string, withExtension: boolean = false): string {\r\n const name = basename(path || \"\");\r\n return withExtension ? name : name.split(\".\").slice(0, -1).join(\".\");\r\n}\r\n\r\nexport function getExtension(path: string): string {\r\n const name = basename(path || \"\");\r\n return name.split(\".\").pop();\r\n}\r\n\r\nexport function idToString(value: any): any {\r\n if (Array.isArray(value)) {\r\n return value.map(idToString);\r\n }\r\n return value instanceof ObjectId ? value.toHexString() : null;\r\n}\r\n\r\nexport function createTransformer(transform?: (doc: Document, ret: any, options?: any) => any) {\r\n return (doc: Document, ret: any, options?: any) => {\r\n ret.id = idToString(ret.id) || ret.id;\r\n if (doc._id) {\r\n ret._id = idToString(doc._id);\r\n ret.id = ret.id || ret._id;\r\n }\r\n delete ret.__v;\r\n return isFunction(transform) ? transform(doc, ret, options) || ret : ret;\r\n };\r\n}\r\n\r\nexport function broadcast(socketServer: Server, cb: (client: IClientSocket) => void): void {\r\n Array.from(Object.values(socketServer.sockets.sockets)).forEach(cb);\r\n}\r\n\r\nexport function rand(min: number, max: number): number {\r\n return Math.round(random(min, max));\r\n}\r\n\r\nexport function random(min: number, max: number): number {\r\n return min + Math.random() * (max - min);\r\n}\r\n\r\nexport function multiSubscription(...subscriptions: Subscription[]): Subscription {\r\n return new Subscription(() => {\r\n subscriptions.forEach(s => {\r\n s.unsubscribe();\r\n });\r\n });\r\n}\r\n\r\nexport function observableFromFunction(callbackFunc: () => any): Observable<any> {\r\n let subject: any;\r\n return new Observable<any>((subscriber) => {\r\n if (!subject) {\r\n subject = new Subject();\r\n try {\r\n subject = from(callbackFunc());\r\n } catch (err) {\r\n if (canReportError(subject)) {\r\n subject.error(err);\r\n } else {\r\n console.warn(err);\r\n }\r\n }\r\n }\r\n return subject.subscribe(subscriber);\r\n });\r\n}\r\n\r\nexport function padLeft(value: any, count: number = 3, padWith: string = \"0\"): string {\r\n return `${value}`.padStart(count, padWith);\r\n}\r\n\r\nexport function padRight(value: any, count: number = 3, padWith: string = \"0\"): string {\r\n return `${value}`.padEnd(count, padWith);\r\n}\r\n\r\nexport function deleteFromBucket(bucket: GridFSBucket, fileId: ObjectId): Promise<string> {\r\n return new Promise<string>(((resolve, reject) => {\r\n bucket.delete(fileId, error => {\r\n let err = error as any;\r\n if (error) {\r\n err = error.message || error || \"\";\r\n if (!isString(err) || !err.startsWith(\"FileNotFound\")) {\r\n reject(err);\r\n return;\r\n }\r\n }\r\n resolve(fileId.toHexString());\r\n });\r\n }));\r\n}\r\n\r\nconst defaultPredicate: FilterPredicate = () => true;\r\n\r\nfunction copyRecursive(target: any, source: any, predicate?: FilterPredicate): any {\r\n predicate = predicate || defaultPredicate;\r\n if (isPrimitive(source) || isDate(source) || isFunction(source)) return source;\r\n if (isArray(source)) {\r\n target = isArray(target) ? Array.from(target) : [];\r\n source.forEach((item, index) => {\r\n if (!predicate(item, index, target, source)) return;\r\n if (target.length > index)\r\n target[index] = copyRecursive(target[index], item, predicate);\r\n else\r\n target.push(copyRecursive(null, item, predicate));\r\n });\r\n return target;\r\n }\r\n const shouldCopy = isFunction(source.__shouldCopy) ? source.__shouldCopy : () => true;\r\n if (isConstructor(source.constructor)) {\r\n if (source.__shouldCopy === false) return source;\r\n if (!target) {\r\n try {\r\n target = new source.constructor();\r\n } catch (e) {\r\n const proto = source.constructor.prototype || source.prototype;\r\n target = Object.create(proto);\r\n }\r\n }\r\n } else {\r\n target = Object.assign({}, target || {});\r\n }\r\n // Copy map entries\r\n if (target instanceof Map) {\r\n if (source instanceof Map) {\r\n for (let [key, value] of source.entries()) {\r\n if (!predicate(value, key, target, source)) continue;\r\n target.set(key, !shouldCopy(key, value) ? value : copyRecursive(target.get(key), value, predicate));\r\n }\r\n }\r\n return target;\r\n }\r\n\r\n // Copy object members\r\n let keys = Object.keys(source);\r\n target = keys.reduce((result, key) => {\r\n if (!predicate(source[key], key, result, source)) return result;\r\n result[key] = !shouldCopy(key, source[key]) ? source[key] : copyRecursive(result[key], source[key], predicate);\r\n return result;\r\n }, target);\r\n\r\n // Copy object properties\r\n const descriptors = Object.getOwnPropertyDescriptors(source);\r\n keys = Object.keys(descriptors).filter(k => keys.indexOf(k) < 0);\r\n keys.forEach(key => {\r\n Object.defineProperty(target, key, descriptors[key]);\r\n });\r\n return target;\r\n}\r\n\r\nexport function filter<T>(obj: T, predicate: FilterPredicate): Partial<T> {\r\n return copyRecursive(null, obj, predicate);\r\n}\r\n\r\nexport function copy<T>(obj: T): T {\r\n return copyRecursive(null, obj);\r\n}\r\n\r\nexport function assign<T>(target: T, source: any, predicate?: FilterPredicate): T {\r\n return copyRecursive(target, source, predicate);\r\n}\r\n\r\nexport function md5(data: any): string {\r\n if (isObject(data)) {\r\n data = JSON.stringify(data);\r\n }\r\n if (!isString(data)) {\r\n throw `Can't md5 other that raw object or string`;\r\n }\r\n return createHash(\"md5\").update(data).digest(\"hex\");\r\n}\r\n\r\nexport function runCommand(scriptPath: string, expectedCode: number = 0): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const cp = execChildProcess(scriptPath, (error, stdout) => {\r\n if (error && expectedCode !== error.code) {\r\n console.log(error);\r\n reject(error);\r\n return;\r\n }\r\n const lines = (stdout || \"\").split(\"\\n\");\r\n let line = null;\r\n while (!line && lines.length > 0) {\r\n line = lines.pop();\r\n }\r\n resolve(line);\r\n });\r\n cp.stdout.on(\"data\", function (data) {\r\n console.log(data.toString());\r\n });\r\n cp.stderr.on(\"data\", function (data) {\r\n console.error(data.toString());\r\n });\r\n });\r\n}\r\n\r\nexport enum ConsoleColor {\r\n Reset = \"\\x1b[0m\",\r\n Bright = \"\\x1b[1m\",\r\n Dim = \"\\x1b[2m\",\r\n Underscore = \"\\x1b[4m\",\r\n Blink = \"\\x1b[5m\",\r\n Reverse = \"\\x1b[7m\",\r\n Hidden = \"\\x1b[8m\",\r\n\r\n FgBlack = \"\\x1b[30m\",\r\n FgRed = \"\\x1b[31m\",\r\n FgGreen = \"\\x1b[32m\",\r\n FgYellow = \"\\x1b[33m\",\r\n FgBlue = \"\\x1b[34m\",\r\n FgMagenta = \"\\x1b[35m\",\r\n FgCyan = \"\\x1b[36m\",\r\n FgWhite = \"\\x1b[37m\",\r\n FgDefault = \"\\x1b[38m\",\r\n\r\n BgBlack = \"\\x1b[40m\",\r\n BgRed = \"\\x1b[41m\",\r\n BgGreen = \"\\x1b[42m\",\r\n BgYellow = \"\\x1b[43m\",\r\n BgBlue = \"\\x1b[44m\",\r\n BgMagenta = \"\\x1b[45m\",\r\n BgCyan = \"\\x1b[46m\",\r\n BgWhite = \"\\x1b[47m\",\r\n BgDefault = \"\\x1b[48m\"\r\n}\r\n\r\nexport interface IJsonColors {\r\n keyColor?: ConsoleColor;\r\n numberColor?: ConsoleColor;\r\n stringColor?: ConsoleColor;\r\n trueColor?: ConsoleColor;\r\n falseColor?: ConsoleColor;\r\n nullColor?: ConsoleColor;\r\n}\r\n\r\nconst defaultColors: IJsonColors = {\r\n keyColor: ConsoleColor.FgWhite,\r\n numberColor: ConsoleColor.FgBlue,\r\n stringColor: ConsoleColor.FgYellow,\r\n trueColor: ConsoleColor.FgGreen,\r\n falseColor: ConsoleColor.FgRed,\r\n nullColor: ConsoleColor.BgMagenta\r\n}\r\n\r\nexport function colorize(input: any, color: ConsoleColor): string {\r\n return `${color}${input}${ConsoleColor.Reset}`;\r\n}\r\n\r\nexport function jsonHighlight(input: string | object, colorOptions?: IJsonColors): string {\r\n const colors = Object.assign({}, defaultColors, colorOptions)\r\n const json = (isString(input) ? input : JSON.stringify(input, null, 2)).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\r\n return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+]?\\d+)?)/g, (match) => {\r\n let color = colors.numberColor\r\n if (/^\"/.test(match)) {\r\n if (/:$/.test(match)) {\r\n color = colors.keyColor\r\n } else {\r\n color = colors.stringColor;\r\n match = '\"' + match.substr(1, match.length - 2) + '\"';\r\n }\r\n } else {\r\n color = /true/.test(match)\r\n ? colors.trueColor\r\n : /false/.test(match)\r\n ? colors.falseColor\r\n : /null/.test(match)\r\n ? colors.nullColor\r\n : color\r\n }\r\n return `${color}${match}${ConsoleColor.Reset}`\r\n })\r\n}\r\n\r\nexport function replaceSpecialChars(str: string, to: string = \"-\"): string {\r\n return `${str}`.replace(/[&\\/\\\\#, +()$~%.@'\":*?<>{}]/g, to);\r\n}\r\n","import {ValidationArguments, ValidatorConstraint, ValidatorConstraintInterface} from \"class-validator\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nfunction checkValue(multi: boolean, value: any): boolean {\r\n if (multi) {\r\n return Array.isArray(value) && value.every(v => {\r\n try {\r\n const id = new ObjectId(v);\r\n return id instanceof ObjectId;\r\n } catch (e) {\r\n return false;\r\n }\r\n });\r\n }\r\n if (null === value) return true;\r\n try {\r\n const id = new ObjectId(value);\r\n return id instanceof ObjectId;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\n@ValidatorConstraint()\r\nexport class IsFile implements ValidatorConstraintInterface {\r\n validate(value: any, validationArguments: ValidationArguments) {\r\n const [multi] = (validationArguments.constraints || []);\r\n return checkValue(multi, value);\r\n }\r\n}\r\n\r\n@ValidatorConstraint()\r\nexport class IsObjectId implements ValidatorConstraintInterface {\r\n validate(value: any, validationArguments: ValidationArguments) {\r\n const [_, multi] = (validationArguments.constraints || []);\r\n return checkValue(multi, value);\r\n }\r\n}\r\n","import {getMetadataArgsStorage} from \"routing-controllers\";\r\nimport {routingControllersToSpec} from \"routing-controllers-openapi\";\r\nimport {OpenAPIObject, SchemaObject} from \"openapi3-ts\";\r\nimport {defaultMetadataStorage} from \"class-transformer/storage\";\r\nimport {ValidationTypes} from \"class-validator\"\r\nimport {validationMetadatasToSchemas} from \"class-validator-jsonschema\"\r\nimport {SchemaConverter} from \"./common-types\";\r\nimport {isFunction} from \"./utils\";\r\nimport {IsFile, IsObjectId} from \"./validators\";\r\n\r\nlet apiDocs: string = null;\r\n\r\nexport function getApiDocs(customValidation: SchemaConverter | SchemaObject): string {\r\n if (apiDocs) return apiDocs;\r\n const storage = getMetadataArgsStorage();\r\n const spec: OpenAPIObject = routingControllersToSpec(storage);\r\n spec.basePath = \"/api/\";\r\n spec.definitions = validationMetadatasToSchemas({\r\n classTransformerMetadataStorage: defaultMetadataStorage,\r\n additionalConverters: {\r\n [ValidationTypes.CUSTOM_VALIDATION]: (meta, options) => {\r\n const res = isFunction(customValidation) ? customValidation(meta, options) : customValidation;\r\n if (!!res) return res;\r\n const constraints = meta.constraints || [];\r\n if (meta.constraintCls === IsFile) {\r\n return {\r\n multi: constraints[0] || false,\r\n type: \"file\"\r\n }\r\n }\r\n if (meta.constraintCls === IsObjectId) {\r\n return {\r\n endpoint: constraints[0] || false,\r\n multi: constraints[1] || false,\r\n type: \"list\"\r\n }\r\n }\r\n return null;\r\n }\r\n }\r\n });\r\n spec.components.schemas = spec.definitions;\r\n apiDocs = JSON.stringify(spec);\r\n return apiDocs;\r\n}\r\n","import {Server} from \"http\";\r\nimport {Request, Express} from \"express\";\r\nimport {Socket, Server as SocketServer} from \"socket.io\";\r\nimport {RoutingControllersOptions} from \"routing-controllers\";\r\nimport {SocketControllersOptions} from \"socket-controllers\";\r\nimport {\r\n ClassProvider,\r\n DependencyContainer,\r\n InjectionToken,\r\n TokenProvider,\r\n ValueProvider,\r\n RegistrationOptions\r\n} from \"tsyringe\";\r\nimport {SchemaObject} from \"openapi3-ts\";\r\nimport {Readable} from \"stream\";\r\nimport {Moment} from \"moment\";\r\n\r\n// --- DI functions ---\r\n\r\nexport const Type = Function;\r\n\r\nexport interface Type<T = object> extends Function {\r\n new (...args: any[]): T;\r\n}\r\n\r\nexport interface FactoryProvider<T> {\r\n useFactory: (dc: IDependencyContainer) => T;\r\n}\r\n\r\nexport interface ITree {\r\n readonly path: string;\r\n resolveService(): any;\r\n resolveLeaves(): Map<string, ITree>;\r\n resolveServices(): Map<string, any>;\r\n resolveAncestor(path: string): ITree;\r\n resolvePath(path: string, throwError?: boolean): ITree;\r\n}\r\n\r\nexport interface IDependencyContainer extends DependencyContainer {\r\n readonly parent: IDependencyContainer;\r\n readonly tree: ITree;\r\n readonly registeredTokens: ReadonlyArray<InjectionToken>;\r\n createChildContainer(): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: ValueProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: FactoryProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: TokenProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: ClassProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: Type<T>, options?: RegistrationOptions): IDependencyContainer;\r\n registerSingleton<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer;\r\n registerSingleton<T>(token: Type<T>): IDependencyContainer;\r\n registerType<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer;\r\n registerInstance<T>(token: InjectionToken<T>, instance: T): IDependencyContainer;\r\n get<T>(token: InjectionToken<T>): T;\r\n}\r\n\r\nexport interface ClassBasedProvider<T> extends ClassProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport interface ValueBasedProvider<T> extends ValueProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport interface FactoryBasedProvider<T> extends FactoryProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport interface TokenBasedProvider<T> extends TokenProvider<T> {\r\n provide: InjectionToken;\r\n}\r\n\r\nexport type SyringeProvider<T> = Type<T> | ClassProvider<T> | ValueProvider<T> | FactoryProvider<T> | TokenProvider<T>;\r\n\r\nexport type Provider<T> = Type<T> | ClassBasedProvider<T> | ValueBasedProvider<T> | FactoryBasedProvider<T> | TokenBasedProvider<T>;\r\n\r\n// --- Injection tokens ---\r\n\r\nexport const FIXTURE: InjectionToken<IFixture> = Symbol.for(\"fixture-token\");\r\n\r\nexport const JOB: InjectionToken<IJob> = Symbol.for(\"job-token\");\r\n\r\nexport const EXPRESS: InjectionToken<Express> = Symbol.for(\"express-token\");\r\n\r\nexport const HTTP_SERVER: InjectionToken<Server> = Symbol.for(\"http-server-token\");\r\n\r\nexport const SOCKET_SERVER: InjectionToken<SocketServer> = Symbol.for(\"socket-server-token\");\r\n\r\nexport const PARAMETER: InjectionToken<Parameter> = Symbol.for(\"parameter-token\");\r\n\r\nexport const DI_CONTAINER: InjectionToken<IDependencyContainer> = Symbol.for(\"di-container-token\");\r\n\r\n// --- Interfaces and utility classes ---\r\n\r\nexport interface IFixture {\r\n load(): Promise<any>;\r\n}\r\n\r\nexport type SchemaConverter = (\r\n meta: any,\r\n options: any\r\n) => SchemaObject;\r\n\r\nexport type ParamResolver = (value: string) => any;\r\n\r\nexport class Parameter {\r\n\r\n constructor(readonly name: string, public defaultValue: any, public resolver: ParamResolver = null) {\r\n\r\n }\r\n}\r\n\r\nexport type SocketParam = string | number | boolean | SocketParams;\r\n\r\nexport type SocketParams = {\r\n [name: string]: SocketParam | Array<SocketParam>;\r\n};\r\n\r\nexport type JobParams = SocketParams;\r\n\r\nexport interface ISocketMessage {\r\n message: string;\r\n params: SocketParams;\r\n}\r\n\r\nexport interface IMessageBridge {\r\n sendMessage(message: string, params?: SocketParams): void;\r\n}\r\n\r\nexport interface IJob {\r\n process(messaging?: IMessageBridge): Promise<any>;\r\n}\r\n\r\nexport interface IJobTask {\r\n start: () => this;\r\n stop: () => this;\r\n destroy: () => void;\r\n getStatus: () => string;\r\n}\r\n\r\nexport interface JobScheduleRange {\r\n min: number;\r\n max: number;\r\n}\r\n\r\nexport type JobScheduleTime = string | number | JobScheduleRange | Array<string | number>;\r\n\r\nexport interface IProgress {\r\n id: string;\r\n current: number;\r\n max: number;\r\n message: string;\r\n error: string;\r\n canceled: boolean;\r\n percent: number;\r\n remaining: number;\r\n setMessageBridge(messageBridge: IMessageBridge): this;\r\n createSubProgress(progressValue: number, max?: number, message?: string): Promise<IProgress>;\r\n setMax(max: number): Promise<any>;\r\n setMessage(message: string): Promise<any>;\r\n setError(error: string): Promise<any>;\r\n advance(value?: number): Promise<any>;\r\n cancel(): Promise<any>;\r\n save(): Promise<any>;\r\n load(): Promise<this>;\r\n toJSON(): any;\r\n}\r\n\r\nexport interface IAssetCropInfo {\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n}\r\n\r\nexport interface IAssetMeta {\r\n filename?: string;\r\n extension?: string;\r\n classified?: boolean;\r\n downloadCount?: number;\r\n firstDownload?: Date;\r\n lastDownload?: Date;\r\n crop?: IAssetCropInfo;\r\n cropBefore?: IAssetCropInfo;\r\n cropAfter?: IAssetCropInfo;\r\n canvasScaleX?: number;\r\n canvasScaleY?: number;\r\n [prop: string]: any;\r\n}\r\n\r\nexport interface IAssetImageParams {\r\n rotation?: number;\r\n canvasScaleX?: number;\r\n canvasScaleY?: number;\r\n scaleX?: number;\r\n scaleY?: number;\r\n lazy?: boolean;\r\n crop?: string | boolean;\r\n cropBefore?: string | IAssetCropInfo;\r\n cropAfter?: string | IAssetCropInfo;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IAsset {\r\n readonly id: string;\r\n readonly filename: string;\r\n readonly contentType: string;\r\n readonly metadata: IAssetMeta;\r\n readonly stream: Readable;\r\n unlink(): Promise<string>;\r\n getBuffer(): Promise<Buffer>;\r\n download(metadata?: IAssetMeta): Promise<Readable>;\r\n downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable>;\r\n getImage(params?: IAssetImageParams): Promise<Readable>;\r\n save(): Promise<any>;\r\n load(): Promise<this>;\r\n toJSON(): any;\r\n}\r\n\r\nexport interface ILazyAsset {\r\n id: string;\r\n jobName: string;\r\n jobParams: any;\r\n jobQue: string;\r\n progressId?: string;\r\n assetId?: string;\r\n unlink(): Promise<string>;\r\n startWorking(): void;\r\n loadAsset(): Promise<IAsset>;\r\n writeAsset(asset: IAsset): Promise<IAsset>;\r\n save(): Promise<any>;\r\n load(): Promise<this>;\r\n toJSON(): any;\r\n}\r\n\r\nexport interface IUser {\r\n _id?: string;\r\n id?: string;\r\n email: string;\r\n password: string;\r\n roles: string[];\r\n}\r\n\r\nexport interface IClientSocket extends Socket {\r\n interestedProgresses: Set<string>;\r\n}\r\n\r\nexport interface IRequestBase<T> extends Request {\r\n id?: string;\r\n started?: Moment;\r\n ended?: Moment;\r\n container?: DependencyContainer;\r\n language?: string;\r\n user?: T;\r\n}\r\n\r\nexport interface IRequest extends IRequestBase<IUser> {\r\n\r\n}\r\n\r\nexport interface IGalleryImage {\r\n folder: string;\r\n thumb: string;\r\n big: string;\r\n serve(id: string): Promise<Buffer>\r\n}\r\n\r\nexport interface IGallerySize {\r\n width?: number;\r\n height?: number;\r\n}\r\n\r\nexport interface IGalleryImageHandler {\r\n getOriginal(): Promise<Buffer>;\r\n writeResult(isThumb: boolean, buffer: Buffer): Promise<any>;\r\n hasResult(isThumb: boolean): Promise<boolean>;\r\n serveResult(isThumb: boolean): Promise<Buffer>;\r\n}\r\n\r\nexport interface ITranslations {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IPaginationMeta {\r\n total: number;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IPaginationBase<T> {\r\n count: number\r\n items: T[];\r\n meta?: IPaginationMeta;\r\n}\r\n\r\nexport interface IPagination extends IPaginationBase<any> {\r\n\r\n}\r\n\r\nexport interface IPaginationParams {\r\n page: number;\r\n limit: number;\r\n sort?: string;\r\n populate?: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport type FontFormat = \"opentype\" | \"truetype\" | \"woff\" | \"woff2\" | \"datafork\";\r\n\r\nexport interface IFileType {\r\n ext: string;\r\n mime: string;\r\n}\r\n\r\nexport interface IBackendConfig {\r\n rootFolder?: string;\r\n routePrefix?: string;\r\n params?: Parameter[];\r\n fixtures?: Type<IFixture>[];\r\n jobs?: Type<IJob>[];\r\n restOptions?: RoutingControllersOptions;\r\n socketOptions?: SocketControllersOptions;\r\n customValidation?: SchemaConverter | SchemaObject;\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport fontKit_, {Font} from \"fontkit\";\r\nimport {fromBuffer} from \"file-type\";\r\nimport sharp_ from \"sharp\";\r\nimport {FontFormat, IAssetMeta, IFileType} from \"../common-types\";\r\n\r\nconst sharp = sharp_;\r\nconst fontKit = fontKit_;\r\n\r\nconst fontTypes = [\r\n \"application/font-woff\", \"application/font-woff2\", \"application/x-font-opentype\", \"application/x-font-truetype\", \"application/x-font-datafork\",\r\n \"font/woff\", \"font/woff2\", \"font/otf\", \"font/ttf\", \"font/datafork\"\r\n];\r\n\r\nconst imageTypes = [\"image/jpeg\", \"image/jpg\", \"image/png\", \"image/svg+xml\"];\r\n\r\nconst fontProps = [\r\n \"postscriptName\", \"fullName\", \"familyName\", \"subfamilyName\",\r\n \"copyright\", \"version\", \"unitsPerEm\", \"ascent\", \"descent\", \"lineGap\",\r\n \"underlinePosition\", \"underlineThickness\", \"italicAngle\", \"capHeight\",\r\n \"xHeight\", \"numGlyphs\", \"characterSet\", \"availableFeatures\"\r\n];\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class AssetProcessor {\r\n\r\n private static checkTextFileType(type: IFileType): boolean {\r\n return type.mime.indexOf(\"text\") >= 0 || type.mime.indexOf(\"xml\") >= 0;\r\n }\r\n\r\n private static fixTextFileType(type: IFileType, buffer: Buffer): IFileType {\r\n const text = buffer.toString(\"utf8\");\r\n if (text.indexOf(\"<svg\") >= 0) {\r\n return {ext: \"svg\", mime: \"image/svg+xml\"};\r\n }\r\n return type;\r\n }\r\n\r\n static async fileTypeFromBuffer(buffer: Buffer): Promise<IFileType> {\r\n const type = (await fromBuffer(buffer) ?? {ext: \"txt\", mime: \"text/plain\"}) as IFileType;\r\n if (AssetProcessor.checkTextFileType(type)) {\r\n return AssetProcessor.fixTextFileType(type, buffer);\r\n }\r\n return type;\r\n }\r\n\r\n static extractFontFormat(font: Font): FontFormat {\r\n const name: string = font.constructor.name;\r\n const tag: string = font[\"directory\"].tag;\r\n switch (name) {\r\n case \"TTFFont\":\r\n return tag === \"OTTO\" ? \"opentype\" : \"truetype\";\r\n case \"WOFF2Font\":\r\n return \"woff2\";\r\n case \"WOFFFont\":\r\n return \"woff\";\r\n case \"DFont\":\r\n return \"datafork\";\r\n }\r\n return null;\r\n }\r\n\r\n static isImage(contentType: string): boolean {\r\n return imageTypes.indexOf(contentType) >= 0;\r\n }\r\n\r\n static async copyImageMeta(buffer: Buffer, metadata: IAssetMeta, fileType: IFileType): Promise<Buffer> {\r\n if (fileType.mime === \"image/svg+xml\") {\r\n const match = /<svg([^<>]+)>/gi.exec(buffer.toString(\"utf8\"));\r\n if (match && match.length > 1) {\r\n const attrs = match[1].match(/([a-z]+)=\"([^\"]+)\"/gi);\r\n attrs.forEach(attr => {\r\n if (attr.length < 5) return;\r\n const [name, value] = attr.split(\"=\");\r\n const val = value.replace(/\"/gi, \"\") as any;\r\n metadata[name] = isNaN(val) ? val : Number(val);\r\n });\r\n if (metadata.viewBox && (isNaN(metadata.width) || isNaN(metadata.height))) {\r\n const parts = (metadata.viewBox as string).split(\" \");\r\n metadata.width = Number(parts[0]) + Number(parts[2]);\r\n metadata.height = Number(parts[1]) + Number(parts[3]);\r\n }\r\n if (!isNaN(metadata.width) && !isNaN(metadata.height)) {\r\n metadata.svgSize = {x: metadata.width, y: metadata.height};\r\n }\r\n }\r\n return buffer;\r\n }\r\n const output = await sharp(buffer).rotate().toBuffer({resolveWithObject: true});\r\n Object.assign(metadata, output.info);\r\n return output.data;\r\n }\r\n\r\n static isFont(contentType: string): boolean {\r\n return fontTypes.indexOf(contentType) >= 0;\r\n }\r\n\r\n static copyFontMeta(buffer: Buffer, metadata: IAssetMeta): void {\r\n const font: Font = fontKit.create(buffer);\r\n metadata.format = AssetProcessor.extractFontFormat(font);\r\n fontProps.forEach(prop => {\r\n metadata[prop] = font[prop];\r\n });\r\n }\r\n\r\n async process(buffer: Buffer, metadata: IAssetMeta, fileType: IFileType): Promise<Buffer> {\r\n if (AssetProcessor.isImage(fileType.mime)) {\r\n buffer = await AssetProcessor.copyImageMeta(buffer, metadata, fileType);\r\n }\r\n if (AssetProcessor.isFont(fileType.mime)) {\r\n AssetProcessor.copyFontMeta(buffer, metadata);\r\n }\r\n return buffer;\r\n }\r\n}\r\n","import {injectable, injectAll, scoped, Lifecycle} from \"tsyringe\";\r\nimport {PARAMETER, Parameter} from \"../common-types\";\r\nimport {convertValue, getType, isFunction} from \"../utils\";\r\nimport dotenv from \"dotenv\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Configuration {\r\n\r\n protected paramMap: {[name: string]: Parameter};\r\n\r\n constructor(@injectAll(PARAMETER) params: Parameter[]) {\r\n dotenv.config();\r\n this.paramMap = {};\r\n (params || []).forEach(param => this.add(param));\r\n }\r\n\r\n protected add(param: Parameter): void {\r\n const existingParam = this.paramMap[param.name] || param;\r\n existingParam.defaultValue = param.defaultValue;\r\n existingParam.resolver = param.resolver || existingParam.resolver;\r\n this.paramMap[param.name] = existingParam;\r\n }\r\n\r\n hasParam(name: string): boolean {\r\n return !!this.paramMap[name];\r\n }\r\n\r\n resolve(name: string): any {\r\n const param = this.paramMap[name];\r\n if (!param) throw new Error(`Parameter with name: '${name}' does not exists in configuration`);\r\n const envName = param.name.replace(/\\.?([A-Z|0-9]+)/g, function (x,y){\r\n return \"_\" + y.toLowerCase()\r\n }).replace(/\\./gi, \"_\").replace(/^_/, \"\").toUpperCase();\r\n const envValue = process.env[envName];\r\n if (typeof envValue !== \"undefined\") {\r\n const value = isFunction(param.resolver)\r\n ? param.resolver(envValue)\r\n : convertValue(envValue, getType(param.defaultValue));\r\n console.log(`Processing param value`, name, envName, envValue, value);\r\n return value;\r\n }\r\n return param.defaultValue;\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {Db, GridFSBucket} from \"mongodb\";\r\nimport {connect, Connection} from \"mongoose\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class MongoConnector {\r\n\r\n get connection(): Connection {\r\n return this.conn;\r\n }\r\n\r\n get database(): Db {\r\n return this.db;\r\n }\r\n\r\n get bucket(): GridFSBucket {\r\n return this.fsBucket;\r\n }\r\n\r\n protected conn: Connection;\r\n protected db: Db;\r\n protected fsBucket: GridFSBucket;\r\n\r\n constructor(readonly configuration: Configuration) {\r\n this.conn = null;\r\n this.db = null;\r\n this.fsBucket = null;\r\n }\r\n\r\n async connect(): Promise<Db> {\r\n if (this.db) return this.db;\r\n this.conn = (await connect(this.configuration.resolve(\"mongoUri\"), {\r\n dbName: this.configuration.resolve(\"mongoDb\"),\r\n user: this.configuration.resolve(\"mongoUser\"),\r\n pass: this.configuration.resolve(\"mongoPassword\"),\r\n useNewUrlParser: true,\r\n useUnifiedTopology: true\r\n })).connection;\r\n this.db = this.conn.db;\r\n this.fsBucket = new GridFSBucket(this.db, {bucketName: \"assets\"});\r\n }\r\n}\r\n","import {Collection} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nexport class BaseEntity<T> {\r\n\r\n get id(): string {\r\n return this.mId.toHexString();\r\n }\r\n\r\n protected deleted: boolean;\r\n\r\n constructor(readonly mId: ObjectId,\r\n protected data: Partial<T>,\r\n protected collection: Collection) {\r\n }\r\n\r\n save(): Promise<any> {\r\n return this.collection.updateOne({_id: this.mId}, {$set: this.toJSON()});\r\n }\r\n\r\n async load(): Promise<this> {\r\n const res = await this.collection.findOne({_id: this.mId});\r\n this.deleted = !res;\r\n this.data = res || {};\r\n return this;\r\n }\r\n\r\n toJSON(): any {\r\n const ret = Object.assign({}, this.data) as any;\r\n delete ret._id;\r\n ret.id = this.id;\r\n return ret;\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {Collection, GridFSBucket} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nimport {IAsset, IAssetImageParams, IAssetMeta} from \"../../common-types\";\r\nimport {deleteFromBucket, streamToBuffer, toImage} from \"../../utils\";\r\nimport {BaseEntity} from \"./base-entity\";\r\n\r\nexport class Asset extends BaseEntity<IAsset> implements IAsset {\r\n\r\n get filename(): string {\r\n return this.data.filename;\r\n }\r\n\r\n get contentType(): string {\r\n return this.data.contentType;\r\n }\r\n\r\n get metadata(): IAssetMeta {\r\n return this.data.metadata;\r\n }\r\n\r\n get stream(): Readable {\r\n return this.bucket.openDownloadStream(this.mId);\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<IAsset>,\r\n collection: Collection,\r\n protected bucket: GridFSBucket) {\r\n super(id, data, collection);\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n return deleteFromBucket(this.bucket, this.mId);\r\n }\r\n\r\n getBuffer(): Promise<Buffer> {\r\n return streamToBuffer(this.stream);\r\n }\r\n\r\n async download(metadata?: IAssetMeta): Promise<Readable> {\r\n metadata = Object.assign(this.metadata, metadata || {});\r\n metadata.downloadCount = isNaN(metadata.downloadCount) || !metadata.firstDownload\r\n ? 1\r\n : metadata.downloadCount + 1;\r\n metadata.firstDownload = metadata.firstDownload || new Date();\r\n metadata.lastDownload = new Date();\r\n await this.collection.updateOne({_id: this.mId}, {$set: {metadata}});\r\n return this.stream;\r\n }\r\n\r\n async getImage(params: IAssetImageParams = null): Promise<Readable> {\r\n return toImage(this.stream, params, this.metadata);\r\n }\r\n\r\n async downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable> {\r\n return toImage(await this.download(metadata), params, this.metadata);\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {ObjectId} from \"bson\";\r\nimport {IAsset, IAssetImageParams, IAssetMeta} from \"../../common-types\";\r\nimport {bufferToStream, toImage} from \"../../utils\";\r\n\r\nexport class TempAsset implements IAsset {\r\n\r\n readonly id: string;\r\n\r\n get stream(): Readable {\r\n return bufferToStream(this.buffer);\r\n }\r\n\r\n constructor(protected buffer: Buffer, readonly filename: string, readonly contentType: string, readonly metadata: IAssetMeta) {\r\n this.id = new ObjectId().toHexString();\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n throw new Error(`Temp asset '${this.id}' can not be removed!`);\r\n }\r\n\r\n async getBuffer(): Promise<Buffer> {\r\n return this.buffer;\r\n }\r\n\r\n async download(metadata?: IAssetMeta): Promise<Readable> {\r\n return this.stream;\r\n }\r\n\r\n downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable> {\r\n Object.assign(this.metadata, metadata || {});\r\n return toImage(this.stream, params, this.metadata);\r\n }\r\n\r\n getImage(params?: IAssetImageParams): Promise<Readable> {\r\n return this.downloadImage(params);\r\n }\r\n\r\n async save(): Promise<any> {\r\n return this;\r\n }\r\n\r\n async load(): Promise<this> {\r\n return this;\r\n }\r\n\r\n toJSON(): any {\r\n return {\r\n id: this.id,\r\n filename: this.filename,\r\n contentType: this.contentType,\r\n metadata: this.metadata\r\n };\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Readable} from \"stream\";\r\nimport {ObjectId} from \"bson\";\r\nimport {Collection, GridFSBucket} from \"mongodb\";\r\nimport {FilterQuery} from \"mongoose\";\r\nimport axios from \"axios\";\r\n\r\nimport {bufferToStream, copyStream, streamToBuffer} from \"../utils\";\r\nimport {IAsset, IAssetMeta, IFileType} from \"../common-types\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {AssetProcessor} from \"./asset-processor\";\r\nimport {Asset} from \"./entities/asset\";\r\nimport {TempAsset} from \"./entities/temp-asset\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Assets {\r\n\r\n readonly bucket: GridFSBucket;\r\n readonly collection: Collection;\r\n\r\n constructor(readonly connector: MongoConnector, readonly assetProcessor: AssetProcessor) {\r\n this.bucket = connector.bucket;\r\n this.collection = connector.database?.collection(\"assets.files\");\r\n }\r\n\r\n async write(stream: Readable, contentType: string = null, metadata: IAssetMeta = null): Promise<IAsset> {\r\n const uploadStream = copyStream(stream);\r\n const buffer = await streamToBuffer(stream);\r\n let fileType = {ext: \"\", mime: contentType} as IFileType;\r\n try {\r\n fileType = await AssetProcessor.fileTypeFromBuffer(buffer);\r\n } catch (e) {\r\n if (!fileType.mime) {\r\n throw `Can't determine mime type`;\r\n }\r\n console.log(`Can't determine mime type`, e);\r\n }\r\n metadata = metadata || {};\r\n return this.upload(uploadStream, fileType, metadata);\r\n }\r\n\r\n async writeBuffer(buffer: Buffer, metadata: IAssetMeta = null, contentType: string = null): Promise<IAsset> {\r\n let fileType = {ext: \"\", mime: contentType} as IFileType;\r\n try {\r\n fileType = await AssetProcessor.fileTypeFromBuffer(buffer);\r\n } catch (e) {\r\n if (!fileType.mime) {\r\n throw `Can't determine mime type`;\r\n }\r\n console.log(`Can't determine mime type`, e);\r\n }\r\n metadata = metadata || {};\r\n buffer = await this.assetProcessor.process(buffer, metadata, fileType);\r\n return this.upload(bufferToStream(buffer), fileType, metadata);\r\n }\r\n\r\n async writeUrl(url: string, metadata: IAssetMeta = null): Promise<IAsset> {\r\n const buffer = (await axios({ url, responseType: \"arraybuffer\" })).data as Buffer;\r\n return this.writeBuffer(buffer, metadata);\r\n }\r\n\r\n async download(url: string, contentType: string = null): Promise<IAsset> {\r\n let buffer = (await axios({ url, responseType: \"arraybuffer\" })).data as Buffer;\r\n let fileType = {ext: \"\", mime: contentType} as IFileType;\r\n try {\r\n fileType = await AssetProcessor.fileTypeFromBuffer(buffer);\r\n } catch (e) {\r\n if (!fileType.mime) {\r\n throw `Can't determine mime type`;\r\n }\r\n console.log(`Can't determine mime type`, e);\r\n }\r\n const metadata: IAssetMeta = {\r\n filename: url,\r\n extension: (fileType.ext || \"\").trim()\r\n };\r\n buffer = await this.assetProcessor.process(buffer, metadata, fileType);\r\n return new TempAsset(buffer, url, fileType.mime, metadata);\r\n }\r\n\r\n async read(id: string): Promise<IAsset> {\r\n return !id ? null : this.find({_id: new ObjectId(id)});\r\n }\r\n\r\n async find(where: FilterQuery<IAsset>): Promise<IAsset> {\r\n const data = await this.collection.findOne(where);\r\n return !data ? null : new Asset(data._id, data, this.collection, this.bucket);\r\n }\r\n\r\n async findMany(where: FilterQuery<IAsset>): Promise<ReadonlyArray<IAsset>> {\r\n const cursor = this.collection.find(where);\r\n const items = await cursor.toArray() || [];\r\n const result: IAsset[] = [];\r\n for (let item of items) {\r\n if (!item) continue;\r\n result.push(new Asset(item._id, item, this.collection, this.bucket));\r\n }\r\n return result;\r\n }\r\n\r\n async deleteMany(where: FilterQuery<IAsset>): Promise<ReadonlyArray<string>> {\r\n const assets = await this.findMany(where);\r\n return Promise.all(assets.map(a => a.unlink()));\r\n }\r\n\r\n async unlink(id: string): Promise<any> {\r\n const asset = await this.read(id);\r\n if (!asset) return null;\r\n return asset.unlink();\r\n }\r\n\r\n protected async upload(stream: Readable, fileType: IFileType, metadata: IAssetMeta): Promise<IAsset> {\r\n const contentType = fileType.mime.trim();\r\n metadata = Object.assign({\r\n downloadCount: 0,\r\n firstDownload: null,\r\n lastDownload: null\r\n }, metadata || {});\r\n metadata.filename = metadata.filename || new ObjectId().toHexString();\r\n metadata.extension = (fileType.ext || \"\").trim();\r\n return new Promise<IAsset>(((resolve, reject) => {\r\n const uploaderStream = this.bucket.openUploadStream(metadata.filename);\r\n stream.pipe(uploaderStream)\r\n .on(\"error\", error => {\r\n reject(error.message || error);\r\n })\r\n .on(\"finish\", () => {\r\n const asset = new Asset(uploaderStream.id as ObjectId, {\r\n filename: metadata.filename,\r\n contentType,\r\n metadata\r\n }, this.collection, this.bucket);\r\n asset.save().then(() => {\r\n resolve(asset);\r\n }, error => {\r\n reject(error.message || error);\r\n });\r\n });\r\n }));\r\n }\r\n}\r\n","import {Collection} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nimport {IAsset, ILazyAsset} from \"../../common-types\";\r\nimport {deleteFromBucket} from \"../../utils\";\r\nimport {Assets} from \"../assets\";\r\nimport {Progresses} from \"../progresses\";\r\nimport {BaseEntity} from \"./base-entity\";\r\n\r\nexport class LazyAsset extends BaseEntity<ILazyAsset> implements ILazyAsset {\r\n\r\n get jobName(): string {\r\n return this.data.jobName;\r\n }\r\n\r\n get jobParams(): any {\r\n return this.data.jobParams;\r\n }\r\n\r\n get jobQue(): string {\r\n return this.data.jobQue;\r\n }\r\n\r\n get progressId(): string {\r\n return this.data.progressId;\r\n }\r\n\r\n get assetId(): string {\r\n return this.data.assetId;\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<ILazyAsset>,\r\n collection: Collection,\r\n protected assets: Assets,\r\n protected progresses: Progresses) {\r\n super(id, data, collection);\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n await this.load();\r\n if (!this.progressId) {\r\n await this.collection.deleteOne({_id: this.mId});\r\n }\r\n return deleteFromBucket(this.assets.bucket, new ObjectId(this.assetId));\r\n }\r\n\r\n startWorking(): void {\r\n this.load().then(() => {\r\n if (this.deleted) return;\r\n this.progresses.get(this.progressId).then(p => {\r\n p?.cancel();\r\n });\r\n this.startWorkingOnAsset(false).then(() => {\r\n console.log(`Started working on lazy asset: ${this.id}`);\r\n }).catch(reason => {\r\n console.log(`Can't start working on lazy asset: ${this.id}\\nReason: ${reason}`);\r\n });\r\n });\r\n }\r\n\r\n async loadAsset(): Promise<IAsset> {\r\n await this.load();\r\n if (this.deleted) return null;\r\n if (this.assetId) {\r\n return this.assets.read(this.assetId);\r\n }\r\n if (this.progressId) {\r\n await this.progresses.waitToFinish(this.progressId);\r\n return this.loadAsset();\r\n }\r\n await this.startWorkingOnAsset(true);\r\n return this.loadAsset();\r\n }\r\n\r\n async writeAsset(asset: IAsset): Promise<IAsset> {\r\n this.data.assetId = asset.id;\r\n await this.save();\r\n return asset;\r\n }\r\n\r\n protected async startWorkingOnAsset(fromLoad: boolean): Promise<any> {\r\n this.data.progressId = (await this.progresses.create()).id;\r\n this.data.assetId = null;\r\n await this.save();\r\n await this.progresses.jobMan.enqueueWithName(this.data.jobName, {...this.data.jobParams, lazyId: this.id, fromLoad});\r\n }\r\n}\r\n","import {DependencyContainer, inject, injectable, injectAll, Lifecycle, scoped} from \"tsyringe\";\r\nimport {schedule, validate} from \"node-cron\";\r\nimport {socket, Socket} from \"zeromq\";\r\nimport {Subject, Subscription} from \"rxjs\";\r\nimport {filter, map} from \"rxjs/operators\";\r\nimport {ObjectId} from \"bson\";\r\nimport {\r\n DI_CONTAINER,\r\n IJob,\r\n IJobTask,\r\n IMessageBridge,\r\n ISocketMessage,\r\n JOB,\r\n JobParams,\r\n JobScheduleRange,\r\n JobScheduleTime,\r\n SocketParams,\r\n Type\r\n} from \"../common-types\";\r\nimport {\r\n colorize,\r\n ConsoleColor,\r\n getConstructorName,\r\n getType,\r\n isArray,\r\n isObject,\r\n jsonHighlight,\r\n promiseTimeout\r\n} from \"../utils\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class JobManager {\r\n\r\n protected jobTypes: Type<IJob>[];\r\n protected jobs: { [name: string]: (jobParams: JobParams, uniqueId: string) => Promise<any> };\r\n protected messages: Subject<ISocketMessage>;\r\n protected processing: boolean;\r\n\r\n protected apiPush: Socket;\r\n protected apiPull: Socket;\r\n protected workerPush: Socket;\r\n protected workerPull: Socket;\r\n\r\n readonly maxTimeout: number;\r\n\r\n constructor(readonly config: Configuration, @inject(DI_CONTAINER) readonly container: DependencyContainer, @injectAll(JOB) jobTypes: Type<IJob>[]) {\r\n this.jobTypes = jobTypes || [];\r\n this.jobs = this.jobTypes.reduce((res, jobType) => {\r\n const jobName = getConstructorName(jobType);\r\n res[jobName] = (jobParams: JobParams, uniqueId: string) => {\r\n const job = this.resolveJobInstance(jobType, jobParams, uniqueId);\r\n const messageBridge: IMessageBridge = {\r\n sendMessage: (message: string, params?: SocketParams) => {\r\n params.uniqueId = uniqueId;\r\n this.workerPush.send([message, JSON.stringify(params)]);\r\n }\r\n };\r\n messageBridge.sendMessage(`job-started`, {name: jobName});\r\n return job.process(messageBridge);\r\n }\r\n return res;\r\n }, {});\r\n this.messages = new Subject<ISocketMessage>();\r\n this.processing = false;\r\n this.maxTimeout = this.config.resolve(\"jobTimeout\");\r\n }\r\n\r\n on(message: string, cb: (params: SocketParams) => any): Subscription {\r\n return this.messages\r\n .pipe(filter(t => t.message === message))\r\n .pipe(map(t => t.params)).subscribe(cb);\r\n }\r\n\r\n async process(jobType: Type<IJob>, params: JobParams = {}): Promise<any> {\r\n let instance: IJob = null;\r\n try {\r\n instance = this.resolveJobInstance(jobType, params);\r\n } catch (e) {\r\n const jobName = getConstructorName(jobType);\r\n throw `Can't resolve params for job: ${jobName}, with params: ${JSON.stringify(params)}. Reason: ${e}`;\r\n }\r\n return instance.process();\r\n }\r\n\r\n async enqueueWithName(name: string, params: JobParams = {}): Promise<string> {\r\n return this.sendToWorkers(this.tryResolveFromName(name, params), params);\r\n }\r\n\r\n async enqueue(jobType: Type<IJob>, params: JobParams = {}): Promise<string> {\r\n return this.sendToWorkers(this.tryResolveAndInit(jobType, params), params);\r\n }\r\n\r\n schedule(minute: JobScheduleTime, hour: JobScheduleTime, dayOfMonth: JobScheduleTime, month: JobScheduleTime, dayOfWeek: JobScheduleTime, jobType: Type<IJob>, params: JobParams = {}): IJobTask {\r\n const expression = [minute, hour, dayOfMonth, month, dayOfWeek].map(t => {\r\n if (isObject(t)) {\r\n const range = t as JobScheduleRange;\r\n return `${range.min || 0}-${range.max || 0}`;\r\n }\r\n if (isArray(t)) {\r\n return t.join(\",\");\r\n }\r\n return `${t}`;\r\n }).join(\" \");\r\n const jobName = getConstructorName(jobType);\r\n if (!validate(expression)) {\r\n console.log(`Can't schedule the task: '${jobName}' because time expression is invalid.`);\r\n return null;\r\n }\r\n return schedule(expression, () => {\r\n this.enqueue(jobType, params).catch(e => {\r\n console.log(`Can't enqueue job: '${jobName}' because: ${e}`);\r\n });\r\n });\r\n }\r\n\r\n async startProcessing(): Promise<any> {\r\n if (this.processing) return null;\r\n this.processing = true;\r\n\r\n if (!this.config.resolve(\"isWorker\")) {\r\n console.log(colorize(`Processing can not be started because this is NOT a worker process!`, ConsoleColor.FgRed));\r\n return null;\r\n }\r\n\r\n const host = this.config.resolve(\"zmqRemoteHost\");\r\n const pushHost = `${host}:${this.config.resolve(\"zmqBackPort\")}`;\r\n this.workerPush = socket(\"push\");\r\n await this.workerPush.connect(pushHost);\r\n console.log(`Worker producer connected to: ${pushHost}`);\r\n\r\n const pullHost = `${host}:${this.config.resolve(\"zmqPort\")}`;\r\n this.workerPull = socket(\"pull\");\r\n await this.workerPull.connect(pullHost);\r\n console.log(`Worker consumer connected to: ${pullHost}`);\r\n\r\n this.workerPull.on(\"message\", async (name: Buffer, args: Buffer, uniqId: Buffer) => {\r\n try {\r\n const jobName = name.toString(\"utf8\");\r\n const jobParams = JSON.parse(args.toString(\"utf8\")) as JobParams;\r\n const uniqueId = uniqId?.toString(\"utf8\");\r\n\r\n console.time(uniqueId);\r\n console.timeLog(uniqueId, `Started working on background job: ${colorize(jobName, ConsoleColor.FgCyan)} with args: \\n${jsonHighlight(jobParams)}\\n\\n`);\r\n\r\n try {\r\n await Promise.race([this.jobs[jobName](jobParams, uniqueId), promiseTimeout(this.maxTimeout, true)]);\r\n console.timeLog(uniqueId, `Finished working on background job: ${colorize(jobName, ConsoleColor.FgCyan)}\\n\\n`);\r\n } catch (e) {\r\n console.timeLog(uniqueId, `Background job failed: ${colorize(jobName, ConsoleColor.FgRed)}\\n${e}\\n\\n`);\r\n }\r\n console.timeEnd(uniqueId);\r\n } catch (e) {\r\n console.log(`Failed to start job: ${e.message}`);\r\n }\r\n });\r\n }\r\n\r\n tryResolve(jobType: Type<IJob>, params: JobParams): string {\r\n const jobName = getConstructorName(jobType);\r\n if (!this.jobs[jobName]) {\r\n throw `Can't find job with name: ${jobName} so it can't be enqueued!`;\r\n }\r\n try {\r\n this.resolveJobInstance(jobType, params);\r\n } catch (e) {\r\n throw `Can't resolve params for job: ${jobName}, with params: ${JSON.stringify(params)}. Reason: ${e}`;\r\n }\r\n return jobName;\r\n }\r\n\r\n protected tryResolveFromName(jobName: string, params: JobParams): string {\r\n const jobType = this.jobTypes.find(type => {\r\n return getConstructorName(type) == jobName;\r\n });\r\n if (!jobType) {\r\n throw `Can't find job type with name: ${jobName} so it can't be enqueued!`;\r\n }\r\n return this.tryResolveAndInit(jobType, params);\r\n }\r\n\r\n protected tryResolveAndInit(jobType: Type<IJob>, params: JobParams): string {\r\n if (!this.apiPush) {\r\n const port = this.config.resolve(\"zmqPort\");\r\n this.apiPush = socket(\"push\");\r\n this.apiPush.bind(`tcp://0.0.0.0:${port}`);\r\n console.log(`API producer bound to port: ${port}`);\r\n }\r\n if (!this.apiPull) {\r\n const backPort = this.config.resolve(\"zmqBackPort\");\r\n this.apiPull = socket(\"pull\");\r\n this.apiPull.bind(`tcp://0.0.0.0:${backPort}`);\r\n this.apiPull.on(\"message\", (name: Buffer, args?: Buffer) => {\r\n const message = name.toString(\"utf8\");\r\n const params = JSON.parse(args?.toString(\"utf8\") || \"{}\") as JobParams;\r\n const paramTypes = Object.keys(params).reduce((res, key) => {\r\n res[key] = getType(params[key]);\r\n return res;\r\n }, {});\r\n console.log(`Received a message from worker: \"${colorize(message, ConsoleColor.FgCyan)}\" with args: ${jsonHighlight(paramTypes)}\\n\\n`);\r\n this.messages.next({message, params});\r\n });\r\n console.log(`API consumer bound to port: ${backPort}`);\r\n }\r\n return this.tryResolve(jobType, params);\r\n }\r\n\r\n protected resolveJobInstance(jobType: Type<IJob>, params: JobParams, uniqueId: string = \"\"): IJob {\r\n const container = this.container.createChildContainer();\r\n Object.keys(params).map((name) => {\r\n container.register(name, {useValue: params[name]});\r\n });\r\n container.register(\"uniqueId\", {useValue: uniqueId});\r\n container.register(jobType, jobType);\r\n return container.resolve(jobType) as IJob;\r\n }\r\n\r\n protected async sendToWorkers(jobName: string, params: JobParams): Promise<string> {\r\n const publisher = await this.apiPush;\r\n const uniqueId = new ObjectId().toHexString();\r\n await publisher.send([jobName, JSON.stringify(params), uniqueId]);\r\n return uniqueId;\r\n }\r\n}\r\n","import {ObjectId} from \"bson\";\r\nimport {Collection} from \"mongodb\";\r\nimport {IMessageBridge, IProgress} from \"../../common-types\";\r\nimport {BaseEntity} from \"./base-entity\";\r\n\r\nexport class Progress extends BaseEntity<IProgress> implements IProgress {\r\n\r\n protected messageBridge: IMessageBridge;\r\n\r\n get current(): number {\r\n return this.data.current;\r\n }\r\n\r\n get max(): number {\r\n return this.data.max;\r\n }\r\n\r\n get message(): string {\r\n return this.data.message;\r\n }\r\n\r\n get error(): string {\r\n return this.data.error;\r\n }\r\n\r\n get canceled(): boolean {\r\n return this.data.canceled;\r\n }\r\n\r\n get percent(): number {\r\n return this.max > 0 ? Math.round(this.current / this.max * 100) : 0;\r\n }\r\n\r\n get remaining(): number {\r\n return this.max > 0 ? this.max - this.current : 0;\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<IProgress>,\r\n collection: Collection) {\r\n super(id, data, collection);\r\n }\r\n\r\n setMessageBridge(messageBridge: IMessageBridge): this {\r\n this.messageBridge = messageBridge || this.messageBridge;\r\n return this;\r\n }\r\n\r\n async createSubProgress(progressValue: number, max?: number, message?: string): Promise<IProgress> {\r\n if (max <= 0 && progressValue > 0) {\r\n await this.advance(progressValue);\r\n }\r\n if (message !== null) {\r\n this.data.message = message;\r\n await this.save();\r\n }\r\n return new SubProgress(this, this.current, progressValue, Math.max(max, 1));\r\n }\r\n\r\n async setMax(max: number): Promise<any> {\r\n if (isNaN(max) || max <= 0) {\r\n throw \"Max progress value must be bigger than zero\";\r\n }\r\n this.data.max = max;\r\n await this.save();\r\n }\r\n\r\n async setMessage(message: string): Promise<any> {\r\n this.data.message = message;\r\n await this.save();\r\n }\r\n\r\n async setError(error: string): Promise<any> {\r\n this.data.error = error;\r\n await this.save();\r\n }\r\n\r\n async advance(value: number = 1): Promise<any> {\r\n if (isNaN(value) || value <= 0) {\r\n throw \"Advance value must be bigger than zero\";\r\n }\r\n await this.load();\r\n if (this.deleted || this.canceled) return null;\r\n this.data.current = Math.min(this.max, this.current + value);\r\n await this.save();\r\n }\r\n\r\n async cancel(): Promise<any> {\r\n this.data.canceled = true;\r\n await this.save();\r\n }\r\n\r\n save(): Promise<any> {\r\n if (this.messageBridge) {\r\n this.messageBridge.sendMessage(`progress-changed`, this.toJSON());\r\n }\r\n return super.save();\r\n }\r\n}\r\n\r\nexport class SubProgress implements IProgress {\r\n\r\n get id(): string {\r\n return this.parent.id;\r\n }\r\n\r\n get current(): number {\r\n return this.mCurrent;\r\n }\r\n\r\n get max(): number {\r\n return this.mMax;\r\n }\r\n\r\n get message(): string {\r\n return this.parent.message;\r\n }\r\n\r\n get error(): string {\r\n return this.parent.error;\r\n }\r\n\r\n get percent(): number {\r\n return this.parent.percent;\r\n }\r\n\r\n get remaining(): number {\r\n return this.max - this.mCurrent;\r\n }\r\n\r\n get canceled(): boolean {\r\n return !this.parent || this.parent.canceled;\r\n }\r\n\r\n protected mCurrent: number;\r\n\r\n constructor(protected parent: IProgress, protected progressFrom: number, protected progressValue: number, protected mMax: number = 100) {\r\n if (progressFrom < 0) {\r\n throw \"Progress from must be bigger than or zero\";\r\n }\r\n if (progressValue <= 0) {\r\n throw \"Progress value must be bigger than zero\";\r\n }\r\n this.mCurrent = 0;\r\n }\r\n\r\n setMessageBridge(messageBridge: IMessageBridge): this {\r\n if (!this.parent) return this;\r\n this.parent.setMessageBridge(messageBridge);\r\n return this;\r\n }\r\n\r\n async createSubProgress(progressValue: number, max?: number, message?: string): Promise<IProgress> {\r\n if (max <= 0 && progressValue > 0) {\r\n await this.advance(progressValue);\r\n }\r\n if (message !== null) {\r\n await this.setMessage(message);\r\n }\r\n return new SubProgress(this, this.current, progressValue, Math.max(max, 1));\r\n }\r\n\r\n async setMax(max: number): Promise<any> {\r\n if (isNaN(max) || max <= 0) {\r\n throw \"Max progress value must be bigger than zero\";\r\n }\r\n this.mMax = max;\r\n await this.save();\r\n }\r\n\r\n async setMessage(message: string): Promise<any> {\r\n if (!this.parent) return null;\r\n await this.parent.setMessage(message);\r\n }\r\n\r\n async setError(error: string): Promise<any> {\r\n if (!this.parent) return null;\r\n await this.parent.setError(error);\r\n }\r\n\r\n async advance(value: number = 1): Promise<any> {\r\n if (isNaN(value) || value <= 0) {\r\n throw \"Advance value must be bigger than zero\";\r\n }\r\n this.mCurrent = Math.min(this.max, this.mCurrent + value);\r\n await this.save();\r\n }\r\n\r\n async cancel(): Promise<any> {\r\n if (!this.parent) return null;\r\n await this.parent.cancel();\r\n }\r\n\r\n async save(): Promise<any> {\r\n const ratio = this.max > 0 ? this.mCurrent / this.max : 0;\r\n const newProgress = this.progressFrom + Math.round(this.progressValue * ratio);\r\n const current = this.parent.current;\r\n if (newProgress <= current) return null;\r\n await this.parent.advance(newProgress)\r\n }\r\n\r\n async load(): Promise<any> {\r\n return null;\r\n }\r\n\r\n toJSON(): any {\r\n return this.parent.toJSON();\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {ObjectId} from \"bson\";\r\nimport {Collection} from \"mongodb\";\r\nimport {FilterQuery} from \"mongoose\";\r\nimport {IProgress} from \"../common-types\";\r\nimport {promiseTimeout} from \"../utils\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {JobManager} from \"./job-manager\";\r\nimport {Progress} from \"./entities/progress\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class Progresses {\r\n\r\n protected collection: Collection;\r\n protected progresses: {[id: string]: IProgress};\r\n\r\n constructor(readonly connector: MongoConnector, readonly jobMan: JobManager) {\r\n this.collection = connector.database.collection(\"progresses\");\r\n this.progresses = {};\r\n this.jobMan.on(\"progress-changed\", progress => {\r\n const id = progress.id as string;\r\n this.progresses[id] = new Progress(new ObjectId(id), progress as any, this.collection);\r\n });\r\n }\r\n\r\n async waitToFinish(id: string): Promise<IProgress> {\r\n return Promise.race([\r\n this.waitForProgress(id, async () => {\r\n let progress = this.progresses[id];\r\n if (!progress || progress.percent < 100) {\r\n progress = await this.get(id);\r\n }\r\n if (!progress) {\r\n throw new Error(`Progress does not exists with id: ${id}`);\r\n }\r\n return progress;\r\n }, 500),\r\n this.waitForProgress(id, async () => {\r\n return this.progresses[id] || null;\r\n }, 25)\r\n ]);\r\n }\r\n\r\n async get(id: string): Promise<IProgress> {\r\n return !id ? null : this.find({_id: new ObjectId(id)});\r\n }\r\n\r\n async find(where: FilterQuery<IProgress>): Promise<IProgress> {\r\n const data = await this.collection.findOne(where);\r\n return !data ? null : new Progress(data._id, data, this.collection);\r\n }\r\n\r\n async create(max: number = 100): Promise<IProgress> {\r\n if (isNaN(max) || max <= 0) {\r\n throw new Error(`Max progress value must be bigger than zero`);\r\n }\r\n const data = {\r\n current: 0,\r\n max: max,\r\n message: \"\",\r\n error: \"\",\r\n canceled: false\r\n };\r\n const res = await this.collection.insertOne(data);\r\n return new Progress(res.insertedId, data, this.collection);\r\n }\r\n\r\n async remove(id: string): Promise<any> {\r\n await this.collection.deleteOne({_id: new ObjectId(id)});\r\n return id;\r\n }\r\n\r\n protected async waitForProgress(id: string, cb: () => Promise<IProgress>, delay: number): Promise<IProgress> {\r\n let isFinished = false;\r\n let progress: IProgress = null;\r\n let waitTime: number = 0;\r\n while (!isFinished) {\r\n progress = await cb();\r\n waitTime += delay;\r\n if (progress) {\r\n if (progress.error) {\r\n throw new Error(progress.error);\r\n }\r\n isFinished = progress.percent >= 100;\r\n }\r\n if (!isFinished) {\r\n if (waitTime >= this.jobMan.maxTimeout) {\r\n throw new Error(`Progress with id: ${id} probably never will be finished!`);\r\n }\r\n await promiseTimeout(delay);\r\n }\r\n }\r\n return progress;\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {ObjectId} from \"bson\";\r\nimport {Collection} from \"mongodb\";\r\nimport {FilterQuery} from \"mongoose\";\r\nimport {IJob, ILazyAsset, JobParams, Type} from \"../common-types\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {Assets} from \"./assets\";\r\nimport {LazyAsset} from \"./entities/lazy-asset\";\r\nimport {JobManager} from \"./job-manager\";\r\nimport {Progresses} from \"./progresses\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class LazyAssets {\r\n\r\n protected collection: Collection;\r\n\r\n constructor(readonly connector: MongoConnector,\r\n readonly assets: Assets,\r\n readonly progresses: Progresses,\r\n readonly jobMan: JobManager) {\r\n this.collection = connector.database.collection(\"lazyassets\");\r\n }\r\n\r\n async create(jobType: Type<IJob>, jobParams: JobParams = {}, jobQue: string = \"main\"): Promise<ILazyAsset> {\r\n const jobName = this.jobMan.tryResolve(jobType, {...jobParams, lazyId: \"\"});\r\n const data = {\r\n jobName,\r\n jobParams,\r\n jobQue\r\n };\r\n const existingAsset = await this.find(data);\r\n if (existingAsset) return existingAsset;\r\n const res = await this.collection.insertOne(data);\r\n return new LazyAsset(res.insertedId, data, this.collection, this.assets, this.progresses);\r\n }\r\n\r\n async read(id: string): Promise<ILazyAsset> {\r\n return !id ? null : this.find({_id: new ObjectId(id)});\r\n }\r\n\r\n async find(where: FilterQuery<ILazyAsset>): Promise<ILazyAsset> {\r\n const data = await this.collection.findOne(where);\r\n return !data\r\n ? null\r\n : new LazyAsset(data._id, data, this.collection, this.assets, this.progresses);\r\n }\r\n\r\n async unlink(id: string): Promise<any> {\r\n const asset = await this.read(id);\r\n if (!asset) return null;\r\n return asset.unlink();\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IAsset} from \"../common-types\";\r\nimport {Assets} from \"./assets\";\r\nimport {LazyAssets} from \"./lazy-assets\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class AssetResolver {\r\n\r\n constructor(readonly assets: Assets, readonly lazyAssets: LazyAssets) {\r\n\r\n }\r\n\r\n async resolve(id: string, lazy: boolean = false): Promise<IAsset> {\r\n let asset: IAsset = null;\r\n if (lazy) {\r\n const lazyAsset = await this.lazyAssets.read(id);\r\n if (!lazyAsset) return null;\r\n return lazyAsset.loadAsset();\r\n }\r\n asset = await this.assets.read(id);\r\n if (!asset) {\r\n const lazyAsset = await this.lazyAssets.read(id);\r\n if (!lazyAsset) return null;\r\n return lazyAsset.loadAsset();\r\n }\r\n return asset;\r\n }\r\n}\r\n","import {createServer, Server} from \"http\";\r\nimport express_, {Express} from \"express\";\r\nimport {injectable, singleton} from \"tsyringe\";\r\nimport socket_io, {Server as SocketServer} from \"socket.io\";\r\n\r\nconst express = express_;\r\nconst socketIO = socket_io;\r\n\r\n@injectable()\r\n@singleton()\r\nexport class BackendProvider {\r\n\r\n readonly express: Express;\r\n readonly server: Server;\r\n\r\n get io(): SocketServer {\r\n this.ioServer = this.ioServer || socketIO(this.server, {path: \"/socket\"});\r\n return this.ioServer;\r\n }\r\n\r\n protected ioServer: SocketServer;\r\n\r\n constructor() {\r\n this.express = express();\r\n this.server = createServer(this.express);\r\n }\r\n}\r\n","import {injectable, scoped, Lifecycle} from \"tsyringe\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class CacheProcessor {\r\n async serialize(data: any): Promise<any> {\r\n return data;\r\n }\r\n\r\n async deserialize(data: any): Promise<any> {\r\n return data;\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Collection} from \"mongodb\";\r\nimport {MongoConnector} from \"./mongo-connector\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {CacheProcessor} from \"./cache-processor\";\r\n\r\nexport interface ICacheItem {\r\n _id: string;\r\n data: any;\r\n tags?: any;\r\n expirationTimestamp?: number;\r\n expiresAt?: number;\r\n}\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Cache {\r\n\r\n protected collection: Collection<ICacheItem>;\r\n\r\n constructor(readonly connector: MongoConnector, protected config: Configuration, protected cacheProcessor: CacheProcessor) {\r\n\r\n }\r\n\r\n protected async prepare(): Promise<any> {\r\n if (this.collection) return;\r\n if (!this.connector.database) {\r\n throw new Error(`You can't use cache without mongo connection!`);\r\n }\r\n this.collection = this.connector.database.collection(this.config.resolve(\"cacheCollection\"));\r\n await this.collection.createIndex(\r\n {expiresAt: 1},\r\n {expireAfterSeconds: 0}\r\n );\r\n }\r\n\r\n async set(key: string, value: any, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n await this.prepare();\r\n const item: ICacheItem = {\r\n _id: key,\r\n data: await this.cacheProcessor.serialize(value),\r\n tags: await this.cacheProcessor.serialize(tags),\r\n expirationTimestamp,\r\n };\r\n if (ttl) {\r\n const now = Math.round(new Date().getTime() / 1000);\r\n item.expiresAt = now + ttl;\r\n }\r\n await this.collection.updateOne({_id: key}, {$set: item}, {upsert: true});\r\n return value;\r\n }\r\n\r\n async get(key: string): Promise<any> {\r\n await this.prepare();\r\n let item = await this.collection.findOne({_id: key});\r\n const now = Math.round(new Date().getTime() / 1000);\r\n if (item && item.expiresAt && item.expiresAt < now) {\r\n item = null;\r\n }\r\n if (!item) {\r\n throw new Error(`Cache probably doesn't exists with key: ${key}`);\r\n }\r\n return await this.cacheProcessor.deserialize(item.data);\r\n }\r\n\r\n async getOrSet(key: string, valueCb: () => Promise<any>, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n try {\r\n return await this.get(key);\r\n } catch (e) {\r\n return await this.set(key, await valueCb(), ttl, expirationTimestamp, tags);\r\n }\r\n }\r\n\r\n async delete(key: string): Promise<any> {\r\n await this.prepare();\r\n await this.collection.deleteOne({_id: key});\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Express} from \"express\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class EndpointProvider {\r\n\r\n async configure(app: Express): Promise<any> {\r\n console.log(`Express app is mounted to: ${app.mountpath}`);\r\n }\r\n}\r\n","import {injectable, injectAll, Lifecycle, scoped} from \"tsyringe\";\r\nimport {FIXTURE, IFixture} from \"../common-types\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Fixtures {\r\n\r\n constructor(@injectAll(FIXTURE) protected fixtures: IFixture[]) {\r\n\r\n }\r\n\r\n async load() {\r\n if (!this.fixtures) return;\r\n\r\n for (let fixture of this.fixtures) {\r\n await fixture.load();\r\n }\r\n }\r\n}\r\n","import {v4 as uuidv4} from \"uuid\";\r\nimport sharp_ from \"sharp\";\r\nimport {IGalleryImage, IGallerySize, IGalleryImageHandler} from \"../common-types\";\r\n\r\nconst sharp = sharp_;\r\nconst bigSize = 1500;\r\nconst thumbSize = 250;\r\n\r\nexport class GalleryImage implements IGalleryImage {\r\n\r\n readonly thumb: string;\r\n readonly big: string;\r\n readonly targetSize: IGallerySize;\r\n\r\n constructor(readonly folder: string, size: IGallerySize, readonly handler: IGalleryImageHandler) {\r\n this.thumb = uuidv4();\r\n this.big = uuidv4();\r\n this.targetSize = !size ? {width: thumbSize, height: thumbSize} : size;\r\n }\r\n\r\n async serve(id: string): Promise<Buffer> {\r\n const isThumb = id == this.thumb;\r\n\r\n if (await this.handler.hasResult(isThumb)) {\r\n return this.handler.serveResult(isThumb);\r\n }\r\n\r\n const original = sharp(await this.handler.getOriginal()).rotate();\r\n const meta = await original.metadata();\r\n const ratio = meta.width / meta.height;\r\n const sizeRatio = isThumb ? this.targetSize.width / this.targetSize.height : 1;\r\n const size = isThumb ? Math.max(this.targetSize.width, this.targetSize.height) : bigSize;\r\n const targetHeight = ratio > sizeRatio ? size : Math.round(size / ratio);\r\n const targetWidth = Math.round(targetHeight * ratio);\r\n\r\n const resized = original.resize(targetWidth, targetHeight);\r\n const buffer = await (isThumb ? resized.extract({\r\n left: Math.floor((targetWidth - this.targetSize.width) / 2),\r\n top: Math.floor((targetHeight - this.targetSize.height) / 2),\r\n width: this.targetSize.width,\r\n height: this.targetSize.height\r\n }).toBuffer() : resized.toBuffer());\r\n\r\n await this.handler.writeResult(isThumb, buffer);\r\n return this.handler.serveResult(isThumb);\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IGalleryImage, IGalleryImageHandler, IGallerySize} from \"../common-types\";\r\nimport {GalleryImage} from \"./gallery-image\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class GalleryCache {\r\n\r\n private readonly imgCache: { [id: string]: IGalleryImage };\r\n\r\n constructor() {\r\n this.imgCache = {};\r\n }\r\n\r\n put(img: IGalleryImage): void {\r\n this.imgCache[img.thumb] = img;\r\n this.imgCache[img.big] = img;\r\n }\r\n\r\n serve(id: string): Promise<Buffer> {\r\n const img = this.imgCache[id];\r\n return !img ? null : img.serve(id);\r\n }\r\n\r\n create(folder: string, targetSize: IGallerySize, handler: IGalleryImageHandler): IGalleryImage {\r\n const image = new GalleryImage(folder, targetSize, handler);\r\n this.put(image);\r\n return image;\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport sharp_ from \"sharp\";\r\nimport {access, constants, lstat, readdir, readFile, writeFile} from \"fs\";\r\nimport {join, dirname} from \"path\";\r\nimport {IGalleryImage, IGallerySize} from \"../common-types\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {GalleryCache} from \"./gallery-cache\";\r\nimport {mkdirRecursive} from \"../utils\";\r\n\r\nconst sharp = sharp_;\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Gallery {\r\n\r\n private readonly dir: string;\r\n private readonly output: string;\r\n private readonly cache: { [folder: string]: Promise<IGalleryImage[]> };\r\n\r\n constructor(readonly config: Configuration, readonly galleryCache: GalleryCache) {\r\n this.cache = {};\r\n this.dir = this.config.resolve(\"galleryDir\");\r\n this.output = join(this.config.resolve(\"cacheDir\"), \"gallery\");\r\n }\r\n\r\n async getFolder(folder: string, size: IGallerySize = null): Promise<IGalleryImage[]> {\r\n this.cache[folder] = this.cache[folder] || new Promise<IGalleryImage[]>(resolve => {\r\n lstat(join(this.dir, folder), (err, stats) => {\r\n if (err || !stats.isDirectory()) {\r\n resolve([]);\r\n return;\r\n }\r\n this.readRecursive(folder, \"\", size).then(resolve, () => resolve([]));\r\n });\r\n });\r\n return this.cache[folder];\r\n }\r\n\r\n protected readRecursive(path: string, folder: string, size: IGallerySize): Promise<IGalleryImage[]> {\r\n return new Promise<IGalleryImage[]>(resolve => {\r\n readdir(join(this.dir, path), (err, files) => {\r\n if (err) {\r\n resolve([]);\r\n return;\r\n }\r\n const promises = files.map(file => {\r\n return new Promise<IGalleryImage[]>(async resolve => {\r\n const filePath = join(path, file);\r\n const absoluteFilePath = join(this.dir, filePath);\r\n lstat(absoluteFilePath, (err, stats) => {\r\n if (err) {\r\n resolve([]);\r\n return;\r\n }\r\n if (stats.isDirectory()) {\r\n this.readRecursive(filePath, join(folder, file), size).then(resolve);\r\n return;\r\n }\r\n const sharpImg = sharp(absoluteFilePath);\r\n sharpImg.rotate().metadata().then(() => {\r\n const getResultPath = (isThumb) => {\r\n return join(this.output, filePath.replace(/.([a-z|A-Z]+)$/gi, function (ext) {\r\n const suffix = isThumb ? 'thumb' : 'big';\r\n return `-${suffix}${ext}`;\r\n }));\r\n };\r\n resolve([this.galleryCache.create(folder, size, {\r\n getOriginal: () => {\r\n return new Promise<Buffer>((res, rej) => {\r\n readFile(absoluteFilePath, (err, data) => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n },\r\n writeResult: (isThumb: boolean, buffer: Buffer) => {\r\n return new Promise<any>(async (res, rej) => {\r\n const resultPath = getResultPath(isThumb);\r\n await mkdirRecursive(dirname(resultPath));\r\n writeFile(resultPath, buffer, err => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res();\r\n });\r\n });\r\n },\r\n hasResult: (isThumb: boolean) => {\r\n return new Promise<boolean>(res => {\r\n access(getResultPath(isThumb), constants.R_OK, err => {\r\n res(!err);\r\n });\r\n });\r\n },\r\n serveResult: (isThumb: boolean) => {\r\n return new Promise<Buffer>((res, rej) => {\r\n readFile(getResultPath(isThumb), (err, data) => {\r\n if (err) {\r\n rej(err);\r\n return;\r\n }\r\n res(data);\r\n });\r\n });\r\n }\r\n })]);\r\n }, () => resolve([]));\r\n });\r\n });\r\n });\r\n Promise.all(promises).then(folders => {\r\n resolve([].concat.apply([], folders));\r\n });\r\n });\r\n });\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {rand} from \"../utils\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class IdGenerator {\r\n\r\n protected prefix: string;\r\n protected separator: string;\r\n protected chars: string;\r\n protected parts: number[];\r\n\r\n constructor(readonly config: Configuration) {\r\n this.prefix = config.resolve(\"idPrefix\");\r\n this.separator = config.resolve(\"idSeparator\");\r\n this.chars = config.resolve(\"idChars\");\r\n this.parts = config.resolve(\"idParts\");\r\n }\r\n\r\n async generate(checkCb: (id: string) => Promise<boolean>): Promise<string> {\r\n let id = null;\r\n let tries = 0;\r\n let notGood = true;\r\n while (notGood && tries < 5) {\r\n id = this.generateId();\r\n notGood = await checkCb(id);\r\n tries++;\r\n }\r\n if (notGood) {\r\n throw `Couldn't generate an unique id..`;\r\n }\r\n return id;\r\n }\r\n\r\n private generateId(): string {\r\n return this.prefix + this.parts.map(num => {\r\n let s = \"\";\r\n for (let i = 0; i < num; i++) {\r\n const ix = rand(0, this.chars.length - 1);\r\n s += this.chars[ix];\r\n }\r\n return s;\r\n }).join(this.separator);\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport axios from \"axios\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {ITranslations} from \"../common-types\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class TranslationProvider {\r\n\r\n protected cache: { [lang: string]: Promise<ITranslations> };\r\n\r\n constructor(readonly config: Configuration) {\r\n this.cache = {};\r\n }\r\n\r\n getDictionary(language: string): Promise<ITranslations> {\r\n this.cache[language] = this.cache[language] || axios.get(this.config.resolve(\"translationsTemplate\").replace(`[lang]`, language)).then(\r\n r => r.data,\r\n reason => ({\r\n message: reason\r\n })\r\n );\r\n return this.cache[language];\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {getValue, isDefined, isString} from \"../utils\";\r\nimport {ITranslations} from \"../common-types\";\r\nimport {TranslationProvider} from \"./translation-provider\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class Translator {\r\n\r\n protected cache: { [lang: string]: ITranslations };\r\n\r\n constructor(private translationProvider: TranslationProvider) {\r\n this.cache = {};\r\n }\r\n\r\n async getDictionary(language: string): Promise<ITranslations> {\r\n const dictionary = await this.translationProvider.getDictionary(language);\r\n this.cache[language] = dictionary;\r\n return dictionary;\r\n }\r\n\r\n getTranslationSync(language: string, key: string, params?: any): string {\r\n if (!isString(key) || !key.length) {\r\n throw new Error(`Parameter \"key\" required`);\r\n }\r\n const dictionary = this.cache[language];\r\n const translation = getValue(dictionary, key, key) || key;\r\n return this.interpolate(translation, params);\r\n }\r\n\r\n getTranslation(language: string, key: string, params?: any): Promise<string> {\r\n if (!isString(key) || !key.length) {\r\n throw new Error(`Parameter \"key\" required`);\r\n }\r\n return this.getDictionary(language).then(dictionary => {\r\n const translation = getValue(dictionary, key, key) || key;\r\n return this.interpolate(translation, params);\r\n });\r\n }\r\n\r\n getTranslations(language: string, ...keys: string[]): Promise<ITranslations> {\r\n return new Promise<ITranslations>(resolve => {\r\n Promise.all(keys.map(key => this.getTranslation(language, key))).then(translations => {\r\n resolve(keys.reduce((result, key, i) => {\r\n result[key] = translations[i];\r\n return result;\r\n }, {}));\r\n });\r\n });\r\n }\r\n\r\n protected interpolate(expr: string | Function, params?: any): string {\r\n if (typeof expr === \"string\") {\r\n return this.interpolateString(expr, params);\r\n }\r\n if (typeof expr === \"function\") {\r\n return expr(params);\r\n }\r\n return expr as string;\r\n }\r\n\r\n protected interpolateString(expr: string, params?: any) {\r\n if (!expr || !params) return expr;\r\n return expr.replace(/{{\\s?([^{}\\s]*)\\s?}}/g, (substring: string, b: string) => {\r\n const r = getValue(params, b);\r\n return isDefined(r) ? r : substring;\r\n });\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {lstatSync, readdir, readFileSync} from \"fs\";\r\nimport {join} from \"path\";\r\nimport * as Handlebars from \"handlebars\";\r\n\r\nimport {Translator} from \"./translator\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@injectable()\r\n@singleton()\r\nexport class TemplateRenderer {\r\n\r\n templates: {[name: string]: Function};\r\n\r\n protected initPromise: Promise<any>;\r\n\r\n constructor(readonly translator: Translator, readonly config: Configuration) {\r\n this.templates = {};\r\n Handlebars.registerHelper(`object`, function({hash}) {\r\n return hash;\r\n });\r\n Handlebars.registerHelper(`now`, function() {\r\n return new Date().getTime();\r\n });\r\n Handlebars.registerHelper(`keys`, function(obj: any) {\r\n return !obj ? [] : Object.keys(obj);\r\n });\r\n Handlebars.registerHelper(`translate`, function (key: string, params: any) {\r\n return translator.getTranslationSync(this.language, key, params);\r\n });\r\n }\r\n\r\n protected init(): Promise<any> {\r\n this.initPromise = this.initPromise || this.parseTemplates(this.config.resolve(\"templatesDir\"), []);\r\n return this.initPromise;\r\n }\r\n\r\n async parseTemplates(dir: string, dirPath: string[]): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n readdir(dir, async (err, files) => {\r\n for (let file of files) {\r\n const path = join(dir, file);\r\n if (lstatSync(path).isDirectory()) {\r\n await this.parseTemplates(join(dir, file), dirPath.concat([file]));\r\n continue;\r\n }\r\n const parts = file.split(\".\");\r\n parts.pop();\r\n const name = parts.join(\".\");\r\n const fullName = dirPath.concat([name]).join(\"-\");\r\n const content = readFileSync(path).toString(\"utf8\");\r\n this.templates[fullName] = Handlebars.compile(content);\r\n Handlebars.registerPartial(fullName, content);\r\n }\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n async render(template: string, language: string, context?: any): Promise<string> {\r\n await this.init();\r\n await this.translator.getDictionary(language);\r\n if (!this.templates[template]) {\r\n return Promise.reject(`Template not found with name: ${template}`);\r\n }\r\n context = Object.assign({language}, context || {});\r\n const res = this.templates[template](context);\r\n return res instanceof Error ? await Promise.reject(res) : res;\r\n }\r\n}\r\n","import {injectable, singleton} from \"tsyringe\";\r\nimport {createTransport} from \"nodemailer\";\r\nimport * as Mail from \"nodemailer/lib/mailer\";\r\n\r\nimport {TemplateRenderer} from \"./template-renderer\";\r\nimport {Translator} from \"./translator\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\nexport interface MailOptions {\r\n to: string;\r\n from?: string;\r\n subject?: string;\r\n template: string;\r\n context: any;\r\n attachments?: Mail.Attachment[]\r\n}\r\n\r\n@injectable()\r\n@singleton()\r\nexport class MailSender {\r\n\r\n readonly transporter: Mail;\r\n\r\n get translator(): Translator {\r\n return this.renderer.translator;\r\n }\r\n\r\n constructor(readonly config: Configuration, readonly renderer: TemplateRenderer) {\r\n this.transporter = createTransport({\r\n host: this.config.resolve(\"smtpHost\"),\r\n port: this.config.resolve(\"smtpPort\"),\r\n auth: {\r\n user: this.config.resolve(\"smtpUser\"),\r\n pass: this.config.resolve(\"smtpPassword\"),\r\n }\r\n });\r\n }\r\n\r\n async sendMail(language: string, options: MailOptions): Promise<any> {\r\n const subject = await this.translator.getTranslation(language, options.subject || \"-\");\r\n const html = await this.renderer.render(options.template, language, options.context);\r\n return this.transporter.sendMail({\r\n from: options.from || this.config.resolve(\"mailSenderAddress\"),\r\n to: options.to,\r\n attachments: options.attachments,\r\n subject,\r\n html\r\n });\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Cache, ICacheItem} from \"./cache\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class MemoryCache {\r\n\r\n protected readonly cacheMap: Map<string, ICacheItem>;\r\n\r\n constructor(protected readonly cache: Cache) {\r\n this.cacheMap = new Map<string, ICacheItem>();\r\n }\r\n\r\n async set(key: string, value: any, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n const now = Math.round(new Date().getTime() / 1000);\r\n const expTimestamp = Math.min(isNaN(ttl) ? Number.MAX_SAFE_INTEGER : ttl, 3600);\r\n this.cacheMap.set(key, {\r\n _id: key,\r\n data: value,\r\n expirationTimestamp: expTimestamp,\r\n expiresAt: now + expTimestamp,\r\n });\r\n return this.cache.set(key, value, ttl, expirationTimestamp, tags);\r\n }\r\n\r\n async get(key: string): Promise<any> {\r\n let item = this.cacheMap.get(key);\r\n const now = Math.round(new Date().getTime() / 1000);\r\n let expTimestamp = 3600;\r\n if (item && item.expiresAt && item.expiresAt < now) {\r\n expTimestamp = item.expirationTimestamp;\r\n item = null;\r\n }\r\n if (!item) {\r\n const value = await this.cache.get(key);\r\n this.cacheMap.set(key, {\r\n _id: key,\r\n data: value,\r\n expirationTimestamp: expTimestamp,\r\n expiresAt: now + expTimestamp,\r\n });\r\n return value;\r\n }\r\n return item.data;\r\n }\r\n\r\n async getOrSet(key: string, valueCb: () => Promise<any>, ttl?: number, expirationTimestamp: number = null, tags: any = {}): Promise<any> {\r\n try {\r\n return await this.get(key);\r\n } catch (e) {\r\n return await this.set(key, await valueCb(), ttl, expirationTimestamp, tags);\r\n }\r\n }\r\n\r\n async delete(key: string): Promise<any> {\r\n this.cacheMap.delete(key);\r\n await this.cacheMap.delete(key);\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IUser} from \"../common-types\";\r\n\r\nconst sampleUser: IUser = {\r\n id: \"5a3cdf7c6a9cf0ba32feccdf\",\r\n email: \"admin@site.com\",\r\n password: \"\",\r\n roles: [\"admin\"]\r\n};\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class UserManager {\r\n\r\n async getByCredentials(credentials: any): Promise<IUser> {\r\n return (sampleUser.email == credentials.email) ? sampleUser : await Promise.reject(\"message.login.error\");\r\n }\r\n\r\n async getById(id: string): Promise<IUser> {\r\n return (sampleUser.id == id) ? sampleUser : null;\r\n }\r\n\r\n async serialize(user: IUser): Promise<any> {\r\n const res = Object.assign({}, user);\r\n delete res.password;\r\n return res;\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {Response} from \"express\";\r\nimport {injectable} from \"tsyringe\";\r\nimport {\r\n Authorized,\r\n Body,\r\n Controller,\r\n Get,\r\n HttpError,\r\n Param,\r\n Post,\r\n QueryParam,\r\n QueryParams,\r\n Res,\r\n UploadedFile\r\n} from \"routing-controllers\";\r\nimport {IAsset, IAssetImageParams} from \"../common-types\";\r\nimport {Assets} from \"../services/assets\";\r\nimport {AssetResolver} from \"../services/asset-resolver\";\r\n\r\n@injectable()\r\n@Controller(\"/assets\")\r\nexport class AssetsController {\r\n\r\n constructor(readonly assets: Assets, readonly assetResolver: AssetResolver) {\r\n\r\n }\r\n\r\n @Authorized()\r\n @Post(\"\")\r\n async upload(@UploadedFile(\"file\") file: Express.Multer.File) {\r\n try {\r\n const contentType = file.mimetype === \"application/octet-stream\" ? null : file.mimetype;\r\n const asset = await this.assets.writeBuffer(file.buffer, {filename: file.filename}, contentType);\r\n return asset.toJSON();\r\n } catch (e) {\r\n const msg = e?.message || e || \"Unknown error\";\r\n throw new HttpError(400, `Asset can't be uploaded.\\n${msg}`);\r\n }\r\n }\r\n\r\n @Authorized()\r\n @Post(\"url\")\r\n async uploadUrl(@Body() body: any) {\r\n try {\r\n const asset = await this.assets.writeUrl(body.url, body);\r\n return asset.toJSON();\r\n } catch (e) {\r\n const msg = e?.message || e || \"Unknown error\";\r\n throw new HttpError(400, `Asset can't be uploaded.\\n${msg}`);\r\n }\r\n }\r\n\r\n @Get(\"/:id\")\r\n async getFile(@Param(\"id\") id: string, @QueryParam(\"lazy\") lazy: boolean, @Res() res: Response): Promise<Readable> {\r\n const asset = await this.getAsset(\"Asset\", id, lazy, res);\r\n return asset.download();\r\n }\r\n\r\n @Get(\"/image/:id/:rotation\")\r\n async getImageRotation(@Param(\"id\") id: string, @QueryParams() params: IAssetImageParams, @Res() res: Response, @Param(\"rotation\") rotation: number = 0): Promise<Readable> {\r\n const asset = await this.getAsset(\"Image\", id, params.lazy, res);\r\n if (rotation !== 0) {\r\n params.rotation = params.rotation || rotation;\r\n }\r\n return asset.downloadImage(params);\r\n }\r\n\r\n @Get(\"/image/:id\")\r\n async getImage(@Param(\"id\") id: string, @QueryParams() params: IAssetImageParams, @Res() res: Response): Promise<Readable> {\r\n return this.getImageRotation(id, params, res);\r\n }\r\n\r\n @Get(\"/by-name/:name\")\r\n async getFileByName(@Param(\"name\") name: string, @Res() res: Response): Promise<Readable> {\r\n const asset = await this.getAssetByName(\"Asset\", name, res);\r\n return asset.download();\r\n }\r\n\r\n @Get(\"/by-name/image/:name\")\r\n async getImageByName(@Param(\"name\") name: string, @QueryParams() params: IAssetImageParams, @Res() res: Response): Promise<Readable> {\r\n const asset = await this.getAssetByName(\"Image\", name, res);\r\n return asset.downloadImage(params);\r\n }\r\n\r\n protected setAssetHeaders(type: string, asset: IAsset, res: Response): void {\r\n if (asset.metadata?.classified) {\r\n throw new HttpError(403, `${type} is classified, and can be only downloaded from a custom url.`);\r\n }\r\n const ext = asset.metadata?.extension;\r\n if (ext) {\r\n res.header(\"content-disposition\", `inline; filename=${asset.filename}.${ext}`);\r\n }\r\n if (asset.contentType) {\r\n res.header(\"content-type\", asset.contentType);\r\n }\r\n }\r\n\r\n protected async getAsset(type: string, id: string, lazy: boolean, res: Response): Promise<IAsset> {\r\n const asset = await this.assetResolver.resolve(id, lazy);\r\n if (!asset) {\r\n throw new HttpError(404, `${type} with id: '${id}' not found.`);\r\n }\r\n this.setAssetHeaders(type, asset, res);\r\n return asset;\r\n }\r\n\r\n protected async getAssetByName(type: string, filename: string, res: Response): Promise<IAsset> {\r\n const asset = await this.assets.find({filename});\r\n if (!asset) {\r\n throw new HttpError(404, `${type} with filename: '${filename}' not found.`);\r\n }\r\n this.setAssetHeaders(type, asset, res);\r\n return asset;\r\n }\r\n}\r\n","import {Response} from \"express\";\r\nimport {sign} from \"jsonwebtoken\";\r\nimport {injectable} from \"tsyringe\";\r\nimport {Authorized, Body, Controller, CurrentUser, Get, HttpError, Post, Res} from \"routing-controllers\";\r\nimport {compare} from \"bcrypt\";\r\n\r\nimport {Configuration} from \"../services/configuration\";\r\nimport {UserManager} from \"../services/user-manager\";\r\nimport {IUser} from \"../common-types\";\r\n\r\n@injectable()\r\n@Controller()\r\nexport class AuthController {\r\n\r\n constructor(readonly config: Configuration, readonly userManager: UserManager) {}\r\n\r\n @Post(\"/login\")\r\n async login(@Body() credentials: any, @Res() res: Response) {\r\n try {\r\n const user = await this.userManager.getByCredentials(credentials);\r\n const valid = await compare(credentials.password, user.password);\r\n if (valid !== true) throw \"message.login.error\";\r\n return {\r\n token: sign({ id: user._id || user.id }, this.config.resolve(\"jwtSecret\")),\r\n user: await this.userManager.serialize(user)\r\n };\r\n } catch (reason) {\r\n throw new HttpError(401, reason);\r\n }\r\n }\r\n\r\n @Authorized()\r\n @Get(\"/user\")\r\n getProfile(@CurrentUser() user: IUser) {\r\n return this.userManager.serialize(user);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {Controller, Get, Param} from \"routing-controllers\";\r\nimport {GalleryCache} from \"../services/gallery-cache\";\r\n\r\n@injectable()\r\n@Controller(\"/gallery\")\r\nexport class GalleryController {\r\n\r\n constructor(readonly galleryCache: GalleryCache) { }\r\n\r\n @Get(\"/:id\")\r\n getFile(@Param(\"id\") id: string) {\r\n return this.galleryCache.serve(id);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {Controller, Get, Param} from \"routing-controllers\";\r\nimport {Progresses} from \"../services/progresses\";\r\nimport {Configuration} from \"../services/configuration\";\r\n\r\n@injectable()\r\n@Controller(\"/progresses\")\r\nexport class ProgressesController {\r\n\r\n protected connectionType: string;\r\n\r\n constructor(readonly progresses: Progresses, readonly config: Configuration) {\r\n const mainEndpoint = this.config.resolve(\"mainEndpoint\");\r\n this.connectionType = !mainEndpoint ? \"polling\" : \"socket\";\r\n }\r\n\r\n @Get(\"/:id\")\r\n async getProgress(@Param(\"id\") id: string) {\r\n const progress = await this.progresses.get(id);\r\n if (!progress) return null;\r\n const json = progress.toJSON();\r\n json.connectionType = this.connectionType;\r\n return json;\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {BadRequestError, ExpressErrorMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {Response} from \"express\";\r\n\r\nimport {IRequest} from \"../common-types\";\r\nimport {Translator} from \"../services/translator\";\r\nimport {Configuration} from \"../services/configuration\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"after\" })\r\nexport class ErrorHandlerMiddleware implements ExpressErrorMiddlewareInterface {\r\n\r\n get isDev(): boolean {\r\n return this.configuration.resolve(\"nodeEnv\") === \"development\";\r\n }\r\n\r\n constructor(readonly configuration: Configuration, readonly translator: Translator) {\r\n\r\n }\r\n\r\n async error(error: any, req: IRequest, res: Response, next: (err?: any) => any) {\r\n const result = await this.getResult(error, req, res);\r\n if (this.isDev) {\r\n console.log(\"ERROR\", result, res.statusCode);\r\n }\r\n res.json(result);\r\n }\r\n\r\n protected async getResult(error, req: IRequest, res: Response) {\r\n\r\n const result: any = {};\r\n\r\n if (error instanceof BadRequestError) {\r\n res.status(400);\r\n if (error.constructor.name === \"ParamRequiredError\") {\r\n result.message = await this.translator.getTranslation(req.language, \"message.parameter-required.error\");\r\n result.param = error.message;\r\n } else {\r\n result.message = error.message || await this.translator.getTranslation(req.language, \"message.form-validation.error\");\r\n result.errors = error[\"errors\"];\r\n if (this.isDev) {\r\n result.stack = error.stack;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n res.status(error.httpCode || 500);\r\n\r\n if (error instanceof Error) {\r\n if (error.name) {\r\n result.name = error.name;\r\n }\r\n if (error.message) {\r\n result.message = error.message;\r\n }\r\n if (error.stack && this.isDev) {\r\n result.stack = error.stack;\r\n }\r\n } else if (typeof error === \"string\") {\r\n result.message = error;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {inject, injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {DI_CONTAINER, IRequest} from \"../common-types\";\r\nimport {DependencyContainer} from \"tsyringe\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class ContainerMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(@inject(DI_CONTAINER) readonly container: DependencyContainer) {\r\n\r\n }\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.container = this.container;\r\n next(null);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {IRequest} from \"../common-types\";\r\nimport {Configuration} from \"../services/configuration\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class LanguageMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(readonly config: Configuration) {\r\n\r\n }\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.language = request.query.language as string || this.config.resolve(\"defaultLanguage\");\r\n next(null);\r\n }\r\n\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport moment from \"moment\";\r\nimport {IRequest} from \"../common-types\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"after\" })\r\nexport class RequestEndedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.ended = moment();\r\n const diff = request.ended.diff(request.started);\r\n const duration = moment.duration(diff);\r\n console.log(`Request '${request.id}' ended at: ${request.ended.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`);\r\n console.log(`Request '${request.id}' lasted: ${duration.asMilliseconds()}ms`)\r\n next(null);\r\n }\r\n\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {ExpressMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport {ObjectId} from \"bson\";\r\nimport moment from \"moment\";\r\nimport {IRequest} from \"../common-types\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class RequestStartedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n use(request: IRequest, response: any, next: (err?: any) => any): void {\r\n request.id = new ObjectId().toHexString();\r\n request.started = moment();\r\n console.log(`Request '${request.id}' started at: ${request.started.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`);\r\n next(null);\r\n }\r\n\r\n}\r\n","import {inject, injectable} from \"tsyringe\";\r\nimport {ConnectedSocket, MessageBody, OnMessage, SocketController,} from \"socket-controllers\";\r\nimport {Server} from \"socket.io\";\r\nimport {IClientSocket, SOCKET_SERVER} from \"../common-types\";\r\nimport {broadcast} from \"../utils\";\r\nimport {Progresses} from \"../services/progresses\";\r\n\r\n@injectable()\r\n@SocketController()\r\nexport class ProgressController {\r\n\r\n constructor(readonly progresses: Progresses, @inject(SOCKET_SERVER) readonly socketServer: Server) {\r\n }\r\n\r\n @OnMessage(\"background-progress\")\r\n async advanceProgress(@ConnectedSocket() client: IClientSocket, @MessageBody() progressId: string) {\r\n const progress = await this.progresses.get(progressId);\r\n if (!progress) return;\r\n const json = progress.toJSON();\r\n broadcast(this.socketServer, c => {\r\n if (c.interestedProgresses instanceof Set && c.interestedProgresses.has(progressId)) {\r\n client.emit(\"background-progress-changed\", json);\r\n }\r\n });\r\n console.log(`progress changed: ${client.id}, data: ${JSON.stringify(json)}`);\r\n }\r\n\r\n @OnMessage(\"background-progress-interest\")\r\n async setProgressInterest(@ConnectedSocket() client: IClientSocket, @MessageBody() progressId: string) {\r\n const progress = await this.progresses.get(progressId);\r\n if (!progress) return;\r\n const json = progress.toJSON();\r\n client.interestedProgresses = client.interestedProgresses || new Set<string>();\r\n if (client.interestedProgresses.has(progressId)) return;\r\n client.interestedProgresses.add(progressId);\r\n client.emit(\"background-progress-changed\", json);\r\n console.log(`progress interest added: ${client.id}, data: ${JSON.stringify(json)}`);\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {Middleware, MiddlewareInterface} from \"socket-controllers\";\r\n\r\n@injectable()\r\n@Middleware()\r\nexport class CompressionMiddleware implements MiddlewareInterface {\r\n\r\n use(socket: any, next: (err?: any) => any) {\r\n next();\r\n }\r\n}\r\n","import {IDependencyContainer, ITree} from \"../common-types\";\r\nimport {isString} from \"../utils\";\r\n\r\nexport class Tree implements ITree {\r\n\r\n protected map: Map<string, Tree>;\r\n\r\n protected get parentTree(): ITree {\r\n return this.container.parent.tree;\r\n }\r\n\r\n constructor(protected container: IDependencyContainer, protected exists: boolean, readonly path: string) {\r\n this.map = new Map<string, Tree>();\r\n }\r\n\r\n resolveService(): any {\r\n return !this.exists ? null : this.container.resolve(this.path);\r\n }\r\n\r\n resolveLeaves(): Map<string, ITree> {\r\n let map: Map<string, ITree>;\r\n try {\r\n const parentTree = this.parentTree.resolvePath(this.path);\r\n map = parentTree.resolveLeaves();\r\n } catch (e) {\r\n map = new Map<string, ITree>();\r\n }\r\n const visitor = (treeMap: Map<string, Tree>, path: string) => {\r\n treeMap.forEach((tree, key) => {\r\n const subKey = !path ? key : `${path}.${key}`;\r\n if (tree.map.size == 0) {\r\n map.set(subKey, tree);\r\n return;\r\n }\r\n visitor(tree.map, subKey);\r\n });\r\n };\r\n visitor(this.map, \"\");\r\n return map;\r\n }\r\n\r\n resolveServices(): Map<string, any> {\r\n const map = new Map<string, any>();\r\n this.resolveLeaves().forEach((leaf, key) => {\r\n map.set(key, leaf.resolveService());\r\n });\r\n return map;\r\n }\r\n\r\n resolveAncestor(path: string): ITree {\r\n if (!isString(path) || path.length == 0) {\r\n return this;\r\n }\r\n let parentTree: ITree;\r\n try {\r\n parentTree = this.parentTree.resolvePath(this.path);\r\n parentTree = parentTree.resolveAncestor(path);\r\n } catch (e) {\r\n parentTree = new Tree(this.container, false, \"\");\r\n }\r\n const pathParts = path.split(\".\");\r\n let tree: Tree = this;\r\n let previousTree: Tree = this;\r\n for (let part of pathParts) {\r\n tree = tree.map.get(part);\r\n if (!tree) {\r\n if (previousTree == this) {\r\n if (parentTree.path.length > 0) {\r\n return parentTree;\r\n }\r\n throw new Error(`Ancestor '${path}' not found in current tree: '${this.path}'`);\r\n }\r\n return previousTree;\r\n }\r\n previousTree = tree;\r\n }\r\n return parentTree.path.length > previousTree.path.length\r\n ? parentTree : previousTree;\r\n }\r\n\r\n resolvePath(path: string, throwError: boolean = true): ITree {\r\n const absolutePath = !this.path ? path : `${this.path}.${path}`;\r\n let tree: ITree = new Tree(this.container, false, absolutePath);\r\n try {\r\n tree = this.resolveAncestor(path);\r\n } catch (e) {\r\n if (throwError) {\r\n throw new Error(`Path '${path}' not found in current tree: '${this.path}'`);\r\n }\r\n return tree;\r\n }\r\n if (tree.path !== absolutePath) {\r\n if (throwError) {\r\n throw new Error(`Path '${path}' not found in current tree: '${this.path}'`);\r\n }\r\n return tree;\r\n }\r\n return tree;\r\n }\r\n\r\n addPath(path: string): this {\r\n if (!isString(path) || path.length == 0) {\r\n return this;\r\n }\r\n const pathParts = path.split(\".\");\r\n const maxIx = pathParts.length - 1;\r\n let tree: Tree = this;\r\n path = this.path;\r\n for (let ix = 0; ix <= maxIx; ix++) {\r\n const part = pathParts[ix];\r\n if (!tree.map.has(part)) {\r\n tree.map.set(part, new Tree(this.container, false, !path ? part : `${path}.${part}`))\r\n }\r\n tree = tree.map.get(part);\r\n tree.exists = tree.exists || ix == maxIx;\r\n path = tree.path;\r\n }\r\n return this;\r\n }\r\n}\r\n","import {\r\n ClassProvider,\r\n DependencyContainer,\r\n Frequency,\r\n InjectionToken,\r\n isFactoryProvider,\r\n RegistrationOptions,\r\n TokenProvider,\r\n ValueProvider\r\n} from \"tsyringe\";\r\nimport {FactoryProvider, IDependencyContainer, ITree, Type} from \"../common-types\";\r\nimport {Tree} from \"./tree\";\r\nimport {isString} from \"../utils\";\r\n\r\ninterface PreResolutionInterceptorCallback<T = any> {\r\n (token: InjectionToken<T>, resolutionType: \"Single\" | \"All\"): void;\r\n}\r\n\r\ninterface PostResolutionInterceptorCallback<T = any> {\r\n (token: InjectionToken<T>, result: T | T[], resolutionType: \"Single\" | \"All\"): void;\r\n}\r\n\r\nexport class DiContainer implements IDependencyContainer {\r\n\r\n get registeredTokens(): ReadonlyArray<InjectionToken> {\r\n return (this.parent?.registeredTokens || []).concat(this.tokens);\r\n }\r\n\r\n get tree(): ITree {\r\n return this.root;\r\n }\r\n\r\n protected tokens: Array<InjectionToken>;\r\n protected tokenSet: Set<InjectionToken>;\r\n protected root: Tree;\r\n\r\n constructor(protected container: DependencyContainer, readonly parent: IDependencyContainer = null) {\r\n container[\"wrapperContainer\"] = this;\r\n this.tokens = [];\r\n this.tokenSet = new Set<InjectionToken>();\r\n this.root = new Tree(this, false, \"\");\r\n }\r\n\r\n beforeResolution<T>(token: InjectionToken<T>, callback: PreResolutionInterceptorCallback<T>, options?: { frequency: Frequency }): void {\r\n this.container.beforeResolution(token, callback, options);\r\n }\r\n\r\n afterResolution<T>(token: InjectionToken<T>, callback: PostResolutionInterceptorCallback<T>, options?: { frequency: Frequency }): void {\r\n this.container.afterResolution(token, callback, options);\r\n }\r\n\r\n clearInstances(): void {\r\n this.container.clearInstances();\r\n }\r\n\r\n createChildContainer(): IDependencyContainer {\r\n return new DiContainer(this.container.createChildContainer(), this);\r\n }\r\n\r\n isRegistered<T>(token: InjectionToken<T>, recursive?: boolean): boolean {\r\n return this.container.isRegistered(token, recursive);\r\n }\r\n\r\n register<T>(token: InjectionToken<T>, provider: ValueProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: FactoryProvider<T>): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: TokenProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: ClassProvider<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register<T>(token: InjectionToken<T>, provider: Type<T>, options?: RegistrationOptions): IDependencyContainer;\r\n register(token, provider, options?: RegistrationOptions): IDependencyContainer {\r\n if (isFactoryProvider(provider)) {\r\n this.container.register(token, {\r\n useFactory: dc => {\r\n return provider.useFactory(dc[\"wrapperContainer\"]);\r\n }\r\n });\r\n return this.addToken(token);\r\n }\r\n this.container.register(token, provider);\r\n return this.addToken(token);\r\n }\r\n\r\n registerInstance<T>(token: InjectionToken<T>, instance: T): IDependencyContainer {\r\n this.container.registerInstance(token, instance);\r\n return this.addToken(token);\r\n }\r\n\r\n registerSingleton<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer;\r\n registerSingleton<T>(token: Type<T>): IDependencyContainer;\r\n registerSingleton(from, to?): IDependencyContainer {\r\n this.container.registerSingleton(from, to);\r\n return this.addToken(from);\r\n }\r\n\r\n registerType<T>(from: InjectionToken<T>, to: InjectionToken<T>): IDependencyContainer {\r\n this.container.registerType(from, to);\r\n return this.addToken(from);\r\n }\r\n\r\n reset(): void {\r\n this.tokens = [];\r\n this.tokenSet = new Set<InjectionToken>();\r\n this.container.reset();\r\n }\r\n\r\n resolve<T>(token: InjectionToken<T>): T {\r\n return this.container.resolve(token);\r\n }\r\n\r\n resolveAll<T>(token: InjectionToken<T>): T[] {\r\n return this.container.resolveAll(token);\r\n }\r\n\r\n get<T>(token: InjectionToken<T>): T {\r\n return this.container.resolve(token);\r\n }\r\n\r\n protected addToken<T>(token: InjectionToken<T>): this {\r\n if (this.tokenSet.has(token)) return this;\r\n this.tokenSet.add(token);\r\n this.tokens.push(token);\r\n if (isString(token)) {\r\n this.root.addPath(token);\r\n }\r\n return this;\r\n }\r\n}\r\n","import {existsSync} from \"fs\";\r\nimport {resolve} from \"path\";\r\nimport {static as serveStatic} from \"express\";\r\nimport {EXPRESS, IDependencyContainer} from \"./common-types\";\r\nimport {EndpointProvider} from \"./services/endpoint-provider\";\r\n\r\nexport async function setupStatic(rootFolder: string, container: IDependencyContainer): Promise<any> {\r\n\r\n const browserFolder = resolve(rootFolder || __dirname, `public_html`);\r\n const app = container.get(EXPRESS);\r\n const ep = container.get(EndpointProvider);\r\n\r\n console.log(browserFolder, existsSync(browserFolder));\r\n\r\n if (existsSync(browserFolder)) {\r\n console.log(`public_html exists. setting up static files serving...`);\r\n app.use(serveStatic(browserFolder, {\r\n maxAge: \"1y\"\r\n }));\r\n } else {\r\n console.log(`public_html does not exist on path: \"${browserFolder}\"`);\r\n }\r\n\r\n await ep.configure(app);\r\n}\r\n","import {IAsset, IJob, IMessageBridge, IProgress} from \"../common-types\";\r\nimport {Assets} from \"../services/assets\";\r\nimport {LazyAssets} from \"../services/lazy-assets\";\r\nimport {AssetResolver} from \"../services/asset-resolver\";\r\nimport {Progresses} from \"../services/progresses\";\r\n\r\nexport abstract class LazyAssetGenerator implements IJob {\r\n\r\n get assets(): Assets {\r\n return this.assetResolver.assets;\r\n }\r\n\r\n get lazyAssets(): LazyAssets {\r\n return this.assetResolver.lazyAssets;\r\n }\r\n\r\n protected constructor(protected assetResolver: AssetResolver, protected progresses: Progresses, protected lazyId: string) {\r\n }\r\n\r\n abstract generate(progress: IProgress, messaging?: IMessageBridge): Promise<IAsset>;\r\n\r\n async process(messaging: IMessageBridge): Promise<any> {\r\n const lazyAsset = await this.lazyAssets.read(this.lazyId);\r\n let progress = await this.progresses.get(lazyAsset.progressId);\r\n if (!progress || progress.canceled) return null;\r\n progress.setMessageBridge(messaging);\r\n try {\r\n const asset = await this.generate(progress, messaging);\r\n progress = await progress.load();\r\n if (!progress || progress.canceled) return null;\r\n await lazyAsset.writeAsset(asset);\r\n } catch (e) {\r\n await progress.setError(e.message || e);\r\n throw e;\r\n }\r\n if (progress.remaining > 0) {\r\n await progress.advance(progress.remaining);\r\n }\r\n }\r\n}\r\n","import {join} from \"path\";\r\nimport {json} from \"body-parser\";\r\nimport {verify} from \"jsonwebtoken\";\r\nimport {container, DependencyContainer} from \"tsyringe\";\r\nimport {Action, HttpError, useContainer as useRoutingContainer, useExpressServer} from \"routing-controllers\";\r\nimport {useContainer as useSocketContainer, useSocketServer} from \"socket-controllers\";\r\n\r\nimport {getApiDocs} from \"./rest-openapi\";\r\n\r\nimport {\r\n DI_CONTAINER,\r\n EXPRESS,\r\n FIXTURE,\r\n HTTP_SERVER,\r\n IBackendConfig,\r\n IDependencyContainer,\r\n IPaginationParams,\r\n IRequest,\r\n IUser,\r\n JOB,\r\n Parameter,\r\n PARAMETER,\r\n Provider,\r\n SOCKET_SERVER,\r\n Type\r\n} from \"./common-types\";\r\n\r\nimport {AssetProcessor} from \"./services/asset-processor\";\r\nimport {AssetResolver} from \"./services/asset-resolver\";\r\nimport {Assets} from \"./services/assets\";\r\nimport {BackendProvider} from \"./services/backend-provider\";\r\nimport {Cache} from \"./services/cache\";\r\nimport {CacheProcessor} from \"./services/cache-processor\";\r\nimport {Configuration} from \"./services/configuration\";\r\nimport {EndpointProvider} from \"./services/endpoint-provider\";\r\nimport {Fixtures} from \"./services/fixtures\";\r\nimport {Gallery} from \"./services/gallery\";\r\nimport {GalleryCache} from \"./services/gallery-cache\";\r\nimport {IdGenerator} from \"./services/id-generator\";\r\nimport {JobManager} from \"./services/job-manager\";\r\nimport {LazyAssets} from \"./services/lazy-assets\";\r\nimport {MailSender} from \"./services/mail-sender\";\r\nimport {MemoryCache} from \"./services/memory-cache\";\r\nimport {MongoConnector} from \"./services/mongo-connector\";\r\nimport {Progresses} from \"./services/progresses\";\r\nimport {TemplateRenderer} from \"./services/template-renderer\";\r\nimport {TranslationProvider} from \"./services/translation-provider\";\r\nimport {Translator} from \"./services/translator\";\r\nimport {UserManager} from \"./services/user-manager\";\r\n\r\nimport {AssetsController} from \"./rest-controllers/assets.controller\";\r\nimport {AuthController} from \"./rest-controllers/auth.controller\";\r\nimport {GalleryController} from \"./rest-controllers/gallery.controller\";\r\nimport {ProgressesController} from \"./rest-controllers/progresses.controller\";\r\n\r\nimport {ErrorHandlerMiddleware} from \"./rest-middlewares/error-handler.middleware\";\r\nimport {ContainerMiddleware} from \"./rest-middlewares/container.middleware\";\r\nimport {LanguageMiddleware} from \"./rest-middlewares/language.middleware\";\r\nimport {RequestEndedMiddleware} from \"./rest-middlewares/request-ended.middleware\";\r\nimport {RequestStartedMiddleware} from \"./rest-middlewares/request-started.middleware\";\r\n\r\nimport {ProgressController} from \"./socket-controllers/progress.controller\";\r\n\r\nimport {CompressionMiddleware} from \"./socket-middlewares/compression.middleware\";\r\nimport {diContainers, isFunction, isString, isType, valueToPromise} from \"./utils\";\r\nimport {DiContainer} from \"./utilities/di-container\";\r\nimport {setupStatic} from \"./static\";\r\n\r\nexport {\r\n FilterPredicate,\r\n isNullOrUndefined,\r\n isDefined,\r\n getType,\r\n isObject,\r\n isArray,\r\n isBoolean,\r\n isDate,\r\n isPrimitive,\r\n isString,\r\n isFunction,\r\n isConstructor,\r\n isType,\r\n isInterface,\r\n ucFirst,\r\n lcFirst,\r\n isObjectId,\r\n firstItem,\r\n lastItem,\r\n regroup,\r\n uniqueItems,\r\n getValue,\r\n groupBy,\r\n convertValue,\r\n injectServices,\r\n paginate,\r\n lookupStages,\r\n letsLookupStage,\r\n hydratePopulated,\r\n paginateAggregations,\r\n toImage,\r\n bufferToStream,\r\n streamToBuffer,\r\n copyStream,\r\n mkdirRecursive,\r\n deleteFile,\r\n readFile,\r\n readAndDeleteFile,\r\n writeFile,\r\n valueToPromise,\r\n promiseTimeout,\r\n getConstructorName,\r\n getFunctionParams,\r\n proxyFunction,\r\n proxyFunctions,\r\n ResolveEntity,\r\n getFileName,\r\n getExtension,\r\n idToString,\r\n createTransformer,\r\n broadcast,\r\n rand,\r\n random,\r\n multiSubscription,\r\n observableFromFunction,\r\n padLeft,\r\n padRight,\r\n deleteFromBucket,\r\n filter,\r\n copy,\r\n assign,\r\n md5,\r\n runCommand,\r\n ConsoleColor,\r\n IJsonColors,\r\n colorize,\r\n jsonHighlight,\r\n replaceSpecialChars\r\n} from \"./utils\";\r\n\r\nexport {IsFile, IsObjectId} from \"./validators\";\r\n\r\nexport {\r\n FIXTURE,\r\n JOB,\r\n EXPRESS,\r\n HTTP_SERVER,\r\n SOCKET_SERVER,\r\n PARAMETER,\r\n DI_CONTAINER,\r\n Type,\r\n FactoryProvider,\r\n IDependencyContainer,\r\n ClassBasedProvider,\r\n ValueBasedProvider,\r\n FactoryBasedProvider,\r\n TokenBasedProvider,\r\n SyringeProvider,\r\n Provider,\r\n IFixture,\r\n SchemaConverter,\r\n ParamResolver,\r\n Parameter,\r\n SocketParam,\r\n SocketParams,\r\n ISocketMessage,\r\n IMessageBridge,\r\n IJob,\r\n IJobTask,\r\n JobParams,\r\n JobScheduleRange,\r\n JobScheduleTime,\r\n IProgress,\r\n IAssetCropInfo,\r\n IAssetMeta,\r\n IAssetImageParams,\r\n IAsset,\r\n ILazyAsset,\r\n IUser,\r\n IClientSocket,\r\n IRequestBase,\r\n IRequest,\r\n IGalleryImage,\r\n IGallerySize,\r\n IGalleryImageHandler,\r\n ITranslations,\r\n IPaginationMeta,\r\n IPaginationBase,\r\n IPagination,\r\n IPaginationParams,\r\n FontFormat,\r\n IFileType,\r\n IBackendConfig\r\n} from \"./common-types\";\r\n\r\nexport {AssetProcessor} from \"./services/asset-processor\";\r\nexport {AssetResolver} from \"./services/asset-resolver\";\r\nexport {Assets} from \"./services/assets\";\r\nexport {BackendProvider} from \"./services/backend-provider\";\r\nexport {Cache} from \"./services/cache\";\r\nexport {CacheProcessor} from \"./services/cache-processor\";\r\nexport {Configuration} from \"./services/configuration\";\r\nexport {EndpointProvider} from \"./services/endpoint-provider\";\r\nexport {Fixtures} from \"./services/fixtures\";\r\nexport {Gallery} from \"./services/gallery\";\r\nexport {GalleryCache} from \"./services/gallery-cache\";\r\nexport {IdGenerator} from \"./services/id-generator\";\r\nexport {JobManager} from \"./services/job-manager\";\r\nexport {LazyAssets} from \"./services/lazy-assets\";\r\nexport {MailSender} from \"./services/mail-sender\";\r\nexport {MemoryCache} from \"./services/memory-cache\";\r\nexport {MongoConnector} from \"./services/mongo-connector\";\r\nexport {Progresses} from \"./services/progresses\";\r\nexport {TemplateRenderer} from \"./services/template-renderer\";\r\nexport {TranslationProvider} from \"./services/translation-provider\";\r\nexport {Translator} from \"./services/translator\";\r\nexport {UserManager} from \"./services/user-manager\";\r\n\r\nexport {AuthController} from \"./rest-controllers/auth.controller\";\r\nexport {GalleryController} from \"./rest-controllers/gallery.controller\";\r\n\r\nexport {ErrorHandlerMiddleware} from \"./rest-middlewares/error-handler.middleware\";\r\nexport {LanguageMiddleware} from \"./rest-middlewares/language.middleware\";\r\n\r\nexport {LazyAssetGenerator} from \"./utilities/lazy-asset-generator\";\r\n\r\nasync function resolveUser(container: DependencyContainer, req: IRequest): Promise<IUser> {\r\n if (req.user) return req.user;\r\n const auth = req.header(\"Authorization\") || \"\";\r\n let payload = null;\r\n try {\r\n const config = container.resolve(Configuration);\r\n payload = verify(auth.split(\" \")[1], config.resolve(\"jwtSecret\")) as any;\r\n } catch (e) {\r\n throw new HttpError(401, `Authentication failed. (${e.message})`);\r\n }\r\n if (!payload) {\r\n throw new HttpError(401, `Authentication failed. (Maybe invalid token)`);\r\n }\r\n req.user = await container.resolve(UserManager).getById(payload.id);\r\n return req.user;\r\n}\r\n\r\nexport function createServices(): IDependencyContainer {\r\n // List of parameters\r\n const params = [\r\n new Parameter(\"templatesDir\", join(__dirname, \"templates\")),\r\n new Parameter(\"galleryDir\", join(__dirname, \"gallery\")),\r\n new Parameter(\"cacheDir\", join(__dirname, \"cache\")),\r\n new Parameter(\"defaultLanguage\", \"en\"),\r\n new Parameter(\"smtpHost\", \"smtp.sendgrid.net\"),\r\n new Parameter(\"smtpPort\", 587),\r\n new Parameter(\"smtpUser\", \"apikey\"),\r\n new Parameter(\"smtpPassword\", \"\"),\r\n new Parameter(\"mailSenderAddress\", \"info@stemy.hu\"),\r\n new Parameter(\"translationsTemplate\", \"https://translation.service/[lang]\"),\r\n new Parameter(\"jwtSecret\", \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9\"),\r\n new Parameter(\"mongoUri\", \"\"),\r\n new Parameter(\"mongoDb\", \"node-backend\"),\r\n new Parameter(\"mongoUser\", null),\r\n new Parameter(\"mongoPassword\", null),\r\n new Parameter(\"nodeEnv\", \"production\"),\r\n new Parameter(\"appPort\", 80),\r\n new Parameter(\"zmqPort\", 3000),\r\n new Parameter(\"zmqBackPort\", 3100),\r\n new Parameter(\"zmqRemoteHost\", \"tcp://127.0.0.1\"),\r\n new Parameter(\"isWorker\", false),\r\n new Parameter(\"mainEndpoint\", \"\"),\r\n new Parameter(\"idChars\", \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"),\r\n new Parameter(\"idSeparator\", \"-\"),\r\n new Parameter(\"idPrefix\", \"ID-\"),\r\n new Parameter(\"idParts\", [4, 4]),\r\n new Parameter(\"jsonLimit\", \"250mb\"),\r\n new Parameter(\"jobTimeout\", 5 * 60 * 1000),\r\n new Parameter(\"cacheCollection\", \"cache\"),\r\n ];\r\n\r\n // Convert parameters to providers\r\n const paramProviders = params.map(p => {\r\n return {\r\n provide: PARAMETER,\r\n useValue: p\r\n }\r\n });\r\n\r\n // List of services\r\n const services = [\r\n AssetProcessor,\r\n AssetResolver,\r\n Assets,\r\n BackendProvider,\r\n Cache,\r\n CacheProcessor,\r\n Configuration,\r\n EndpointProvider,\r\n Fixtures,\r\n Gallery,\r\n GalleryCache,\r\n IdGenerator,\r\n JobManager,\r\n LazyAssets,\r\n MailSender,\r\n MemoryCache,\r\n MongoConnector,\r\n Progresses,\r\n TemplateRenderer,\r\n TranslationProvider,\r\n Translator,\r\n UserManager\r\n ] as Type<any>[];\r\n\r\n // Create container\r\n const diContainer = new DiContainer(container.createChildContainer());\r\n paramProviders.forEach(provider => {\r\n diContainer.register(provider.provide, provider);\r\n });\r\n services.forEach(service => {\r\n if (!container.isRegistered(service))\r\n diContainer.register(service, service);\r\n });\r\n return diContainer;\r\n}\r\n\r\nexport async function setupBackend(config: IBackendConfig, providers?: Provider<any>[], parent?: IDependencyContainer): Promise<IDependencyContainer> {\r\n\r\n providers = Array.isArray(providers) ? providers : [];\r\n parent = parent || createServices();\r\n\r\n // Create fixtures\r\n const fixtureTypes = (config.fixtures || []);\r\n const fixtureProviders = fixtureTypes.map(fixture => {\r\n return {\r\n provide: FIXTURE,\r\n useClass: fixture\r\n };\r\n });\r\n\r\n // Create params\r\n const paramProviders = (config.params || []).map(p => {\r\n return {\r\n provide: PARAMETER,\r\n useValue: p\r\n }\r\n });\r\n\r\n // Create jobs\r\n const jobProviders = (config.jobs || []).map(jobType => {\r\n return {\r\n provide: JOB,\r\n useValue: jobType\r\n };\r\n });\r\n\r\n // Setup rest API\r\n const restOptions = config.restOptions || {};\r\n restOptions.defaultErrorHandler = false;\r\n restOptions.cors = Object.assign({\r\n credentials: true,\r\n exposedHeaders: [\"content-disposition\"],\r\n origin: (origin, callback) => {\r\n callback(null, true);\r\n }\r\n }, restOptions.cors || {});\r\n restOptions.routePrefix = config.routePrefix || \"/api\";\r\n restOptions.routePrefix = restOptions.routePrefix == \"/\" ? \"\" : restOptions.routePrefix;\r\n restOptions.middlewares = [ErrorHandlerMiddleware, ContainerMiddleware, LanguageMiddleware, RequestStartedMiddleware, RequestEndedMiddleware]\r\n .concat(restOptions.middlewares as any || []);\r\n restOptions.controllers = [AssetsController, AuthController, GalleryController, ProgressesController]\r\n .concat(restOptions.controllers as any || []);\r\n\r\n // Setup socket API\r\n const socketOptions = config.socketOptions || {};\r\n socketOptions.middlewares = [CompressionMiddleware].concat(socketOptions.middlewares as any || []);\r\n socketOptions.controllers = [ProgressController].concat(socketOptions.controllers as any || []);\r\n\r\n // Create providers\r\n\r\n const allProviders: Provider<any>[] = [];\r\n\r\n // Add multi tokens to sub container\r\n [PARAMETER].forEach(provide => {\r\n const values = parent.resolveAll(provide);\r\n values.forEach(useValue => {\r\n allProviders.push({provide, useValue});\r\n });\r\n });\r\n\r\n // Add other providers\r\n allProviders.push(\r\n ...fixtureTypes,\r\n ...fixtureProviders,\r\n ...paramProviders,\r\n ...jobProviders,\r\n ...restOptions.middlewares as Type<any>[],\r\n ...restOptions.controllers as Type<any>[],\r\n ...socketOptions.middlewares as Type<any>[],\r\n ...socketOptions.controllers as Type<any>[],\r\n ...providers,\r\n {\r\n provide: EXPRESS,\r\n useFactory: (container: DependencyContainer) => {\r\n return container.resolve(BackendProvider).express;\r\n }\r\n },\r\n {\r\n provide: HTTP_SERVER,\r\n useFactory: (container: DependencyContainer) => {\r\n return container.resolve(BackendProvider).server;\r\n }\r\n },\r\n {\r\n provide: SOCKET_SERVER,\r\n useFactory: (container: DependencyContainer) => {\r\n return container.resolve(BackendProvider).io;\r\n }\r\n }\r\n )\r\n\r\n // Create DI container\r\n\r\n const diContainer = parent.createChildContainer();\r\n\r\n allProviders.forEach(provider => {\r\n if (isType(provider)) {\r\n if (container.isRegistered(provider)) return;\r\n diContainer.register(provider, provider);\r\n return;\r\n }\r\n diContainer.register(provider.provide, provider as any);\r\n });\r\n\r\n diContainer.register(DI_CONTAINER, {\r\n useValue: diContainer\r\n });\r\n\r\n diContainers.appContainer = diContainers.appContainer || diContainer;\r\n\r\n // Authentication\r\n restOptions.authorizationChecker = async (action: Action, roles: any[]) => {\r\n const user = await resolveUser(diContainer, action.request);\r\n if (!user) {\r\n throw new HttpError(401, \"Authentication failed. (User can't be found.)\");\r\n }\r\n const userRoles = Array.isArray(user.roles) ? user.roles : [];\r\n if (Array.isArray(roles) && roles.length > 0) {\r\n let lastError = null;\r\n for (let role of roles) {\r\n if (isFunction(role)) {\r\n try {\r\n if (await valueToPromise(role(user, action))) {\r\n return true;\r\n }\r\n } catch (e) {\r\n lastError = e;\r\n }\r\n }\r\n if (userRoles.indexOf(role) >= 0) return true;\r\n }\r\n const error = !lastError || (!lastError.message && !isString(lastError))\r\n ? \"User doesn't have access to this resource\"\r\n : lastError.message || lastError;\r\n throw new HttpError(401, `Authentication failed. (${error})`);\r\n }\r\n return true;\r\n };\r\n restOptions.currentUserChecker = async (action: Action) => {\r\n return resolveUser(diContainer, action.request);\r\n };\r\n\r\n // Final setup\r\n const configuration = diContainer.resolve(Configuration);\r\n const bp = diContainer.resolve(BackendProvider);\r\n\r\n if (config.restOptions) {\r\n bp.express.use(json({\r\n limit: configuration.hasParam(\"jsonLimit\")\r\n ? configuration.resolve(\"jsonLimit\")\r\n : \"250mb\"\r\n }));\r\n useRoutingContainer(diContainer);\r\n useExpressServer(bp.express, restOptions);\r\n // Setup rest ai docs\r\n bp.express.get(\"/api-docs\", (req, res) => {\r\n res.status(200).end(getApiDocs(config.customValidation));\r\n });\r\n }\r\n if (config.socketOptions) {\r\n useSocketContainer(diContainer);\r\n useSocketServer(bp.io, socketOptions);\r\n }\r\n\r\n // Connect to mongo if necessary\r\n if (configuration.hasParam(\"mongoUri\") && configuration.resolve(\"mongoUri\")) {\r\n console.log(\"Connecting to MongoDB...\");\r\n const connector = diContainer.resolve(MongoConnector);\r\n await connector.connect();\r\n console.log(\"Successfully connected to MongoDB.\");\r\n }\r\n\r\n await setupStatic(config.rootFolder, diContainer);\r\n\r\n return diContainer;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["sharp","getMongoValue","setMongoValue","fsReadFile","fsWriteFile","__awaiter","execChildProcess","__decorate","__param","__metadata","filter","uuidv4","readFile","writeFile","Middleware","serveStatic","useRoutingContainer","useSocketContainer"],"mappings":"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"}
|