@stemy/backend 3.3.1 → 3.4.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.
@@ -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/requests/asset-image-params.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 {DependencyContainer, InjectionToken} 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, ObjectId} from \"mongodb\";\r\nimport {Document, Expression, FilterQuery, Model, model, PipelineStage, Query, 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 sharp_, {Region} from \"sharp\";\r\nimport {Action, BadRequestError, createParamDecorator, HttpError} from \"routing-controllers\";\r\nimport {\r\n IAssetCropInfo,\r\n IAssetImageParams,\r\n IAssetMeta,\r\n IClientSocket,\r\n IMatchField,\r\n IPaginationBase,\r\n IPaginationParams,\r\n IProjectOptions,\r\n IRequest,\r\n IUnwindOptions,\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: Query<any, any> = 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): [PipelineStage.Lookup, PipelineStage.Unwind] {\r\n as = as || localField.replace(\"Id\", \"\");\r\n const stages: [PipelineStage.Lookup, PipelineStage.Unwind] = [\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 $unwind: {\r\n path: `$${as}`,\r\n preserveNullAndEmptyArrays: true\r\n }\r\n }\r\n ];\r\n if (!shouldUnwind) {\r\n stages.splice(1, 1);\r\n }\r\n return stages;\r\n}\r\n\r\nexport function letsLookupStage(from: string, pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out | PipelineStage.Search>[], as: string = null, letFields: any = null): PipelineStage.Lookup {\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 matchStage(match: Expression | Record<string, Expression>): PipelineStage.Match {\r\n return {$match: match};\r\n}\r\n\r\nexport function matchField(field: string, filter: any, when: boolean): IMatchField {\r\n return {field, filter, when};\r\n}\r\n\r\nexport function matchFieldStages(...fields: IMatchField[]): ReadonlyArray<PipelineStage.Match> {\r\n const match = {};\r\n fields.forEach(field => {\r\n if (field.when) {\r\n match[field.field] = field.filter;\r\n }\r\n });\r\n return Object.keys(match).length > 0 ? [matchStage(match)] : [];\r\n}\r\n\r\nexport function projectStage(fields: IProjectOptions): PipelineStage.Project {\r\n return {$project: fields};\r\n}\r\n\r\nexport function unwindStage(fieldOrOpts: string | IUnwindOptions): PipelineStage.Unwind {\r\n return {$unwind: fieldOrOpts};\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) as any, 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: PipelineStage[], 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: PipelineStage.Sort[] = !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 | boolean | 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<void> {\r\n return new Promise<void>((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<void> {\r\n return new Promise<void>((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): () => any {\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: Query<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 let doc: Document = null;\r\n if (isFunction(extraCheck)) {\r\n try {\r\n doc = await valueToPromise(extraCheck(query, action));\r\n } catch (e) {\r\n throw new BadRequestError(`${modelName} check error: ${e.message || e}`);\r\n }\r\n } else {\r\n doc = await query;\r\n }\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 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 instanceof Types.ObjectId\r\n ? value.toHexString()\r\n : (isString(value) ? value : value || 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\nimport {AnyExpression, Expression} from \"mongoose\";\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// --- Mongo interfaces and types\r\n\r\nexport interface IMatchField {\r\n field: string;\r\n filter: any;\r\n when: boolean;\r\n}\r\n\r\nexport interface IProjectOptions {\r\n [field: string]: AnyExpression | Expression | IProjectOptions;\r\n}\r\n\r\nexport interface IUnwindOptions {\r\n path: string;\r\n includeArrayIndex?: string;\r\n preserveNullAndEmptyArrays?: boolean;\r\n}\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 | boolean | IAssetCropInfo;\r\n cropAfter?: string | boolean | 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<void>;\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\") as string, {\r\n dbName: this.configuration.resolve(\"mongoDb\"),\r\n user: this.configuration.resolve(\"mongoUser\"),\r\n pass: this.configuration.resolve(\"mongoPassword\")\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<void>(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<void> {\r\n return new Promise<void>(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 {IAssetImageParams} from \"../common-types\";\r\nimport {IsBoolean, IsOptional, Max, Min} from \"class-validator\";\r\n\r\nexport class AssetImageParams implements IAssetImageParams {\r\n\r\n @Min(-360)\r\n @Max(360)\r\n @IsOptional()\r\n rotation?: number = 0;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n canvasScaleX?: number = 1;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n canvasScaleY?: number = 1;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n scaleX?: number = 1;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n scaleY?: number = 1;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n lazy?: boolean = false;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n crop?: boolean = false;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n cropBefore?: boolean = false;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n cropAfter?: boolean = false;\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} from \"../common-types\";\r\nimport {Assets} from \"../services/assets\";\r\nimport {AssetResolver} from \"../services/asset-resolver\";\r\nimport {AssetImageParams} from \"../requests/asset-image-params\";\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: AssetImageParams, @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: AssetImageParams, @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: AssetImageParams, @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 matchStage,\r\n matchField,\r\n matchFieldStages,\r\n projectStage,\r\n unwindStage,\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 IMatchField,\r\n IProjectOptions,\r\n IUnwindOptions,\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 {AssetImageParams} from \"./requests/asset-image-params\";\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","ObjectId","__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/requests/asset-image-params.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/static.ts","../../src/utilities/base-doc.ts","../../src/utilities/tree.ts","../../src/utilities/di-container.ts","../../src/utilities/lazy-asset-generator.ts","../../src/utilities/mongoose.ts","../../src/public_api.ts","../../src/stemy-backend.ts"],"sourcesContent":["import {exec as execChildProcess} from \"child_process\";\r\nimport {createHash} from \"crypto\";\r\nimport {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, ObjectId} from \"mongodb\";\r\nimport {Document, Types} from \"mongoose\";\r\nimport {PassThrough, Readable, ReadableOptions} from \"stream\";\r\nimport sharp_, {Region} from \"sharp\";\r\nimport {IAssetCropInfo, IAssetImageParams, IAssetMeta, IClientSocket, Type} 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\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 | boolean | 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<void> {\r\n return new Promise<void>((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<void> {\r\n return new Promise<void>((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 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 instanceof Types.ObjectId\r\n ? value.toHexString()\r\n : (isString(value) ? value : value || 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\nimport {AnyExpression, Expression} from \"mongoose\";\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// --- Useful generic types ---\r\n\r\nexport type Constructor<T = object> = new (...args: any[]) => T\r\n\r\nexport type InferGeneric<T> = T extends Type<infer B> ? B : never;\r\n\r\nexport type PickMatching<T, V> = { [K in keyof T as T[K] extends V ? K : never]: T[K] }\r\n\r\nexport type OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R ? (...args: P) => R : never;\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// --- Mongo interfaces and types\r\n\r\nexport interface IMatchField {\r\n field: string;\r\n filter: any;\r\n when: boolean;\r\n}\r\n\r\nexport interface IProjectOptions {\r\n [field: string]: AnyExpression | Expression | IProjectOptions;\r\n}\r\n\r\nexport interface IUnwindOptions {\r\n path: string;\r\n includeArrayIndex?: string;\r\n preserveNullAndEmptyArrays?: boolean;\r\n}\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 | boolean | IAssetCropInfo;\r\n cropAfter?: string | boolean | 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<void>;\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\nimport {getType} from \"../utils\";\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\") as string, {\r\n dbName: this.configuration.resolve(\"mongoDb\"),\r\n user: this.configuration.resolve(\"mongoUser\"),\r\n pass: this.configuration.resolve(\"mongoPassword\")\r\n })).connection;\r\n this.db = this.conn.db as any;\r\n console.log(\"DB INSTANCE\", getType(this.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<any>) {\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<Partial<IAsset>>;\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<Partial<IProgress>>;\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<Partial<ILazyAsset>>;\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<void>(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<void> {\r\n return new Promise<void>(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 {IAssetImageParams} from \"../common-types\";\r\nimport {IsBoolean, IsOptional, Max, Min} from \"class-validator\";\r\n\r\nexport class AssetImageParams implements IAssetImageParams {\r\n\r\n @Min(-360)\r\n @Max(360)\r\n @IsOptional()\r\n rotation?: number = 0;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n canvasScaleX?: number = 1;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n canvasScaleY?: number = 1;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n scaleX?: number = 1;\r\n\r\n @Min(0.0001)\r\n @IsOptional()\r\n scaleY?: number = 1;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n lazy?: boolean = false;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n crop?: boolean = false;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n cropBefore?: boolean = false;\r\n\r\n @IsBoolean()\r\n @IsOptional()\r\n cropAfter?: boolean = false;\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} from \"../common-types\";\r\nimport {Assets} from \"../services/assets\";\r\nimport {AssetResolver} from \"../services/asset-resolver\";\r\nimport {AssetImageParams} from \"../requests/asset-image-params\";\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: AssetImageParams, @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: AssetImageParams, @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: AssetImageParams, @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 {\r\n Authorized,\r\n Body,\r\n Controller,\r\n CurrentUser,\r\n Get,\r\n HttpError,\r\n Post,\r\n Res,\r\n UnauthorizedError\r\n} 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 let user: IUser = null;\r\n try {\r\n user = await this.userManager.getByCredentials(credentials);\r\n } catch (reason) {\r\n throw new HttpError(401, reason);\r\n }\r\n const valid = !user ? false : await compare(credentials.password, user.password);\r\n if (valid !== true)\r\n throw new UnauthorizedError(`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 }\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 {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 {RefType, Types} from \"mongoose\";\r\nimport {DocumentType, getModelForClass, ReturnModelType} from \"@typegoose/typegoose\";\r\nimport {Constructor} from \"../common-types\";\r\n\r\nexport abstract class BaseDoc<IDType extends RefType = Types.ObjectId> {\r\n\r\n _id?: IDType;\r\n\r\n /**\r\n * This getter/setter doesn't exist if \"schemaOptions.id\" being set to \"false\"\r\n */\r\n id?: string;\r\n\r\n /**\r\n * This getter doesn't exist if \"schemaOptions.timestamps\" being set to \"false\"\r\n */\r\n createdAt?: Date;\r\n\r\n /**\r\n * This getter doesn't exist if \"schemaOptions.timestamps\" being set to \"false\"\r\n */\r\n updatedAt?: Date;\r\n\r\n /**\r\n * Returns the Document as JSON\r\n */\r\n toJSON?(): any;\r\n\r\n /**\r\n * Returns the Document as an Object\r\n */\r\n toObject?(): any;\r\n\r\n /**\r\n * Casts this to DocumentType<this> to allow using document methods in get/set-s\r\n */\r\n cast(): DocumentType<this> {\r\n return this as any;\r\n }\r\n\r\n /**\r\n * Gets a pre-compiled model from typegoose cache by its class type\r\n * @param type\r\n */\r\n model<T extends Constructor<any>>(type: T): ReturnModelType<T> {\r\n return getModelForClass(type);\r\n }\r\n}\r\n\r\n// @ts-ignore\r\nexport type PrimitiveArray<T> = Types.Array<T>;\r\n\r\n// @ts-ignore\r\nexport const PrimitiveArray = Types.Array;\r\n\r\nexport type DocumentArray<T extends BaseDoc> = Types.DocumentArray<DocumentType<T>>;\r\n\r\nexport const DocumentArray = Types.DocumentArray;\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 {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 {Document, FilterQuery, model, Model, PipelineStage, Query, Schema, Types} from \"mongoose\";\r\nimport {getValue as getMongoValue, setValue as setMongoValue} from \"mongoose/lib/utils\";\r\nimport {DocumentType, ReturnModelType} from \"@typegoose/typegoose\";\r\nimport {Action, BadRequestError, createParamDecorator, HttpError} from \"routing-controllers\";\r\nimport {InjectionToken} from \"tsyringe\";\r\nimport {\r\n IMatchField,\r\n InferGeneric,\r\n IPaginationBase,\r\n IPaginationParams,\r\n IProjectOptions,\r\n IRequest,\r\n IUnwindOptions,\r\n Type\r\n} from \"../common-types\";\r\nimport {diContainers, isArray, isFunction, isObject, isString, valueToPromise} from \"../utils\";\r\n\r\nconst pluginsKey = \"typegoose:plugins\";\r\n\r\ninterface IPluginWithOptions {\r\n mongoosePlugin: Function;\r\n options: any;\r\n}\r\n\r\n/**\r\n * A mongoose/typegoose plugin to inject services from the main di container to a schema as virtuals\r\n * @param schema\r\n * @param services\r\n */\r\nexport function injectServices(schema: Schema<any>, services?: { [prop: string]: InjectionToken<any> }): void {\r\n const serviceMap: { [prop: string]: any } = {};\r\n if (!isObject(services)) {\r\n throw new Error(`services object should be defined to inject services to schema!`)\r\n }\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\n/**\r\n * Decorates a property to inject a service with the help of the injectServices mongoose/typegoose plugin\r\n * @param token optional InjectionToken to use\r\n * @return PropertyDecorator\r\n */\r\nexport function service(token?: InjectionToken<any>): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n const propertyType = Reflect.getOwnMetadata(\"design:type\", target, propertyKey);\r\n const plugins = Array.from(Reflect.getMetadata(pluginsKey, target.constructor) ?? []) as IPluginWithOptions[];\r\n let plugin = plugins.find(t => t.mongoosePlugin === injectServices);\r\n if (!plugin) {\r\n plugin = { mongoosePlugin: injectServices, options: {} };\r\n plugins.push(plugin);\r\n }\r\n plugin.options = Object.assign(plugin.options || {}, {[propertyKey]: token ?? propertyType});\r\n Reflect.defineMetadata(pluginsKey, plugins, target.constructor);\r\n };\r\n}\r\n\r\n/**\r\n * Paginate using a typegoose model using a simple where query and pagination params\r\n * @param model Typegoose model\r\n * @param where Simple query to filter the results\r\n * @param params Pagination params\r\n */\r\nexport function paginate<T extends Type<any>, U = InferGeneric<T>>(model: ReturnModelType<T>, where: FilterQuery<DocumentType<U>>, params: IPaginationParams): Promise<IPaginationBase<DocumentType<U>>> {\r\n return model.countDocuments(where).then(count => {\r\n let query: Query<any, any> = 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): [PipelineStage.Lookup, PipelineStage.Unwind] {\r\n as = as || localField.replace(\"Id\", \"\");\r\n const stages: [PipelineStage.Lookup, PipelineStage.Unwind] = [\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 $unwind: {\r\n path: `$${as}`,\r\n preserveNullAndEmptyArrays: true\r\n }\r\n }\r\n ];\r\n if (!shouldUnwind) {\r\n stages.splice(1, 1);\r\n }\r\n return stages;\r\n}\r\n\r\nexport function letsLookupStage(from: string, pipeline: Exclude<PipelineStage, PipelineStage.Merge | PipelineStage.Out | PipelineStage.Search>[], as: string = null, letFields: any = null): PipelineStage.Lookup {\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 matchStage(match: FilterQuery<any>): PipelineStage.Match {\r\n return {$match: match};\r\n}\r\n\r\nexport function matchField(field: string, filter: any, when: boolean): IMatchField {\r\n return {field, filter, when};\r\n}\r\n\r\nexport function matchFieldStages(...fields: IMatchField[]): ReadonlyArray<PipelineStage.Match> {\r\n const match = {};\r\n fields.forEach(field => {\r\n if (field.when) {\r\n match[field.field] = field.filter;\r\n }\r\n });\r\n return Object.keys(match).length > 0 ? [matchStage(match)] : [];\r\n}\r\n\r\nexport function projectStage(fields: IProjectOptions): PipelineStage.Project {\r\n return {$project: fields};\r\n}\r\n\r\nexport function unwindStage(fieldOrOpts: string | IUnwindOptions): PipelineStage.Unwind {\r\n return {$unwind: fieldOrOpts};\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) as any, 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 Type<any>, U = InferGeneric<T>>(model: ReturnModelType<T>, aggregations: PipelineStage[], params: IPaginationParams, metaProjection: any = {}): Promise<IPaginationBase<DocumentType<U>>> {\r\n const sortField = !isString(params.sort) || !params.sort ? null : (params.sort.startsWith(\"-\") ? params.sort.substr(1) : params.sort);\r\n const sortAggregation: PipelineStage.Sort[] = !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<DocumentType<U>>;\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) as any);\r\n return pagination;\r\n}\r\n\r\nexport function ResolveEntity<T extends Type<any>, U = InferGeneric<T>>(model: ReturnModelType<T>, extraCheck?: (query: Query<DocumentType<U>, any>, action: Action) => Promise<DocumentType<U>>): 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 let doc: Document = null;\r\n if (isFunction(extraCheck)) {\r\n try {\r\n doc = await valueToPromise(extraCheck(query, action));\r\n } catch (e) {\r\n throw new BadRequestError(`${modelName} check error: ${e.message || e}`);\r\n }\r\n } else {\r\n doc = await query;\r\n }\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 action.request[paramName] = doc;\r\n return doc;\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 {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 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 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 Constructor,\r\n InferGeneric,\r\n PickMatching,\r\n OmitFirstArg,\r\n IMatchField,\r\n IProjectOptions,\r\n IUnwindOptions,\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 {AssetImageParams} from \"./requests/asset-image-params\";\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 {BaseDoc, DocumentArray, PrimitiveArray} from \"./utilities/base-doc\";\r\nimport {DiContainer} from \"./utilities/di-container\";\r\nexport {LazyAssetGenerator} from \"./utilities/lazy-asset-generator\";\r\nexport {\r\n ResolveEntity,\r\n paginateAggregations,\r\n hydratePopulated,\r\n unwindStage,\r\n projectStage,\r\n matchFieldStages,\r\n matchField,\r\n matchStage,\r\n letsLookupStage,\r\n lookupStages,\r\n paginate,\r\n injectServices,\r\n service\r\n} from \"./utilities/mongoose\";\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","fsReadFile","fsWriteFile","execChildProcess","ObjectId","__decorate","__param","__metadata","filter","__awaiter","uuidv4","readFile","writeFile","Middleware","serveStatic","getMongoValue","setMongoValue","useRoutingContainer","useSocketContainer"],"mappings":"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"}