@stemy/backend 5.2.1 → 5.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stemy-backend.mjs","sources":["../../src/common-types.ts","../../src/services/asset-processor.ts","../../src/utils.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/logger.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/validators.ts","../../src/services/open-api.ts","../../src/services/fixtures.ts","../../src/services/backend-provider.ts","../../src/services/cache-processor.ts","../../src/services/cache.ts","../../src/services/endpoint-provider.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/terminal-manager.ts","../../src/services/token-generator.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-controllers/terminal-styles.ts","../../src/rest-controllers/terminal.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-controllers/terminal.ts","../../src/socket-controllers/terminal.controller.ts","../../src/socket-middlewares/compression.middleware.ts","../../src/utilities/tree.ts","../../src/utilities/di-container.ts","../../src/utilities/empty-job.ts","../../src/static.ts","../../src/commands/clear-command.ts","../../src/commands/fixtures-command.ts","../../src/commands/index.ts","../../src/fixtures/ttl.fixture.ts","../../src/fixtures/index.ts","../../src/services/drivers/asset-grid.driver.ts","../../src/services/drivers/asset-local.driver.ts","../../src/utilities/base-doc.ts","../../src/utilities/decorators.ts","../../src/utilities/lazy-asset-generator.ts","../../src/utilities/mongoose.ts","../../src/public_api.ts","../../src/stemy-backend.ts"],"sourcesContent":["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 {SocketControllers, 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, Writable} from \"stream\";\r\nimport {Moment} from \"moment\";\r\nimport {AnyExpression, Expression} from \"mongoose\";\r\nimport {ICommandArgs, ISuggestion, ITerminal as ITerminalBase} from \"@stemy/terminal-commands-addon\";\r\nimport {ObjectId} from \"bson\";\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// --- OpenApi ---\r\n\r\nexport type SchemaConverter = (meta: any, options: any) => SchemaObject;\r\n\r\nexport type OpenApiValidation = SchemaConverter | SchemaObject;\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 TERMINAL_COMMAND: InjectionToken<ITerminalCommand> = Symbol.for(\"terminal-command-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 SOCKET_CONTROLLERS: InjectionToken<SocketControllers> = Symbol.for(\"socket-controllers-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\nexport const OPENAPI_VALIDATION: InjectionToken<OpenApiValidation> = Symbol.for(\"openapi-validation-token\");\r\n\r\nexport const LOCAL_DIR: InjectionToken<string> = Symbol.for('asset-local-dir');\r\n\r\nexport const ASSET_DRIVER: InjectionToken<IAssetDriver> = Symbol.for('assets-driver');\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(output?: IFixtureOutput): Promise<any>;\r\n}\r\n\r\nexport interface IFixtureOutput {\r\n write(message: string): void;\r\n writeln(message: string): void;\r\n}\r\n\r\nexport type ParamResolver = (value: string, helper?: (param: string) => any) => 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\n// --- JOBS ---\r\n\r\nexport interface IJob {\r\n process(messaging?: IMessageBridge): Promise<any>;\r\n}\r\n\r\nexport interface IJobTask {\r\n start: () => void;\r\n stop: () => void;\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\n// --- COMMANDS & TERMINAL ---\r\n\r\nexport interface ITerminalFile extends ISuggestion {\r\n content?: string;\r\n buffer?: Buffer;\r\n accept?: string;\r\n}\r\n\r\nexport interface ITerminal extends ITerminalBase {\r\n suggestFiles(accept: string): Promise<ITerminalFile[]>;\r\n downloadFile(filename: string, buffer: Buffer): Promise<void>;\r\n}\r\n\r\nexport interface ITerminalCommand {\r\n name?: string;\r\n execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;\r\n suggest?(args: ICommandArgs, terminal: ITerminal): Promise<Array<string | ISuggestion>>;\r\n}\r\n\r\n// --- ASSETS ---\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 IImageMeta {\r\n crop?: IAssetCropInfo;\r\n cropBefore?: IAssetCropInfo;\r\n cropAfter?: IAssetCropInfo;\r\n canvasScaleX?: number;\r\n canvasScaleY?: number;\r\n}\r\n\r\nexport interface IAssetMeta extends IImageMeta {\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 preview?: ObjectId | string;\r\n publicUrl?: string;\r\n\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 setMeta(meta: Partial<IAssetMeta>): Promise<any>;\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 IAssetUploadStream extends Writable {\r\n id?: ObjectId;\r\n done?: boolean;\r\n}\r\n\r\nexport interface IAssetUploadOpts {\r\n chunkSizeBytes?: number;\r\n metadata?: IAssetMeta;\r\n contentType?: string;\r\n}\r\n\r\nexport interface IAssetDriver {\r\n readonly metaCollection: string;\r\n openUploadStream(filename: string, opts?: IAssetUploadOpts): IAssetUploadStream;\r\n openDownloadStream(id: ObjectId): Readable;\r\n delete(id: ObjectId): Promise<void>;\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 createdAt: Date;\r\n updatedAt: Date;\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 type RoutingOptions = RoutingControllersOptions;\r\n\r\nexport type SocketOptions = Omit<SocketControllersOptions, \"container\">;\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 commands?: Type<ITerminalCommand>[];\r\n restOptions?: RoutingOptions;\r\n socketOptions?: SocketOptions;\r\n customValidation?: SchemaConverter | SchemaObject;\r\n assetLocalDir?: string;\r\n assetDriver?: Type<IAssetDriver>;\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport fontKit_, {Font} from \"fontkit\";\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 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 {mkdir, readFile as fsReadFile, unlink, writeFile as fsWriteFile} from \"fs\";\r\nimport {gzip, gunzip, ZlibOptions} from \"zlib\";\r\nimport {basename, dirname} from \"path\";\r\nimport {fileURLToPath} from \"url\";\r\nimport {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 {GridFSBucket, ObjectId} from \"mongodb\";\r\nimport {Document} from \"mongoose\";\r\nimport mongoose from \"mongoose\";\r\nimport {PassThrough, Readable, ReadableOptions} from \"stream\";\r\nimport sharp_, {Region} from \"sharp\";\r\nimport {HttpError} from \"routing-controllers\";\r\nimport axios from \"axios\";\r\nimport fileType from \"file-type/core\";\r\nimport {\r\n IAssetCropInfo,\r\n IAssetImageParams,\r\n IAssetMeta,\r\n IClientSocket,\r\n IFileType,\r\n ParamResolver,\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 isBuffer(value: any): value is Buffer {\r\n return value instanceof Buffer;\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 createIdString(): any {\r\n return new ObjectId().toHexString();\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 mongoose.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 socketServer.sockets.sockets.forEach((client: IClientSocket) => {\r\n cb(client);\r\n });\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 camelCaseToDash(str: string): string {\r\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function gzipPromised(data: string, opts?: ZlibOptions): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n gzip(data, opts, (err, result) => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(result.toString(\"base64\"));\r\n });\r\n });\r\n}\r\n\r\nexport function gunzipPromised(data: string, opts?: ZlibOptions): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n gunzip(Buffer.from(data, \"base64\"), opts, (err, result) => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(result.toString(\"utf8\"));\r\n });\r\n });\r\n}\r\n\r\nexport function deleteFromBucket(bucket: GridFSBucket, id: ObjectId | string): Promise<string> {\r\n const fileId = id instanceof ObjectId ? id : new ObjectId(id);\r\n return new Promise<string>(((resolve, reject) => {\r\n if (!id) {\r\n // We don't care about empty id\r\n resolve(null);\r\n return;\r\n }\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, copies: Map<any, any>): any {\r\n if (isPrimitive(source) || isDate(source) || isFunction(source)) return source;\r\n if (copies.has(source)) return copies.get(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, copies);\r\n else\r\n target.push(copyRecursive(null, item, predicate, copies));\r\n });\r\n copies.set(source, target);\r\n return target;\r\n }\r\n if (isBuffer(source)) return Buffer.from(source);\r\n\r\n // If object defines __shouldCopy as false, then don't copy it\r\n if (source.__shouldCopy === false) return source;\r\n // Copy object\r\n const shouldCopy = isFunction(source.__shouldCopy) ? source.__shouldCopy : () => true;\r\n if (isConstructor(source.constructor)) {\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 // Set to copies to prevent circular references\r\n copies.set(source, 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, copies));\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 keys.forEach(key => {\r\n if (!predicate(source[key], key, target, source)) return;\r\n target[key] = !shouldCopy(key, source[key]) ? source[key] : copyRecursive(target[key], source[key], predicate, copies);\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 || defaultPredicate, new Map());\r\n}\r\n\r\nexport function copy<T>(obj: T): T {\r\n return copyRecursive(null, obj, defaultPredicate, new Map());\r\n}\r\n\r\nexport function assign<T>(target: T, source: any, predicate?: FilterPredicate): T {\r\n return copyRecursive(target, source, predicate, new Map());\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\r\nexport function regexEscape(str: string): string {\r\n return `${str}`.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n}\r\n\r\nexport function flatten(arr: any[]): any[] {\r\n return arr.reduce((flat, toFlatten) => {\r\n return flat.concat(isArray(toFlatten) ? flatten(toFlatten) : toFlatten);\r\n }, []);\r\n}\r\n\r\nexport function wrapError(e: any, message: string, httpCode: number = 500): Error {\r\n if (axios.isAxiosError(e)) {\r\n e.message = message;\r\n return e;\r\n }\r\n return new HttpError(httpCode, `${message}: ${e}`);\r\n}\r\n\r\nexport function getDirName(): string {\r\n if (typeof __dirname === \"undefined\") {\r\n const __filename = fileURLToPath(import.meta.url);\r\n return dirname(__filename);\r\n }\r\n return __dirname;\r\n}\r\n\r\nexport function prepareUrl(ending: string = \"/\"): ParamResolver {\r\n return url => {\r\n return url ? `${url.replace(/\\/+$/, \"\")}${ending}` : ending;\r\n }\r\n}\r\n\r\nexport const prepareUrlSlash = prepareUrl(\"/\");\r\n\r\nexport const prepareUrlEmpty = prepareUrl(\"\");\r\n\r\nfunction checkTextFileType(type: IFileType): boolean {\r\n return type.mime.indexOf(\"text\") >= 0 || type.mime.indexOf(\"xml\") >= 0;\r\n}\r\n\r\nfunction 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\nexport async function fileTypeFromBuffer(buffer: Buffer): Promise<IFileType> {\r\n const stream = bufferToStream(buffer);\r\n const type = (await fileType.fromStream(stream) ?? {ext: \"txt\", mime: \"text/plain\"}) as IFileType;\r\n if (checkTextFileType(type)) {\r\n return fixTextFileType(type, buffer);\r\n }\r\n return type;\r\n}\r\n\r\nexport async function fileTypeFromStream(buffer: Buffer): Promise<IFileType> {\r\n const stream = bufferToStream(buffer);\r\n return (await fileType.fromStream(stream) ?? {ext: \"txt\", mime: \"text/plain\"}) as IFileType;\r\n}\r\n","import {injectAll, singleton} from \"tsyringe\";\r\nimport dotenv from \"dotenv\";\r\n\r\nimport {PARAMETER, Parameter} from \"../common-types\";\r\nimport {colorize, ConsoleColor, convertValue, getType, isFunction} from \"../utils\";\r\n\r\n@singleton()\r\nexport class Configuration {\r\n\r\n protected paramMap: {[name: string]: Parameter};\r\n protected paramValues: {[name: string]: any};\r\n\r\n constructor(@injectAll(PARAMETER) params: Parameter[]) {\r\n dotenv.config();\r\n this.paramMap = {};\r\n this.paramValues = {};\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 protected resolveValue(param: Parameter, alreadyResolved: string[]): any {\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 const helper = (p: string) => this.resolveInternal(p, alreadyResolved);\r\n if (typeof envValue !== \"undefined\") {\r\n const value = isFunction(param.resolver)\r\n ? param.resolver(envValue, helper)\r\n : convertValue(envValue, getType(param.defaultValue));\r\n console.log(\r\n colorize(`Processing param value`, ConsoleColor.FgYellow),\r\n colorize(param.name, ConsoleColor.FgGreen),\r\n colorize(envName, ConsoleColor.FgBlue),\r\n `\"${envValue}\"`,\r\n value\r\n );\r\n return value;\r\n } else if (isFunction(param.resolver)) {\r\n const value = param.resolver(param.defaultValue, helper);\r\n console.log(\r\n colorize(`Processing default param value`, ConsoleColor.FgYellow),\r\n colorize(param.name, ConsoleColor.FgGreen),\r\n param.defaultValue,\r\n value\r\n );\r\n return value;\r\n }\r\n console.log(\r\n colorize(`Using default param value`, ConsoleColor.FgYellow),\r\n colorize(param.name, ConsoleColor.FgGreen),\r\n param.defaultValue,\r\n );\r\n return param.defaultValue;\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 return this.resolveInternal(name, []);\r\n }\r\n\r\n protected resolveInternal(name: string, alreadyResolved: string[]): any {\r\n if (alreadyResolved.includes(name)) {\r\n throw new Error(`Circular dependency detected: ${alreadyResolved.join(\" -> \")} -> ${name}`);\r\n }\r\n alreadyResolved.push(name);\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 if (!(name in this.paramValues)) {\r\n this.paramValues[name] = this.resolveValue(param, alreadyResolved);\r\n }\r\n return this.paramValues[name];\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {Db} from \"mongodb\";\r\nimport mongoose from \"mongoose\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@singleton()\r\nexport class MongoConnector {\r\n\r\n get connection(): mongoose.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 protected conn: mongoose.Connection;\r\n protected db: Db;\r\n\r\n constructor(readonly configuration: Configuration) {\r\n this.conn = null;\r\n this.db = null;\r\n }\r\n\r\n async connect(): Promise<Db> {\r\n if (this.db) return this.db;\r\n this.conn = (await mongoose.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 }\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.oid.toHexString();\r\n }\r\n\r\n protected deleted: boolean;\r\n\r\n constructor(readonly oid: 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.oid}, {$set: this.toJSON()}, {upsert: true});\r\n }\r\n\r\n async load(): Promise<this> {\r\n const res = await this.collection.findOne({_id: this.oid});\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 ret.updatedAt = new Date();\r\n ret.createdAt = ret.createdAt || ret.updatedAt;\r\n return ret;\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {Collection} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nimport {IAsset, IAssetDriver, IAssetImageParams, IAssetMeta} from \"../../common-types\";\r\nimport {isString, 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.driver.openDownloadStream(this.oid);\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<IAsset>,\r\n collection: Collection,\r\n protected driver: IAssetDriver) {\r\n super(id, data, collection);\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n try {\r\n await this.driver.delete(this.oid);\r\n await this.collection.deleteOne({_id: this.oid});\r\n } catch (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 throw err;\r\n }\r\n }\r\n }\r\n return this.id;\r\n }\r\n\r\n async setMeta(metadata: Partial<IAssetMeta>): Promise<any> {\r\n metadata = Object.assign(this.metadata, metadata || {});\r\n await this.collection.updateOne({_id: this.oid}, {$set: {metadata}});\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.oid}, {$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 setMeta(meta: Partial<IAssetMeta>): Promise<any> {\r\n Object.assign(this.metadata, meta || {});\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 {inject, injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {Readable} from \"stream\";\r\nimport {ObjectId} from \"bson\";\r\nimport {Collection} from \"mongodb\";\r\nimport {FilterQuery} from \"mongoose\";\r\nimport axios from \"axios\";\r\n\r\nimport {bufferToStream, copyStream, fileTypeFromBuffer, streamToBuffer} from \"../utils\";\r\nimport {ASSET_DRIVER, IAsset, IAssetDriver, 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 collection: Collection<Partial<IAsset>>;\r\n\r\n constructor(readonly connector: MongoConnector,\r\n readonly assetProcessor: AssetProcessor,\r\n @inject(ASSET_DRIVER) readonly driver: IAssetDriver) {\r\n this.collection = connector.database?.collection(driver.metaCollection);\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 fileTypeFromBuffer(buffer);\r\n } catch (e) {\r\n if (!fileType.mime) {\r\n throw new Error(`Can't determine mime type: ${e}`);\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 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 metadata = metadata || {};\r\n metadata.filename = metadata.filename || url;\r\n metadata.url = url;\r\n metadata.uploadTime = new Date().getTime();\r\n const oneWeek = 1000 * 3600 * 24 * 7;\r\n const asset = await this.find({\"metadata.url\": url, \"metadata.uploadTime\": {$gt: metadata.uploadTime - oneWeek}});\r\n if (asset) return asset;\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 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 | ObjectId): 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.driver);\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.driver));\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.driver.openUploadStream(metadata.filename, {\r\n chunkSizeBytes: 1048576,\r\n metadata,\r\n contentType: fileType.mime\r\n });\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.driver);\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 {gunzipPromised} from \"../../utils\";\r\nimport {Assets} from \"../assets\";\r\nimport {Progresses} from \"../progresses\";\r\nimport {BaseEntity} from \"./base-entity\";\r\nimport {Logger} from \"../logger\";\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 createdAt(): Date {\r\n return this.data.createdAt;\r\n }\r\n\r\n get updatedAt(): Date {\r\n return this.data.updatedAt;\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 logger: Logger,\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.oid});\r\n }\r\n return this.assets.unlink(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 this.logger.log(\"lazy-assets\", `Started working on lazy asset: ${this.id}`);\r\n }).catch(reason => {\r\n this.logger.log(\"lazy-assets\", `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.updatedAt = new Date();\r\n this.data.assetId = asset.id;\r\n await asset.setMeta({lazyId: this.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 const oldAsset = this.data.assetId;\r\n this.data.updatedAt = new Date();\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.assets.unlink(oldAsset);\r\n const jobParams = JSON.parse(await gunzipPromised(this.data.jobParams));\r\n await this.progresses.jobMan.enqueueWithName(this.data.jobName, {...jobParams, lazyId: this.id, fromLoad});\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@singleton()\r\nexport class Logger {\r\n\r\n protected tags: string[];\r\n protected ignoredTags: string[];\r\n\r\n constructor(readonly config: Configuration) {\r\n this.tags = this.config.resolve(\"logTags\");\r\n this.ignoredTags = this.config.resolve(\"ignoredLogTags\");\r\n }\r\n\r\n log(tag: string, ...params: any[]): void {\r\n if (this.ignoredTags.includes(tag)) return;\r\n if (this.tags.length === 0 || this.tags.includes(tag)) {\r\n console.log(`[${tag}]`, ...params);\r\n }\r\n }\r\n}\r\n","import {DependencyContainer, inject, injectAll, singleton} from \"tsyringe\";\r\nimport cron 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\nimport {Logger} from \"./logger\";\r\n\r\n@singleton()\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: Promise<any>;\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,\r\n readonly logger: Logger,\r\n @inject(DI_CONTAINER) readonly container: DependencyContainer,\r\n @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 = null;\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 new Error(`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 (!cron.validate(expression)) {\r\n this.logger.log(\"job-manager\", `Can't schedule the task: '${jobName}' because time expression is invalid.`);\r\n return null;\r\n }\r\n return cron.schedule(expression, () => {\r\n this.enqueue(jobType, params).catch(e => {\r\n this.logger.log(\"job-manager\", `Can't enqueue job: '${jobName}' because: ${e}`);\r\n });\r\n });\r\n }\r\n\r\n protected async initProcessing(): Promise<void> {\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 this.workerPush.connect(pushHost);\r\n this.logger.log(\"job-manager\", `Worker producer connected to: ${pushHost}`);\r\n\r\n const pullHost = `${host}:${this.config.resolve(\"zmqPort\")}`;\r\n this.workerPull = socket(\"pull\");\r\n this.workerPull.connect(pullHost);\r\n this.logger.log(\"job-manager\", `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 this.logger.log(\"job-manager\", `Failed to start job: ${e.message}`);\r\n }\r\n });\r\n }\r\n\r\n startProcessing(): Promise<void> {\r\n this.processing = this.processing || this.initProcessing();\r\n return this.processing;\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) {\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) {\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 this.logger.log(\"job-manager\", `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 this.logger.log(\"job-manager\", `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 this.logger.log(\"job-manager\", `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 = \"\") {\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) {\r\n const uniqueId = new ObjectId().toHexString();\r\n this.apiPush.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 new Error(`Advance value must be bigger than zero: ${this.id}`);\r\n }\r\n await this.load();\r\n if (this.deleted || this.canceled) {\r\n const status = this.deleted ? \"deleted\" : \"canceled\";\r\n throw new Error(`Can't advance ${status} progress: ${this.id}`);\r\n }\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 {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@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 {Logger} from \"./logger\";\r\nimport {Progresses} from \"./progresses\";\r\nimport {gzipPromised} from '../utils';\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 logger: Logger,\r\n readonly jobMan: JobManager) {\r\n this.collection = connector.database.collection(\"lazyassets\");\r\n }\r\n\r\n async create(jobType: Type<IJob>, jobParamsObj: JobParams = {}, jobQue: string = \"main\"): Promise<ILazyAsset> {\r\n const jobName = this.jobMan.tryResolve(jobType, {...jobParamsObj, lazyId: \"\"});\r\n const jobParams = await gzipPromised(JSON.stringify(jobParamsObj));\r\n const data = {\r\n jobName,\r\n jobParams,\r\n jobQue,\r\n } as ILazyAsset;\r\n const existingAsset = await this.find(data);\r\n if (existingAsset) return existingAsset;\r\n data.createdAt = new Date();\r\n data.updatedAt = data.createdAt;\r\n const res = await this.collection.insertOne(data);\r\n return new LazyAsset(res.insertedId, data, this.collection, this.logger, this.assets, this.progresses);\r\n }\r\n\r\n async read(id: string | ObjectId): 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.logger, 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 {ObjectId} from \"bson\";\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 | ObjectId, 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 {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 {inject, singleton} from \"tsyringe\";\r\nimport {OpenAPIObject, ReferenceObject, SchemaObject} from \"openapi3-ts\";\r\nimport {getMetadataArgsStorage} from \"routing-controllers\";\r\nimport {routingControllersToSpec} from \"routing-controllers-openapi\";\r\nimport {defaultMetadataStorage} from \"class-transformer/cjs/storage\";\r\nimport {validationMetadatasToSchemas} from \"class-validator-jsonschema\";\r\nimport {ValidationTypes} from \"class-validator\";\r\nimport {isDefined, isFunction, isObject} from \"../utils\";\r\nimport {IsFile, IsObjectId} from \"../validators\";\r\nimport {DI_CONTAINER, IDependencyContainer, IRequest, OPENAPI_VALIDATION, OpenApiValidation} from \"../common-types\";\r\n\r\n@singleton()\r\nexport class OpenApi {\r\n\r\n protected docs: OpenAPIObject;\r\n protected docsStr: string;\r\n\r\n get apiDocs(): OpenAPIObject {\r\n if (!this.docs) this.docs = this.createApiDocs();\r\n return this.docs;\r\n }\r\n\r\n get apiDocsStr(): string {\r\n if (!this.docsStr) this.docsStr = JSON.stringify(this.apiDocs);\r\n return this.docsStr;\r\n }\r\n\r\n constructor(@inject(DI_CONTAINER) protected container: IDependencyContainer,\r\n @inject(OPENAPI_VALIDATION) protected customValidation: OpenApiValidation) {\r\n this.docs = null;\r\n }\r\n\r\n async schemaToExample(src: ReferenceObject | SchemaObject, req?: IRequest): Promise<any> {\r\n const maybeRef = src as ReferenceObject;\r\n if (maybeRef.$ref) {\r\n const schemas = this.apiDocs.components.schemas;\r\n const schema = maybeRef.$ref\r\n .replace(\"#/components/schemas/\", \"\")\r\n .replace(\"#/definitions/\", \"\");\r\n return this.schemaToExample(schemas[schema], req);\r\n }\r\n let schema = src as SchemaObject;\r\n if (schema.oneOf) {\r\n schema = Object.assign({}, schema, schema.oneOf[0]);\r\n }\r\n if (schema.type === \"object\") {\r\n const result = {};\r\n await Promise.all(Object.keys(schema.properties).map(async key => {\r\n result[key] = await this.schemaToExample(schema.properties[key], req);\r\n }));\r\n return result;\r\n }\r\n if (schema.type === \"array\") {\r\n return [await this.schemaToExample(schema.items, req)];\r\n }\r\n if (schema.type === \"string\") {\r\n if (isDefined(schema.default)) {\r\n if (isFunction(schema.default)) {\r\n return schema.default(this.container);\r\n }\r\n return schema.default;\r\n }\r\n if (schema.format == \"date\") {\r\n return new Date().toISOString().substr(0, 10);\r\n }\r\n if (schema.format == \"date-time\") {\r\n return new Date().toISOString();\r\n }\r\n if (schema.enum) {\r\n return schema.enum[0];\r\n }\r\n return \"string\";\r\n }\r\n if (schema.type === \"number\") {\r\n return schema.default ?? 0;\r\n } else if (schema.type === \"boolean\") {\r\n return schema.default ?? false;\r\n } else {\r\n return schema.default ?? null;\r\n }\r\n }\r\n\r\n protected createApiDocs(): OpenAPIObject {\r\n const storage = getMetadataArgsStorage();\r\n const docs = routingControllersToSpec(storage);\r\n docs.basePath = \"/api/\";\r\n docs.definitions = validationMetadatasToSchemas({\r\n classTransformerMetadataStorage: defaultMetadataStorage,\r\n additionalConverters: {\r\n [ValidationTypes.CUSTOM_VALIDATION]: (meta, options) => {\r\n const res = isFunction(this.customValidation) ? this.customValidation(meta, options) : this.customValidation;\r\n if (isObject(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 } as any;\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 } as any;\r\n }\r\n return null;\r\n }\r\n }\r\n });\r\n docs.components.schemas = docs.definitions;\r\n return docs;\r\n }\r\n}\r\n","import {inject, injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {DI_CONTAINER, FIXTURE, IDependencyContainer, IFixture, IFixtureOutput} from \"../common-types\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Fixtures {\r\n\r\n protected fixtures: IFixture[];\r\n\r\n constructor(@inject(DI_CONTAINER) protected container: IDependencyContainer) {\r\n }\r\n\r\n protected init(output?: IFixtureOutput): IFixture[] {\r\n try {\r\n return this.container.resolveAll(FIXTURE);\r\n } catch (e) {\r\n output.writeln(e.message);\r\n return [];\r\n }\r\n }\r\n\r\n async load(output?: IFixtureOutput): Promise<any> {\r\n output = output || {\r\n write: console.log,\r\n writeln: t => console.log(t + \"\\n\")\r\n };\r\n this.fixtures = this.fixtures || this.init(output);\r\n output.write(`Loading fixtures: ${this.fixtures.length} items`);\r\n for (let fixture of this.fixtures) {\r\n await fixture.load(output);\r\n }\r\n }\r\n}\r\n","import {createServer, Server} from \"http\";\r\nimport {Server as SocketServer} from \"socket.io\";\r\nimport express_, {Express} from \"express\";\r\nimport {inject, singleton} from \"tsyringe\";\r\nimport bodyParser from 'body-parser';\r\nimport {Configuration} from './configuration';\r\nimport {DI_CONTAINER, IDependencyContainer} from '../common-types';\r\nimport {OpenApi} from './open-api';\r\nimport {JobManager} from './job-manager';\r\nimport {Fixtures} from './fixtures';\r\n\r\nconst express = express_;\r\n\r\n@singleton()\r\nexport class BackendProvider {\r\n\r\n get io(): SocketServer {\r\n this.ioServer = this.ioServer || new SocketServer(this.server, {\r\n path: \"/socket\",\r\n cors: {\r\n credentials: true,\r\n exposedHeaders: [\"content-disposition\"],\r\n origin: (origin, callback) => {\r\n callback(null, true);\r\n }\r\n }\r\n });\r\n return this.ioServer;\r\n }\r\n\r\n get express(): Express {\r\n if (!this.expressApp) {\r\n this.expressApp = express();\r\n this.expressApp.set(\"trust proxy\", true);\r\n this.expressApp.use(bodyParser.json({\r\n limit: this.config.resolve(\"jsonLimit\")\r\n }));\r\n this.expressApp.get(\"/api-docs\", (req, res) => {\r\n this.openApi = this.openApi || this.container.get(OpenApi);\r\n res.header(\"Content-Type\", \"application/json\")\r\n .status(200)\r\n .end(this.openApi.apiDocsStr);\r\n })\r\n }\r\n return this.expressApp;\r\n }\r\n\r\n get server(): Server {\r\n this.httpServer = this.httpServer || createServer(this.express);\r\n return this.httpServer;\r\n }\r\n\r\n protected ioServer: SocketServer;\r\n protected httpServer: Server;\r\n protected expressApp: Express;\r\n protected openApi: OpenApi;\r\n\r\n constructor(readonly config: Configuration,\r\n @inject(DI_CONTAINER) protected container: IDependencyContainer) {\r\n }\r\n\r\n async quickStart(): Promise<string> {\r\n const port = this.config.resolve(\"appPort\");\r\n const isWorker = this.config.resolve(\"isWorker\");\r\n if (isWorker || this.config.resolve(\"startWorker\")) {\r\n await this.container.resolve(JobManager).startProcessing();\r\n if (isWorker) {\r\n return;\r\n }\r\n }\r\n if (this.config.resolve(\"fixtures\")) {\r\n const fixtures = this.container.resolve(Fixtures);\r\n await fixtures.load();\r\n }\r\n return new Promise(resolve => {\r\n this.server.listen(port, () => resolve(`Service listening on port ${port}!`));\r\n });\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 {singleton} 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@singleton()\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 {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 {singleton} from \"tsyringe\";\r\nimport axios from \"axios\";\r\nimport {isObject} from \"../utils\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {ITranslations} from \"../common-types\";\r\nimport {Cache} from \"./cache\";\r\n\r\n@singleton()\r\nexport class TranslationProvider {\r\n\r\n constructor(readonly config: Configuration, readonly cache: Cache) {\r\n\r\n }\r\n\r\n getDictionary(language: string): Promise<ITranslations> {\r\n return this.cache.getOrSet(`translations-${language}`, async () => {\r\n try {\r\n const url = this.config.resolve(\"translationsTemplate\")\r\n .replace(`__lang__`, language)\r\n .replace(`[lang]`, language);\r\n const data = await axios.get(url).then(t => t.data);\r\n if (isObject(data[language])) {\r\n return data[language];\r\n }\r\n return data;\r\n } catch (e) {\r\n return {\r\n message: `${e}`\r\n }\r\n }\r\n }, 5 * 60);\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 dictionaries: { [lang: string]: ITranslations };\r\n\r\n constructor(private translationProvider: TranslationProvider) {\r\n this.dictionaries = {};\r\n }\r\n\r\n async getDictionary(language: string): Promise<ITranslations> {\r\n this.dictionaries[language] = await this.translationProvider.getDictionary(language);\r\n return this.dictionaries[language];\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.dictionaries[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 {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@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 {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@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 {injectAll, singleton} from \"tsyringe\";\r\nimport {CommandsAddon, ICommandMap, ISuggestionMap} from \"@stemy/terminal-commands-addon\";\r\nimport {ITerminal, ITerminalCommand, TERMINAL_COMMAND} from \"../common-types\";\r\nimport {Logger} from \"./logger\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {camelCaseToDash, colorize, ConsoleColor} from \"../utils\";\r\n\r\n@singleton()\r\nexport class TerminalManager {\r\n protected servicePassword: string;\r\n protected suggestions: ISuggestionMap;\r\n protected commands: ICommandMap;\r\n protected loggedOutCommands: string[];\r\n protected loggedInCommands: string[];\r\n\r\n constructor(protected logger: Logger,\r\n protected config: Configuration,\r\n @injectAll(TERMINAL_COMMAND) commands: ITerminalCommand[]) {\r\n this.servicePassword = config.resolve(\"servicePassword\");\r\n this.suggestions = {\r\n login: async (args) => {\r\n if (args.length > 2) {\r\n return null;\r\n }\r\n const input = `${args.at(1).label}`;\r\n return (!input) ? [] : [{\r\n id: input,\r\n label: input,\r\n masked: true\r\n }];\r\n },\r\n ...commands.reduce((acc, command) => {\r\n command.name = camelCaseToDash(command.name || command.constructor.name || \"\");\r\n if (!command.name || !command.suggest) return acc;\r\n acc[command.name] = async (a, t) => command.suggest(a, t);\r\n return acc;\r\n }, {})\r\n };\r\n this.commands = commands.reduce((acc, command) => {\r\n if (!command.name) return acc;\r\n acc[command.name] = async (a, t) => command.execute(a, t);\r\n return acc;\r\n }, {});\r\n this.loggedOutCommands = [\"login\", \"clear\"];\r\n this.loggedInCommands = Object.keys(this.commands);\r\n this.loggedInCommands.push(\"logout\");\r\n console.log(`Current service password is: ${colorize(this.servicePassword, ConsoleColor.FgGreen)}`);\r\n }\r\n\r\n loadAddons(terminal: ITerminal): void {\r\n let loggedIn = false;\r\n const addon = new CommandsAddon({\r\n commands: {\r\n login: async (args, terminal) => {\r\n if (args.at(1).label === this.servicePassword) {\r\n loggedIn = true;\r\n terminal.writeln(\"Logged in as admin\");\r\n } else {\r\n throw new Error(\"Invalid login\");\r\n }\r\n },\r\n logout: async (args, terminal) => {\r\n loggedIn = false;\r\n terminal.writeln(\"Logged out\");\r\n },\r\n ...this.commands\r\n },\r\n suggestCommands: async () => {\r\n if (loggedIn) {\r\n return this.loggedInCommands;\r\n }\r\n return this.loggedOutCommands;\r\n },\r\n suggestions: this.suggestions\r\n });\r\n terminal.loadAddon(addon);\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {rand} from \"../utils\";\r\n\r\n@singleton()\r\nexport class TokenGenerator {\r\n\r\n protected chars: string;\r\n\r\n constructor() {\r\n this.chars = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\r\n }\r\n\r\n async generate(checkCb: (token: string) => Promise<boolean>): Promise<string> {\r\n let token = null;\r\n let tries = 0;\r\n let notGood = true;\r\n while (notGood && tries < 5) {\r\n token = this.generateToken();\r\n notGood = await checkCb(token);\r\n tries++;\r\n }\r\n if (notGood) {\r\n throw new Error(`Couldn't generate an unique token..`);\r\n }\r\n return token;\r\n }\r\n\r\n private generateToken(): string {\r\n let s = \"\";\r\n for (let i = 0; i < 15; 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 }\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\ntype AssetReqType = 'Image' | 'Asset';\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(\"/metadata/:id\")\r\n async getMetadata(@Param(\"id\") id: string, @QueryParam(\"lazy\") lazy: boolean, @Res() res: Response): Promise<any> {\r\n const asset = await this.assetResolver.resolve(id, lazy);\r\n if (!asset) {\r\n throw new HttpError(404, `Asset with id: '${id}' not found.`);\r\n }\r\n return asset.metadata;\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(asset: IAsset, res: Response): void {\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: AssetReqType, id: string, lazy: boolean, res: Response): Promise<IAsset> {\r\n let 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 asset = await this.resolveFinalAsset(type, asset);\r\n this.setAssetHeaders(asset, res);\r\n return asset;\r\n }\r\n\r\n protected async getAssetByName(type: AssetReqType, filename: string, res: Response): Promise<IAsset> {\r\n let 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 asset = await this.resolveFinalAsset(type, asset);\r\n this.setAssetHeaders(asset, res);\r\n return asset;\r\n }\r\n\r\n protected async resolveFinalAsset(type: AssetReqType, asset: IAsset): Promise<IAsset> {\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 if (type == 'Image' && asset.metadata.preview) {\r\n return this.resolveFinalAsset(type, await this.assetResolver.resolve(asset.metadata.preview));\r\n }\r\n return asset;\r\n }\r\n}\r\n","import {Response} from \"express\";\r\nimport webToken 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: webToken.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","// Add a comment hint for webstorm to style the string as css\r\nexport default `\r\n\r\nbody {\r\n margin: 0;\r\n padding: 0;\r\n background: #1e1e1e;\r\n}\r\nbody * {\r\n box-sizing: border-box;\r\n}\r\n\r\n#terminal {\r\n margin: 40px;\r\n background: black;\r\n border: 1px solid #dedede;\r\n border-radius: 5px;\r\n overflow: hidden;\r\n}\r\n\r\n#terminal .xterm {\r\n margin: 10px;\r\n height: calc(100vh - 120px);\r\n border-radius: 5px;\r\n}\r\n\r\n#terminal .xterm-viewport::-webkit-scrollbar {\r\n width: 0.4em;\r\n background-color: #222;\r\n}\r\n\r\n#terminal .xterm-viewport::-webkit-scrollbar-thumb {\r\n background-color: #555;\r\n}\r\n\r\n#terminal .window-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n background-color: #f1f1f1;\r\n padding: 10px;\r\n}\r\n\r\n#terminal .window-header button {\r\n background-color: transparent;\r\n border: none;\r\n font-size: 14px;\r\n font-weight: bold;\r\n color: #444;\r\n cursor: pointer;\r\n margin-left: 10px;\r\n}\r\n\r\n.minimize-button {\r\n content: \"-\";\r\n}\r\n\r\n.maximize-button {\r\n content: \"+\";\r\n}\r\n\r\n.close-button {\r\n content: \"x\";\r\n}\r\n\r\n`;\r\n","import {injectable} from \"tsyringe\";\r\nimport {Controller, Get, Header} from \"routing-controllers\";\r\nimport {Configuration} from \"../services/configuration\";\r\nimport styles from \"./terminal-styles\";\r\n\r\n@injectable()\r\n@Controller()\r\nexport class TerminalController {\r\n\r\n protected serviceName: string;\r\n\r\n protected serviceUrl: string;\r\n\r\n constructor(readonly config: Configuration) {\r\n this.serviceName = config.resolve(\"serviceName\");\r\n this.serviceUrl = config.resolve(\"serviceUrl\");\r\n }\r\n\r\n @Get(\"/terminal\")\r\n @Header(\"Content-Type\", \"text/html\")\r\n terminal() {\r\n return this.generateClient(\"terminal\");\r\n }\r\n\r\n @Get(\"/console\")\r\n @Header(\"Content-Type\", \"text/html\")\r\n console() {\r\n return this.generateClient(\"console\");\r\n }\r\n\r\n protected generateClient(alias: string): string {\r\n return `\r\n <!DOCTYPE html>\r\n <html>\r\n <head>\r\n <meta charset=\"utf-8\">\r\n <title>${this.serviceName} ${alias}</title>\r\n <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/xterm@5.1.0/css/xterm.min.css\"/>\r\n <script type=\"text/javascript\" src=\"${this.serviceUrl}/socket/socket.io.js\"></script>\r\n <style>\r\n ${styles}\r\n </style>\r\n </head>\r\n <body>\r\n <div id=\"terminal\"></div>\r\n <script type=\"module\">\r\n // Import terminal modules\r\n import xterm from 'https://cdn.jsdelivr.net/npm/xterm@5.1.0/+esm';\r\n import xtermFit from 'https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.7.0/+esm';\r\n // Initialize variables\r\n var terminal = new xterm.Terminal();\r\n var fitAddon = new xtermFit.FitAddon();\r\n var socket = io(\"${this.serviceUrl}\", {path: \"/socket\"});\r\n var clear = function () {\r\n terminal.clear();\r\n terminal.reset();\r\n // Prev line\r\n terminal.write(\"\\u001B[F\");\r\n }\r\n // Initialize terminal\r\n terminal.loadAddon(fitAddon);\r\n terminal.open(document.getElementById('terminal'));\r\n terminal.onData(function (data) {\r\n socket.emit(\"terminal-data\", data.charCodeAt(0) === 127 ? \"\\b\" : data);\r\n });\r\n // Socket listeners\r\n socket.on(\"terminal-data\", function (data) {\r\n if (data === \"\\x1bc\") {\r\n clear();\r\n return;\r\n }\r\n terminal.write(data);\r\n });\r\n socket.on(\"terminal-upload\", function (data) {\r\n var input = document.createElement(\"input\");\r\n input.type = \"file\";\r\n input.accept = data.accept;\r\n input.onchange = function () {\r\n var file = input.files[0];\r\n var reader = new FileReader();\r\n reader.onload = function () {\r\n socket.emit(\"terminal-upload\", {\r\n id: data.id,\r\n label: file.name,\r\n content: reader.result,\r\n accept: data.accept\r\n });\r\n };\r\n reader.onerror = function () {\r\n socket.emit(\"terminal-upload\", {\r\n id: data.id,\r\n label: file.name,\r\n error: reader.error,\r\n accept: data.accept\r\n });\r\n };\r\n reader.readAsDataURL(file);\r\n };\r\n input.click();\r\n });\r\n socket.on(\"terminal-download\", function (data) {\r\n var link = document.createElement(\"a\");\r\n link.href = data.content;\r\n link.download = data.filename;\r\n link.click();\r\n });\r\n socket.on(\"connect\", function () {\r\n clear();\r\n terminal.writeln(\"Welcome to ${this.serviceName} service's ${alias}!\");\r\n socket.emit(\"terminal-init\");\r\n });\r\n socket.on(\"disconnect\", function () {\r\n clear();\r\n terminal.writeln(\"Disconnected from ${this.serviceName} service's ${alias}.\");\r\n });\r\n </script>\r\n </body>\r\n </html>\r\n `;\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {BadRequestError, ExpressErrorMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport axios from \"axios\";\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 if (axios.isAxiosError(error)) {\r\n console.log(`Axios error:`, result);\r\n console.log(error.config.data);\r\n } else {\r\n console.log(error.constructor?.name || \"Error\", result, res.statusCode);\r\n }\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 (axios.isAxiosError(error)) {\r\n res.status(error.response.status);\r\n result.message = error.message;\r\n result.error = error.response.data;\r\n result.headers = error.response.headers;\r\n result.url = `${error.config.baseURL}${error.config.url}`;\r\n return result;\r\n }\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 (error.stack && 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\nimport {Logger} from \"../services/logger\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"after\" })\r\nexport class RequestEndedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(readonly logger: Logger) {\r\n }\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 this.logger.log(\r\n \"request-time\",\r\n `Request '${request.id}' ended at: ${request.ended.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`\r\n );\r\n this.logger.log(\r\n \"request-time\",\r\n `Request '${request.id}' lasted: ${duration.asMilliseconds()}ms`\r\n );\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\nimport {Logger} from \"../services/logger\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class RequestStartedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(readonly logger: Logger) {\r\n }\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 this.logger.log(\r\n \"request-time\",\r\n `Request '${request.id}' started at: ${request.started.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`\r\n );\r\n next(null);\r\n }\r\n\r\n}\r\n","import {inject, singleton} 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@singleton()\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 {BehaviorSubject, Subject} from \"rxjs\";\r\nimport {first, map, timeout} from \"rxjs/operators\";\r\nimport {IDisposable, ISuggestion, ITerminalAddon} from \"@stemy/terminal-commands-addon\";\r\nimport {IClientSocket, ITerminal, ITerminalFile} from \"../common-types\";\r\nimport {fileTypeFromBuffer} from \"../utils\";\r\n\r\nexport class Terminal implements ITerminal {\r\n protected addons: ITerminalAddon[];\r\n protected files$: BehaviorSubject<ITerminalFile[]>;\r\n protected input$: Subject<string>;\r\n\r\n constructor(protected client: IClientSocket) {\r\n this.addons = [];\r\n this.files$ = new BehaviorSubject([]);\r\n this.input$ = new Subject();\r\n }\r\n\r\n onData(cb: (data: string) => any): IDisposable {\r\n const sub = this.input$.pipe(map(v => {\r\n if (v === \"\\b\") {\r\n return \"\\x7f\";\r\n }\r\n return v;\r\n })).subscribe(cb);\r\n return {\r\n dispose: () => sub.unsubscribe()\r\n };\r\n }\r\n\r\n write(data: string): void {\r\n this.client.emit(\"terminal-data\", data);\r\n }\r\n\r\n writeln(data: string): void {\r\n this.write(data + \"\\n\");\r\n }\r\n\r\n loadAddon(addon: ITerminalAddon) {\r\n addon.activate(this);\r\n this.addons.push(addon);\r\n }\r\n\r\n dispose() {\r\n this.input$.complete();\r\n this.client = null;\r\n this.addons.forEach(a => a.dispose());\r\n }\r\n\r\n async suggestFiles(accept: string): Promise<ITerminalFile[]> {\r\n const rand = Math.round(Math.random() * 1000);\r\n const id = `${Date.now()}-${rand}`;\r\n const files = this.files$.value as ISuggestion[];\r\n return files.filter(f => f.accept === accept).concat([\r\n {\r\n id,\r\n label: \"...\",\r\n onAccept: async () => {\r\n this.client.emit(\"terminal-upload\", {\r\n id,\r\n accept\r\n });\r\n const file = await this.files$\r\n .pipe(first(v => v.some(f => f.id === id)))\r\n .pipe(timeout(120000))\r\n .pipe(map(v => v.find(f => f.id === id)))\r\n .toPromise();\r\n if (file.error) {\r\n this.files$.next(this.files$.value.filter(f => f.id !== id));\r\n throw new Error(file.error);\r\n }\r\n return file;\r\n },\r\n showAlways: true,\r\n accept: accept,\r\n }\r\n ]);\r\n }\r\n\r\n async downloadFile(filename: string, buffer: Buffer): Promise<void> {\r\n const type = await fileTypeFromBuffer(buffer);\r\n const data = buffer.toString(\"base64\");\r\n const content = `data:${type.mime};base64,${data}`;\r\n this.client.emit(\"terminal-download\", {\r\n filename,\r\n content\r\n });\r\n }\r\n\r\n addFile(upload: ITerminalFile) {\r\n if (upload.content) {\r\n upload.buffer = Buffer.from(upload.content, \"base64\");\r\n }\r\n this.files$.next(this.files$.value.concat(upload));\r\n }\r\n\r\n input(data: string) {\r\n this.input$.next(data);\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {ConnectedSocket, MessageBody, OnMessage, SocketController} from \"socket-controllers\";\r\n\r\nimport {IClientSocket, ITerminalFile} from \"../common-types\";\r\nimport {TerminalManager} from \"../services/terminal-manager\";\r\nimport {Terminal} from \"./terminal\";\r\n\r\n@singleton()\r\n@SocketController()\r\nexport class TerminalController {\r\n protected terminals: {[id: string]: Terminal};\r\n\r\n constructor(protected manager: TerminalManager) {\r\n this.terminals = {};\r\n }\r\n\r\n @OnMessage(\"terminal-init\")\r\n async terminalInit(@ConnectedSocket() client: IClientSocket) {\r\n const terminal = new Terminal(client);\r\n this.manager.loadAddons(terminal);\r\n this.terminals[client.id] = terminal;\r\n client.on(\"disconnect\", () => terminal.dispose());\r\n }\r\n\r\n @OnMessage(\"terminal-data\")\r\n async terminalData(@ConnectedSocket() client: IClientSocket, @MessageBody() data: string) {\r\n const terminal = this.terminals[client.id];\r\n if (!terminal) return;\r\n terminal.input(data);\r\n }\r\n\r\n @OnMessage(\"terminal-upload\")\r\n async terminalUpload(@ConnectedSocket() client: IClientSocket, @MessageBody() upload: ITerminalFile) {\r\n const terminal = this.terminals[client.id];\r\n if (!terminal || !upload) return;\r\n terminal.addFile(upload);\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 {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IJob} from \"../common-types\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class EmptyJob implements IJob {\r\n\r\n async process(): Promise<any> {\r\n return null;\r\n }\r\n}\r\n","import {existsSync} from \"fs\";\r\nimport {resolve} from \"path\";\r\nimport express from \"express\";\r\nimport {EXPRESS, IDependencyContainer} from \"./common-types\";\r\nimport {EndpointProvider} from \"./services/endpoint-provider\";\r\nimport {getDirName} from \"./utils\";\r\n\r\nexport async function setupStatic(rootFolder: string, container: IDependencyContainer): Promise<any> {\r\n\r\n const browserFolder = resolve(rootFolder || getDirName(), `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(express.static(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 {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {ITerminal, ITerminalCommand} from \"../common-types\";\r\nimport {AnsiCodes, ICommandArgs} from \"@stemy/terminal-commands-addon\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class ClearCommand implements ITerminalCommand {\r\n\r\n readonly name = \"clear\";\r\n\r\n async execute(args: ICommandArgs, terminal: ITerminal): Promise<any> {\r\n terminal.write(AnsiCodes.clear);\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {ICommandArgs} from \"@stemy/terminal-commands-addon\";\r\n\r\nimport {IFixtureOutput, ITerminal, ITerminalCommand} from \"../common-types\";\r\nimport {Fixtures} from \"../services/fixtures\";\r\nimport {colorize, ConsoleColor} from \"../utils\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class FixturesCommand implements ITerminalCommand {\r\n\r\n readonly name = \"fixtures\";\r\n\r\n constructor(protected fixtures: Fixtures) {\r\n }\r\n\r\n async execute(args: ICommandArgs, terminal: ITerminal): Promise<any> {\r\n const output: IFixtureOutput = {\r\n write: text => terminal.writeln(text),\r\n writeln: text => terminal.writeln(text)\r\n };\r\n await this.fixtures.load(output);\r\n terminal.writeln(colorize(`Fixtures loaded`, ConsoleColor.FgGreen));\r\n }\r\n}\r\n","import {ClearCommand} from \"./clear-command\";\r\nimport {ITerminalCommand, Type} from \"../common-types\";\r\nimport {FixturesCommand} from \"./fixtures-command\";\r\n\r\nexport const commands: Type<ITerminalCommand>[] = [\r\n ClearCommand,\r\n FixturesCommand\r\n];\r\n","import {injectable} from \"tsyringe\";\nimport {IFixture} from '../common-types';\nimport {MongoConnector} from '../services/mongo-connector';\n\n@injectable()\nexport class TtlFixture implements IFixture {\n\n constructor(readonly connector: MongoConnector) {\n\n }\n\n async load(): Promise<any> {\n const db = this.connector.database;\n if (!db) return null;\n const expires = {expireAfterSeconds: 3600 * 24};\n await db.collection(\"progresses\").createIndex({updatedAt: 1}, expires);\n await db.collection(\"lazyassets\").createIndex({updatedAt: 1}, expires);\n }\n}\n","import {IFixture, Type} from '../common-types';\nimport {TtlFixture} from './ttl.fixture';\n\nexport const fixtures: Type<IFixture>[] = [\n TtlFixture,\n];\n","import {injectable} from \"tsyringe\";\nimport {GridFSBucket, ObjectId} from 'mongodb';\nimport {GridFSBucket as BucketImpl} from 'mongodb/lib/gridfs';\n\nimport {IAssetDriver, IAssetUploadOpts} from '../../common-types';\nimport {MongoConnector} from \"../mongo-connector\";\n\n@injectable()\nexport class AssetGridDriver implements IAssetDriver {\n readonly metaCollection: string;\n\n protected bucket: GridFSBucket;\n\n constructor(connector: MongoConnector) {\n this.bucket = new BucketImpl(connector.database, {bucketName: 'assets'});\n this.metaCollection = \"assets.files\";\n }\n\n openUploadStream(filename: string, opts?: IAssetUploadOpts) {\n return this.bucket.openUploadStream(filename, opts);\n }\n\n openDownloadStream(id: ObjectId) {\n return this.bucket.openDownloadStream(id);\n }\n\n delete(id: ObjectId) {\n return this.bucket.delete(id);\n }\n}\n","import {createReadStream, createWriteStream, mkdirSync} from 'fs';\nimport {inject, injectable} from \"tsyringe\";\nimport {rm, writeFile} from 'fs/promises';\nimport type {ObjectId} from 'mongodb';\nimport {Types} from 'mongoose';\n\nimport {IAssetDriver, IAssetUploadOpts, IAssetUploadStream, LOCAL_DIR} from '../../common-types';\n\n@injectable()\nexport class AssetLocalDriver implements IAssetDriver {\n readonly metaCollection: string;\n\n constructor(@inject(LOCAL_DIR) protected dir: string) {\n this.metaCollection = \"assets.local\";\n }\n\n openUploadStream(filename: string, opts?: IAssetUploadOpts) {\n const id = new Types.ObjectId();\n const dir = `${this.dir}/${id.toHexString()}`;\n mkdirSync(dir, { recursive: true });\n const stream = createWriteStream(`${dir}/file.bin`) as IAssetUploadStream;\n stream.id = id;\n stream.done = false;\n stream.on('finish', () => {\n writeFile(`${dir}/filename.txt`, filename);\n writeFile(`${dir}/metadata.json`, JSON.stringify(opts?.metadata || {}));\n stream.done = true;\n });\n return stream;\n }\n\n openDownloadStream(id: ObjectId) {\n return createReadStream(`${this.dir}/${id.toHexString()}/file.bin`, {autoClose: true, emitClose: true});\n }\n\n delete(id: ObjectId) {\n return rm(`${this.dir}/${id.toHexString()}`, { recursive: true, force: true });\n }\n}\n","import {RefType} from \"mongoose\";\r\nimport mongoose 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 = mongoose.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<ImplType = this>(): DocumentType<ImplType> {\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\nexport type PrimitiveArray<T> = mongoose.Types.Array<T>;\r\n\r\nexport const PrimitiveArray = mongoose.Types.Array;\r\n\r\nexport type DocumentArray<T extends BaseDoc> = mongoose.Types.DocumentArray<DocumentType<T>>;\r\n\r\nexport const DocumentArray = mongoose.Types.DocumentArray;\r\n","import {getStatusCode, OpenAPI} from \"routing-controllers-openapi\";\r\nimport {ParameterObject, ReferenceObject} from \"openapi3-ts\";\r\n\r\nexport function IsDocumented(summary: string = null, paramDescriptions: {[name: string]: string} = {}) {\r\n return OpenAPI(op => {\r\n op.summary = summary || op.summary;\r\n op.tags = [\"Documented\"].concat(op.tags || []);\r\n op.parameters?.forEach(p => {\r\n if (p.$ref) return;\r\n const schema = p as ParameterObject;\r\n schema.description = paramDescriptions[schema.name]\r\n || schema.description\r\n || `param.${op.operationId}.${schema.name}`.toLowerCase();\r\n });\r\n return op;\r\n });\r\n}\r\n\r\nexport function JsonResponse(description: string = \"Success\", statusCode: number = null) {\r\n return OpenAPI((op, route) => {\r\n const status = statusCode ?? getStatusCode(route) + \"\";\r\n op.responses = op.responses || {};\r\n op.responses[status] = {\r\n description,\r\n content: {\r\n \"application/json\": {}\r\n }\r\n };\r\n return op;\r\n });\r\n}\r\n\r\nexport interface IResponseTypeOptions {\r\n description?: string;\r\n statusCode?: number;\r\n isArray?: boolean;\r\n}\r\n\r\nexport function ResponseType(type: Function, options: IResponseTypeOptions = {}) {\r\n return OpenAPI((op, route) => {\r\n const contentType = \"application/json\";\r\n const statusCode = options?.statusCode ?? getStatusCode(route) + \"\";\r\n const reference: ReferenceObject = {\r\n $ref: `#/components/schemas/${type.name}`,\r\n };\r\n op.responses = op.responses || {};\r\n op.responses[statusCode] = {\r\n description: options.description || \"Success\",\r\n content: {\r\n [contentType]: {\r\n schema: options.isArray\r\n ? { items: reference, type: \"array\" }\r\n : reference\r\n }\r\n }\r\n };\r\n return op;\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, PipelineStage, Query, Schema} from \"mongoose\";\r\nimport mongoose 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 mongoose.Types.ObjectId) return val;\r\n return hydratePopulated(mongoose.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 webToken from \"jsonwebtoken\";\r\nimport {container, DependencyContainer} from \"tsyringe\";\r\nimport {\r\n Action,\r\n HttpError,\r\n RoutingControllersOptions,\r\n useContainer as useRoutingContainer,\r\n useExpressServer\r\n} from \"routing-controllers\";\r\nimport {SocketControllers, SocketControllersOptions} from \"socket-controllers\";\r\n\r\nimport {\r\n ASSET_DRIVER,\r\n DI_CONTAINER,\r\n EXPRESS,\r\n FIXTURE,\r\n HTTP_SERVER,\r\n IBackendConfig,\r\n IDependencyContainer,\r\n IJob,\r\n IRequest,\r\n IUser,\r\n JOB, LOCAL_DIR,\r\n OPENAPI_VALIDATION,\r\n Parameter,\r\n PARAMETER,\r\n Provider,\r\n SOCKET_CONTROLLERS,\r\n SOCKET_SERVER,\r\n TERMINAL_COMMAND,\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 {Logger} from \"./services/logger\";\r\nimport {MailSender} from \"./services/mail-sender\";\r\nimport {MemoryCache} from \"./services/memory-cache\";\r\nimport {MongoConnector} from \"./services/mongo-connector\";\r\nimport {OpenApi} from \"./services/open-api\";\r\nimport {Progresses} from \"./services/progresses\";\r\nimport {TemplateRenderer} from \"./services/template-renderer\";\r\nimport {TerminalManager} from \"./services/terminal-manager\";\r\nimport {TokenGenerator} from \"./services/token-generator\";\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\nimport {TerminalController as TerminalRestController} from \"./rest-controllers/terminal.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\nimport {TerminalController} from \"./socket-controllers/terminal.controller\";\r\n\r\nimport {CompressionMiddleware} from \"./socket-middlewares/compression.middleware\";\r\n\r\nimport {DiContainer} from \"./utilities/di-container\";\r\nimport {EmptyJob} from \"./utilities/empty-job\";\r\nimport {diContainers, getDirName, isFunction, isString, isType, prepareUrlEmpty, valueToPromise} from \"./utils\";\r\nimport {setupStatic} from \"./static\";\r\nimport {commands} from \"./commands\";\r\nimport {fixtures} from './fixtures';\r\nimport {AssetGridDriver} from \"./services/drivers/asset-grid.driver\";\r\n\r\nexport {\r\n FilterPredicate,\r\n isNullOrUndefined,\r\n isDefined,\r\n getType,\r\n isObject,\r\n isArray,\r\n isBuffer,\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 createIdString,\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 camelCaseToDash,\r\n gzipPromised,\r\n gunzipPromised,\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 regexEscape,\r\n flatten,\r\n wrapError,\r\n getDirName,\r\n prepareUrl,\r\n prepareUrlSlash,\r\n prepareUrlEmpty,\r\n fileTypeFromBuffer,\r\n fileTypeFromStream\r\n} from \"./utils\";\r\n\r\nexport {IsFile, IsObjectId} from \"./validators\";\r\n\r\nexport {\r\n FIXTURE,\r\n JOB,\r\n TERMINAL_COMMAND,\r\n EXPRESS,\r\n HTTP_SERVER,\r\n SOCKET_SERVER,\r\n SOCKET_CONTROLLERS,\r\n PARAMETER,\r\n DI_CONTAINER,\r\n OPENAPI_VALIDATION,\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 IFixtureOutput,\r\n SchemaConverter,\r\n OpenApiValidation,\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 ITerminalFile,\r\n ITerminal,\r\n ITerminalCommand,\r\n IProgress,\r\n IAssetCropInfo,\r\n IImageMeta,\r\n IAssetMeta,\r\n IAssetImageParams,\r\n IAsset,\r\n IAssetUploadStream,\r\n IAssetUploadOpts,\r\n IAssetDriver,\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 RoutingOptions,\r\n SocketOptions,\r\n IBackendConfig\r\n} from \"./common-types\";\r\n\r\nexport {AssetLocalDriver} from \"./services/drivers/asset-local.driver\";\r\nexport {AssetGridDriver} from \"./services/drivers/asset-grid.driver\";\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 {Logger} from \"./services/logger\";\r\nexport {MailSender} from \"./services/mail-sender\";\r\nexport {MemoryCache} from \"./services/memory-cache\";\r\nexport {MongoConnector} from \"./services/mongo-connector\";\r\nexport {OpenApi} from \"./services/open-api\";\r\nexport {Progresses} from \"./services/progresses\";\r\nexport {TemplateRenderer} from \"./services/template-renderer\";\r\nexport {TerminalManager} from \"./services/terminal-manager\";\r\nexport {TokenGenerator} from \"./services/token-generator\";\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\nexport {IsDocumented, JsonResponse, ResponseType} from \"./utilities/decorators\";\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\nexport async function resolveUser(req: IRequest): Promise<IUser> {\r\n if (req.user) return req.user;\r\n const container = req.container;\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 = webToken.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 dirName = getDirName();\r\n const params = [\r\n new Parameter(\"serviceName\", \"Backend\"),\r\n new Parameter(\"servicePassword\", Math.random().toString(36).substring(7)),\r\n new Parameter(\"serviceUrl\", \"http://localhost:3000\", (value, helper) => {\r\n // Replace port number to empty string\r\n const url = prepareUrlEmpty(`${value}`.replace(/:[0-9]+$/, \"\"), helper) as string;\r\n const port = helper(\"appPort\");\r\n return (!port || port === 80 || port === 443) ? url : `${url}:${port}`;\r\n }),\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(\"startWorker\", false),\r\n new Parameter(\"fixtures\", true),\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 new Parameter(\"logTags\", []),\r\n new Parameter(\"ignoredLogTags\", []),\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 Logger,\r\n MailSender,\r\n MemoryCache,\r\n MongoConnector,\r\n OpenApi,\r\n Progresses,\r\n TemplateRenderer,\r\n TerminalManager,\r\n TokenGenerator,\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 fixtureProviders = fixtures.concat(config.fixtures || []).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 = [EmptyJob as Type<IJob>].concat(config.jobs || []).map(jobType => {\r\n return {\r\n provide: JOB,\r\n useValue: jobType\r\n };\r\n });\r\n\r\n // Create commands\r\n const commandProviders = commands.concat(config.commands || []).map(commandType => {\r\n return {\r\n provide: TERMINAL_COMMAND,\r\n useClass: commandType\r\n };\r\n });\r\n\r\n // Create DI container\r\n const diContainer = parent.createChildContainer();\r\n\r\n // Setup rest API\r\n const restOptions: RoutingControllersOptions = {\r\n routePrefix: config.routePrefix || \"/api\",\r\n defaultErrorHandler: false,\r\n ...(config.restOptions || {})\r\n };\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 = 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, TerminalRestController]\r\n .concat(restOptions.controllers as any || []);\r\n\r\n // Setup socket API\r\n const socketOptions: SocketControllersOptions = {\r\n container: {\r\n get<T>(someClass: Type<any>): T {\r\n return diContainer.get<T>(someClass);\r\n }\r\n },\r\n ...(config.socketOptions || {})\r\n };\r\n socketOptions.middlewares = [CompressionMiddleware].concat(socketOptions.middlewares as any || []);\r\n socketOptions.controllers = [ProgressController, TerminalController].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 ...fixtureProviders,\r\n ...paramProviders,\r\n ...jobProviders,\r\n ...commandProviders,\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 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 diContainer.register(OPENAPI_VALIDATION, {\r\n useValue: config.customValidation || (() => null)\r\n });\r\n\r\n diContainer.register(LOCAL_DIR, {\r\n useValue: config.assetLocalDir || \"assets_files\"\r\n });\r\n\r\n diContainer.register(ASSET_DRIVER, {\r\n useClass: config.assetDriver || AssetGridDriver\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(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 try {\r\n return await resolveUser(action.request);\r\n } catch (e) {\r\n return null;\r\n }\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 useRoutingContainer(diContainer);\r\n useExpressServer(bp.express, restOptions);\r\n }\r\n\r\n if (config.socketOptions) {\r\n diContainer.register(SOCKET_CONTROLLERS, {\r\n useValue: new SocketControllers({\r\n io: bp.io,\r\n ...socketOptions,\r\n })\r\n });\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","filter","SocketServer","uuidv4","readFile","writeFile","TerminalController","Middleware","express","BucketImpl","getMongoValue","setMongoValue","TerminalRestController","useRoutingContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stemy-backend.mjs","sources":["../../src/common-types.ts","../../src/services/asset-processor.ts","../../src/utils.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/logger.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/validators.ts","../../src/services/open-api.ts","../../src/services/fixtures.ts","../../src/services/backend-provider.ts","../../src/services/cache-processor.ts","../../src/services/cache.ts","../../src/services/endpoint-provider.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/terminal-manager.ts","../../src/services/token-generator.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-controllers/terminal-styles.ts","../../src/rest-controllers/terminal.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-controllers/terminal.ts","../../src/socket-controllers/terminal.controller.ts","../../src/socket-middlewares/compression.middleware.ts","../../src/utilities/tree.ts","../../src/utilities/di-container.ts","../../src/utilities/empty-job.ts","../../src/static.ts","../../src/commands/clear-command.ts","../../src/commands/fixtures-command.ts","../../src/commands/index.ts","../../src/fixtures/ttl.fixture.ts","../../src/fixtures/index.ts","../../src/services/drivers/asset-grid.driver.ts","../../src/services/drivers/asset-local.driver.ts","../../src/utilities/base-doc.ts","../../src/utilities/decorators.ts","../../src/utilities/lazy-asset-generator.ts","../../src/utilities/mongoose.ts","../../src/public_api.ts","../../src/stemy-backend.ts"],"sourcesContent":["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 {SocketControllers, 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, Writable} from \"stream\";\r\nimport {Moment} from \"moment\";\r\nimport {AnyExpression, Expression} from \"mongoose\";\r\nimport {ICommandArgs, ISuggestion, ITerminal as ITerminalBase} from \"@stemy/terminal-commands-addon\";\r\nimport {ObjectId} from \"bson\";\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// --- OpenApi ---\r\n\r\nexport type SchemaConverter = (meta: any, options: any) => SchemaObject;\r\n\r\nexport type OpenApiValidation = SchemaConverter | SchemaObject;\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 TERMINAL_COMMAND: InjectionToken<ITerminalCommand> = Symbol.for(\"terminal-command-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 SOCKET_CONTROLLERS: InjectionToken<SocketControllers> = Symbol.for(\"socket-controllers-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\nexport const OPENAPI_VALIDATION: InjectionToken<OpenApiValidation> = Symbol.for(\"openapi-validation-token\");\r\n\r\nexport const LOCAL_DIR: InjectionToken<string> = Symbol.for('asset-local-dir');\r\n\r\nexport const ASSET_DRIVER: InjectionToken<IAssetDriver> = Symbol.for('assets-driver');\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(output?: IFixtureOutput): Promise<any>;\r\n}\r\n\r\nexport interface IFixtureOutput {\r\n write(message: string): void;\r\n writeln(message: string): void;\r\n}\r\n\r\nexport type ParamResolver = (value: string, helper?: (param: string) => any) => 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\n// --- JOBS ---\r\n\r\nexport interface IJob {\r\n process(messaging?: IMessageBridge): Promise<any>;\r\n}\r\n\r\nexport interface IJobTask {\r\n start: () => void;\r\n stop: () => void;\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\n// --- COMMANDS & TERMINAL ---\r\n\r\nexport interface ITerminalFile extends ISuggestion {\r\n content?: string;\r\n buffer?: Buffer;\r\n accept?: string;\r\n}\r\n\r\nexport interface ITerminal extends ITerminalBase {\r\n suggestFiles(accept: string): Promise<ITerminalFile[]>;\r\n downloadFile(filename: string, buffer: Buffer): Promise<void>;\r\n}\r\n\r\nexport interface ITerminalCommand {\r\n name?: string;\r\n execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;\r\n suggest?(args: ICommandArgs, terminal: ITerminal): Promise<Array<string | ISuggestion>>;\r\n}\r\n\r\n// --- ASSETS ---\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 IImageMeta {\r\n crop?: IAssetCropInfo;\r\n cropBefore?: IAssetCropInfo;\r\n cropAfter?: IAssetCropInfo;\r\n canvasScaleX?: number;\r\n canvasScaleY?: number;\r\n}\r\n\r\nexport interface IAssetMeta extends IImageMeta {\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 preview?: ObjectId | string;\r\n publicUrl?: string;\r\n\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 setMeta(meta: Partial<IAssetMeta>): Promise<any>;\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 IAssetUploadStream extends Writable {\r\n id?: ObjectId;\r\n done?: boolean;\r\n}\r\n\r\nexport interface IAssetUploadOpts {\r\n chunkSizeBytes?: number;\r\n metadata?: IAssetMeta;\r\n contentType?: string;\r\n}\r\n\r\nexport interface IAssetDriver {\r\n readonly metaCollection: string;\r\n openUploadStream(filename: string, opts?: IAssetUploadOpts): IAssetUploadStream;\r\n openDownloadStream(id: ObjectId): Readable;\r\n delete(id: ObjectId): Promise<void>;\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 createdAt: Date;\r\n updatedAt: Date;\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 type RoutingOptions = RoutingControllersOptions;\r\n\r\nexport type SocketOptions = Omit<SocketControllersOptions, \"container\">;\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 commands?: Type<ITerminalCommand>[];\r\n restOptions?: RoutingOptions;\r\n socketOptions?: SocketOptions;\r\n customValidation?: SchemaConverter | SchemaObject;\r\n assetLocalDir?: string;\r\n assetDriver?: Type<IAssetDriver>;\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport fontKit_, {Font} from \"fontkit\";\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 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 {mkdir, readFile as fsReadFile, unlink, writeFile as fsWriteFile} from \"fs\";\r\nimport {gzip, gunzip, ZlibOptions} from \"zlib\";\r\nimport {basename, dirname} from \"path\";\r\nimport {fileURLToPath} from \"url\";\r\nimport {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 {GridFSBucket, ObjectId} from \"mongodb\";\r\nimport {Document} from \"mongoose\";\r\nimport mongoose from \"mongoose\";\r\nimport {PassThrough, Readable, ReadableOptions} from \"stream\";\r\nimport sharp_, {Region} from \"sharp\";\r\nimport {HttpError} from \"routing-controllers\";\r\nimport axios from \"axios\";\r\nimport fileType from \"file-type/core\";\r\nimport {\r\n IAssetCropInfo,\r\n IAssetImageParams,\r\n IAssetMeta,\r\n IClientSocket,\r\n IFileType,\r\n ParamResolver,\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 isBuffer(value: any): value is Buffer {\r\n return value instanceof Buffer;\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 createIdString(): any {\r\n return new ObjectId().toHexString();\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 mongoose.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 socketServer.sockets.sockets.forEach((client: IClientSocket) => {\r\n cb(client);\r\n });\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 camelCaseToDash(str: string): string {\r\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function gzipPromised(data: string, opts?: ZlibOptions): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n gzip(data, opts, (err, result) => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(result.toString(\"base64\"));\r\n });\r\n });\r\n}\r\n\r\nexport function gunzipPromised(data: string, opts?: ZlibOptions): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n gunzip(Buffer.from(data, \"base64\"), opts, (err, result) => {\r\n if (err) {\r\n reject(err);\r\n return;\r\n }\r\n resolve(result.toString(\"utf8\"));\r\n });\r\n });\r\n}\r\n\r\nexport function deleteFromBucket(bucket: GridFSBucket, id: ObjectId | string): Promise<string> {\r\n const fileId = id instanceof ObjectId ? id : new ObjectId(id);\r\n return new Promise<string>(((resolve, reject) => {\r\n if (!id) {\r\n // We don't care about empty id\r\n resolve(null);\r\n return;\r\n }\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, copies: Map<any, any>): any {\r\n if (isPrimitive(source) || isDate(source) || isFunction(source)) return source;\r\n if (copies.has(source)) return copies.get(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, copies);\r\n else\r\n target.push(copyRecursive(null, item, predicate, copies));\r\n });\r\n copies.set(source, target);\r\n return target;\r\n }\r\n if (isBuffer(source)) return Buffer.from(source);\r\n\r\n // If object defines __shouldCopy as false, then don't copy it\r\n if (source.__shouldCopy === false) return source;\r\n // Copy object\r\n const shouldCopy = isFunction(source.__shouldCopy) ? source.__shouldCopy : () => true;\r\n if (isConstructor(source.constructor)) {\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 // Set to copies to prevent circular references\r\n copies.set(source, 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, copies));\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 keys.forEach(key => {\r\n if (!predicate(source[key], key, target, source)) return;\r\n target[key] = !shouldCopy(key, source[key]) ? source[key] : copyRecursive(target[key], source[key], predicate, copies);\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 || defaultPredicate, new Map());\r\n}\r\n\r\nexport function copy<T>(obj: T): T {\r\n return copyRecursive(null, obj, defaultPredicate, new Map());\r\n}\r\n\r\nexport function assign<T>(target: T, source: any, predicate?: FilterPredicate): T {\r\n return copyRecursive(target, source, predicate, new Map());\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\r\nexport function regexEscape(str: string): string {\r\n return `${str}`.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n}\r\n\r\nexport function flatten(arr: any[]): any[] {\r\n return arr.reduce((flat, toFlatten) => {\r\n return flat.concat(isArray(toFlatten) ? flatten(toFlatten) : toFlatten);\r\n }, []);\r\n}\r\n\r\nexport function wrapError(e: any, message: string, httpCode: number = 500): Error {\r\n if (axios.isAxiosError(e)) {\r\n e.message = message;\r\n return e;\r\n }\r\n return new HttpError(httpCode, `${message}: ${e}`);\r\n}\r\n\r\nexport function getDirName(): string {\r\n if (typeof __dirname === \"undefined\") {\r\n const __filename = fileURLToPath(import.meta.url);\r\n return dirname(__filename);\r\n }\r\n return __dirname;\r\n}\r\n\r\nexport function prepareUrl(ending: string = \"/\"): ParamResolver {\r\n return url => {\r\n return url ? `${url.replace(/\\/+$/, \"\")}${ending}` : ending;\r\n }\r\n}\r\n\r\nexport const prepareUrlSlash = prepareUrl(\"/\");\r\n\r\nexport const prepareUrlEmpty = prepareUrl(\"\");\r\n\r\nfunction checkTextFileType(type: IFileType): boolean {\r\n return type.mime.indexOf(\"text\") >= 0 || type.mime.indexOf(\"xml\") >= 0;\r\n}\r\n\r\nfunction 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\nexport async function fileTypeFromBuffer(buffer: Buffer): Promise<IFileType> {\r\n const stream = bufferToStream(buffer);\r\n const type = (await fileType.fromStream(stream) ?? {ext: \"txt\", mime: \"text/plain\"}) as IFileType;\r\n if (checkTextFileType(type)) {\r\n return fixTextFileType(type, buffer);\r\n }\r\n return type;\r\n}\r\n\r\nexport async function fileTypeFromStream(buffer: Buffer): Promise<IFileType> {\r\n const stream = bufferToStream(buffer);\r\n return (await fileType.fromStream(stream) ?? {ext: \"txt\", mime: \"text/plain\"}) as IFileType;\r\n}\r\n","import {injectAll, singleton} from \"tsyringe\";\r\nimport dotenv from \"dotenv\";\r\n\r\nimport {PARAMETER, Parameter} from \"../common-types\";\r\nimport {colorize, ConsoleColor, convertValue, getType, isFunction} from \"../utils\";\r\n\r\n@singleton()\r\nexport class Configuration {\r\n\r\n protected paramMap: {[name: string]: Parameter};\r\n protected paramValues: {[name: string]: any};\r\n\r\n constructor(@injectAll(PARAMETER) params: Parameter[]) {\r\n dotenv.config();\r\n this.paramMap = {};\r\n this.paramValues = {};\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 protected resolveValue(param: Parameter, alreadyResolved: string[]): any {\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 const helper = (p: string) => this.resolveInternal(p, alreadyResolved);\r\n if (typeof envValue !== \"undefined\") {\r\n const value = isFunction(param.resolver)\r\n ? param.resolver(envValue, helper)\r\n : convertValue(envValue, getType(param.defaultValue));\r\n console.log(\r\n colorize(`Processing param value`, ConsoleColor.FgYellow),\r\n colorize(param.name, ConsoleColor.FgGreen),\r\n colorize(envName, ConsoleColor.FgBlue),\r\n `\"${envValue}\"`,\r\n value\r\n );\r\n return value;\r\n } else if (isFunction(param.resolver)) {\r\n const value = param.resolver(param.defaultValue, helper);\r\n console.log(\r\n colorize(`Processing default param value`, ConsoleColor.FgYellow),\r\n colorize(param.name, ConsoleColor.FgGreen),\r\n param.defaultValue,\r\n value\r\n );\r\n return value;\r\n }\r\n console.log(\r\n colorize(`Using default param value`, ConsoleColor.FgYellow),\r\n colorize(param.name, ConsoleColor.FgGreen),\r\n param.defaultValue,\r\n );\r\n return param.defaultValue;\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 return this.resolveInternal(name, []);\r\n }\r\n\r\n protected resolveInternal(name: string, alreadyResolved: string[]): any {\r\n if (alreadyResolved.includes(name)) {\r\n throw new Error(`Circular dependency detected: ${alreadyResolved.join(\" -> \")} -> ${name}`);\r\n }\r\n alreadyResolved.push(name);\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 if (!(name in this.paramValues)) {\r\n this.paramValues[name] = this.resolveValue(param, alreadyResolved);\r\n }\r\n return this.paramValues[name];\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {Db} from \"mongodb\";\r\nimport mongoose from \"mongoose\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@singleton()\r\nexport class MongoConnector {\r\n\r\n get connection(): mongoose.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 protected conn: mongoose.Connection;\r\n protected db: Db;\r\n\r\n constructor(readonly configuration: Configuration) {\r\n this.conn = null;\r\n this.db = null;\r\n }\r\n\r\n async connect(): Promise<Db> {\r\n if (this.db) return this.db;\r\n this.conn = (await mongoose.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 }\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.oid.toHexString();\r\n }\r\n\r\n protected deleted: boolean;\r\n\r\n constructor(readonly oid: 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.oid}, {$set: this.toJSON()}, {upsert: true});\r\n }\r\n\r\n async load(): Promise<this> {\r\n const res = await this.collection.findOne({_id: this.oid});\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 ret.updatedAt = new Date();\r\n ret.createdAt = ret.createdAt || ret.updatedAt;\r\n return ret;\r\n }\r\n}\r\n","import {Readable} from \"stream\";\r\nimport {Collection} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nimport {IAsset, IAssetDriver, IAssetImageParams, IAssetMeta} from \"../../common-types\";\r\nimport {isString, 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.driver.openDownloadStream(this.oid);\r\n }\r\n\r\n constructor(id: ObjectId,\r\n data: Partial<IAsset>,\r\n collection: Collection,\r\n protected driver: IAssetDriver) {\r\n super(id, data, collection);\r\n }\r\n\r\n async unlink(): Promise<string> {\r\n try {\r\n await this.driver.delete(this.oid);\r\n await this.collection.deleteOne({_id: this.oid});\r\n } catch (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 throw err;\r\n }\r\n }\r\n }\r\n return this.id;\r\n }\r\n\r\n async setMeta(metadata: Partial<IAssetMeta>): Promise<any> {\r\n metadata = Object.assign(this.metadata, metadata || {});\r\n await this.collection.updateOne({_id: this.oid}, {$set: {metadata}});\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.oid}, {$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 setMeta(meta: Partial<IAssetMeta>): Promise<any> {\r\n Object.assign(this.metadata, meta || {});\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 {inject, injectable, Lifecycle, scoped} from \"tsyringe\";\nimport {Readable} from \"stream\";\nimport {ObjectId} from \"bson\";\nimport {Collection} from \"mongodb\";\nimport {FilterQuery} from \"mongoose\";\nimport axios from \"axios\";\n\nimport {bufferToStream, copyStream, fileTypeFromBuffer, streamToBuffer} from \"../utils\";\nimport {ASSET_DRIVER, IAsset, IAssetDriver, IAssetMeta, IFileType} from \"../common-types\";\nimport {MongoConnector} from \"./mongo-connector\";\nimport {AssetProcessor} from \"./asset-processor\";\nimport {Asset} from \"./entities/asset\";\nimport {TempAsset} from \"./entities/temp-asset\";\n\n@injectable()\n@scoped(Lifecycle.ContainerScoped)\nexport class Assets {\n\n readonly collection: Collection<Partial<IAsset>>;\n\n constructor(readonly connector: MongoConnector,\n readonly assetProcessor: AssetProcessor,\n @inject(ASSET_DRIVER) readonly driver: IAssetDriver) {\n this.collection = connector.database?.collection(\"assets.metadata\");\n }\n\n async write(stream: Readable, contentType: string = null, metadata: IAssetMeta = null): Promise<IAsset> {\n const uploadStream = copyStream(stream);\n const buffer = await streamToBuffer(stream);\n let fileType = {ext: \"\", mime: contentType} as IFileType;\n try {\n fileType = await fileTypeFromBuffer(buffer);\n } catch (e) {\n if (!fileType.mime) {\n throw new Error(`Can't determine mime type: ${e}`);\n }\n console.log(`Can't determine mime type`, e);\n }\n metadata = metadata || {};\n return this.upload(uploadStream, fileType, metadata);\n }\n\n async writeBuffer(buffer: Buffer, metadata: IAssetMeta = null, contentType: string = null): Promise<IAsset> {\n let fileType = {ext: \"\", mime: contentType} as IFileType;\n try {\n fileType = await fileTypeFromBuffer(buffer);\n } catch (e) {\n if (!fileType.mime) {\n throw `Can't determine mime type`;\n }\n console.log(`Can't determine mime type`, e);\n }\n metadata = metadata || {};\n buffer = await this.assetProcessor.process(buffer, metadata, fileType);\n return this.upload(bufferToStream(buffer), fileType, metadata);\n }\n\n async writeUrl(url: string, metadata: IAssetMeta = null): Promise<IAsset> {\n metadata = metadata || {};\n metadata.filename = metadata.filename || url;\n metadata.url = url;\n metadata.uploadTime = new Date().getTime();\n const oneWeek = 1000 * 3600 * 24 * 7;\n const asset = await this.find({\"metadata.url\": url, \"metadata.uploadTime\": {$gt: metadata.uploadTime - oneWeek}});\n if (asset) return asset;\n const buffer = (await axios({ url, responseType: \"arraybuffer\" })).data as Buffer;\n return this.writeBuffer(buffer, metadata);\n }\n\n async download(url: string, contentType: string = null): Promise<IAsset> {\n let buffer = (await axios({ url, responseType: \"arraybuffer\" })).data as Buffer;\n let fileType = {ext: \"\", mime: contentType} as IFileType;\n try {\n fileType = await fileTypeFromBuffer(buffer);\n } catch (e) {\n if (!fileType.mime) {\n throw `Can't determine mime type`;\n }\n console.log(`Can't determine mime type`, e);\n }\n const metadata: IAssetMeta = {\n filename: url,\n extension: (fileType.ext || \"\").trim()\n };\n buffer = await this.assetProcessor.process(buffer, metadata, fileType);\n return new TempAsset(buffer, url, fileType.mime, metadata);\n }\n\n async read(id: string | ObjectId): Promise<IAsset> {\n return !id ? null : this.find({_id: new ObjectId(id)});\n }\n\n async find(where: FilterQuery<IAsset>): Promise<IAsset> {\n const data = await this.collection.findOne(where);\n return !data ? null : new Asset(data._id, data, this.collection, this.driver);\n }\n\n async findMany(where: FilterQuery<IAsset>): Promise<ReadonlyArray<IAsset>> {\n const cursor = this.collection.find(where);\n const items = await cursor.toArray() || [];\n const result: IAsset[] = [];\n for (let item of items) {\n if (!item) continue;\n result.push(new Asset(item._id, item, this.collection, this.driver));\n }\n return result;\n }\n\n async deleteMany(where: FilterQuery<IAsset>): Promise<ReadonlyArray<string>> {\n const assets = await this.findMany(where);\n return Promise.all(assets.map(a => a.unlink()));\n }\n\n async unlink(id: string): Promise<any> {\n const asset = await this.read(id);\n if (!asset) return null;\n return asset.unlink();\n }\n\n protected async upload(stream: Readable, fileType: IFileType, metadata: IAssetMeta): Promise<IAsset> {\n const contentType = fileType.mime.trim();\n metadata = Object.assign({\n downloadCount: 0,\n firstDownload: null,\n lastDownload: null\n }, metadata || {});\n metadata.filename = metadata.filename || new ObjectId().toHexString();\n metadata.extension = (fileType.ext || \"\").trim();\n return new Promise<IAsset>(((resolve, reject) => {\n const uploaderStream = this.driver.openUploadStream(metadata.filename, {\n chunkSizeBytes: 1048576,\n metadata,\n contentType: fileType.mime\n });\n stream.pipe(uploaderStream)\n .on(\"error\", error => {\n reject(error.message || error);\n })\n .on(\"finish\", () => {\n const asset = new Asset(uploaderStream.id as ObjectId, {\n filename: metadata.filename,\n contentType,\n metadata\n }, this.collection, this.driver);\n asset.save().then(() => {\n resolve(asset);\n }, error => {\n reject(error.message || error);\n });\n });\n }));\n }\n}\n","import {Collection} from \"mongodb\";\r\nimport {ObjectId} from \"bson\";\r\n\r\nimport {IAsset, ILazyAsset} from \"../../common-types\";\r\nimport {gunzipPromised} from \"../../utils\";\r\nimport {Assets} from \"../assets\";\r\nimport {Progresses} from \"../progresses\";\r\nimport {BaseEntity} from \"./base-entity\";\r\nimport {Logger} from \"../logger\";\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 createdAt(): Date {\r\n return this.data.createdAt;\r\n }\r\n\r\n get updatedAt(): Date {\r\n return this.data.updatedAt;\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 logger: Logger,\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.oid});\r\n }\r\n return this.assets.unlink(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 this.logger.log(\"lazy-assets\", `Started working on lazy asset: ${this.id}`);\r\n }).catch(reason => {\r\n this.logger.log(\"lazy-assets\", `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.updatedAt = new Date();\r\n this.data.assetId = asset.id;\r\n await asset.setMeta({lazyId: this.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 const oldAsset = this.data.assetId;\r\n this.data.updatedAt = new Date();\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.assets.unlink(oldAsset);\r\n const jobParams = JSON.parse(await gunzipPromised(this.data.jobParams));\r\n await this.progresses.jobMan.enqueueWithName(this.data.jobName, {...jobParams, lazyId: this.id, fromLoad});\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {Configuration} from \"./configuration\";\r\n\r\n@singleton()\r\nexport class Logger {\r\n\r\n protected tags: string[];\r\n protected ignoredTags: string[];\r\n\r\n constructor(readonly config: Configuration) {\r\n this.tags = this.config.resolve(\"logTags\");\r\n this.ignoredTags = this.config.resolve(\"ignoredLogTags\");\r\n }\r\n\r\n log(tag: string, ...params: any[]): void {\r\n if (this.ignoredTags.includes(tag)) return;\r\n if (this.tags.length === 0 || this.tags.includes(tag)) {\r\n console.log(`[${tag}]`, ...params);\r\n }\r\n }\r\n}\r\n","import {DependencyContainer, inject, injectAll, singleton} from \"tsyringe\";\r\nimport cron 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\nimport {Logger} from \"./logger\";\r\n\r\n@singleton()\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: Promise<any>;\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,\r\n readonly logger: Logger,\r\n @inject(DI_CONTAINER) readonly container: DependencyContainer,\r\n @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 = null;\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 new Error(`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 (!cron.validate(expression)) {\r\n this.logger.log(\"job-manager\", `Can't schedule the task: '${jobName}' because time expression is invalid.`);\r\n return null;\r\n }\r\n return cron.schedule(expression, () => {\r\n this.enqueue(jobType, params).catch(e => {\r\n this.logger.log(\"job-manager\", `Can't enqueue job: '${jobName}' because: ${e}`);\r\n });\r\n });\r\n }\r\n\r\n protected async initProcessing(): Promise<void> {\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 this.workerPush.connect(pushHost);\r\n this.logger.log(\"job-manager\", `Worker producer connected to: ${pushHost}`);\r\n\r\n const pullHost = `${host}:${this.config.resolve(\"zmqPort\")}`;\r\n this.workerPull = socket(\"pull\");\r\n this.workerPull.connect(pullHost);\r\n this.logger.log(\"job-manager\", `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 this.logger.log(\"job-manager\", `Failed to start job: ${e.message}`);\r\n }\r\n });\r\n }\r\n\r\n startProcessing(): Promise<void> {\r\n this.processing = this.processing || this.initProcessing();\r\n return this.processing;\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) {\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) {\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 this.logger.log(\"job-manager\", `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 this.logger.log(\"job-manager\", `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 this.logger.log(\"job-manager\", `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 = \"\") {\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) {\r\n const uniqueId = new ObjectId().toHexString();\r\n this.apiPush.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 new Error(`Advance value must be bigger than zero: ${this.id}`);\r\n }\r\n await this.load();\r\n if (this.deleted || this.canceled) {\r\n const status = this.deleted ? \"deleted\" : \"canceled\";\r\n throw new Error(`Can't advance ${status} progress: ${this.id}`);\r\n }\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 {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@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 {Logger} from \"./logger\";\r\nimport {Progresses} from \"./progresses\";\r\nimport {gzipPromised} from '../utils';\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 logger: Logger,\r\n readonly jobMan: JobManager) {\r\n this.collection = connector.database.collection(\"lazyassets\");\r\n }\r\n\r\n async create(jobType: Type<IJob>, jobParamsObj: JobParams = {}, jobQue: string = \"main\"): Promise<ILazyAsset> {\r\n const jobName = this.jobMan.tryResolve(jobType, {...jobParamsObj, lazyId: \"\"});\r\n const jobParams = await gzipPromised(JSON.stringify(jobParamsObj));\r\n const data = {\r\n jobName,\r\n jobParams,\r\n jobQue,\r\n } as ILazyAsset;\r\n const existingAsset = await this.find(data);\r\n if (existingAsset) return existingAsset;\r\n data.createdAt = new Date();\r\n data.updatedAt = data.createdAt;\r\n const res = await this.collection.insertOne(data);\r\n return new LazyAsset(res.insertedId, data, this.collection, this.logger, this.assets, this.progresses);\r\n }\r\n\r\n async read(id: string | ObjectId): 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.logger, 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 {ObjectId} from \"bson\";\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 | ObjectId, 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 {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 {inject, singleton} from \"tsyringe\";\r\nimport {OpenAPIObject, ReferenceObject, SchemaObject} from \"openapi3-ts\";\r\nimport {getMetadataArgsStorage} from \"routing-controllers\";\r\nimport {routingControllersToSpec} from \"routing-controllers-openapi\";\r\nimport {defaultMetadataStorage} from \"class-transformer/cjs/storage\";\r\nimport {validationMetadatasToSchemas} from \"class-validator-jsonschema\";\r\nimport {ValidationTypes} from \"class-validator\";\r\nimport {isDefined, isFunction, isObject} from \"../utils\";\r\nimport {IsFile, IsObjectId} from \"../validators\";\r\nimport {DI_CONTAINER, IDependencyContainer, IRequest, OPENAPI_VALIDATION, OpenApiValidation} from \"../common-types\";\r\n\r\n@singleton()\r\nexport class OpenApi {\r\n\r\n protected docs: OpenAPIObject;\r\n protected docsStr: string;\r\n\r\n get apiDocs(): OpenAPIObject {\r\n if (!this.docs) this.docs = this.createApiDocs();\r\n return this.docs;\r\n }\r\n\r\n get apiDocsStr(): string {\r\n if (!this.docsStr) this.docsStr = JSON.stringify(this.apiDocs);\r\n return this.docsStr;\r\n }\r\n\r\n constructor(@inject(DI_CONTAINER) protected container: IDependencyContainer,\r\n @inject(OPENAPI_VALIDATION) protected customValidation: OpenApiValidation) {\r\n this.docs = null;\r\n }\r\n\r\n async schemaToExample(src: ReferenceObject | SchemaObject, req?: IRequest): Promise<any> {\r\n const maybeRef = src as ReferenceObject;\r\n if (maybeRef.$ref) {\r\n const schemas = this.apiDocs.components.schemas;\r\n const schema = maybeRef.$ref\r\n .replace(\"#/components/schemas/\", \"\")\r\n .replace(\"#/definitions/\", \"\");\r\n return this.schemaToExample(schemas[schema], req);\r\n }\r\n let schema = src as SchemaObject;\r\n if (schema.oneOf) {\r\n schema = Object.assign({}, schema, schema.oneOf[0]);\r\n }\r\n if (schema.type === \"object\") {\r\n const result = {};\r\n await Promise.all(Object.keys(schema.properties).map(async key => {\r\n result[key] = await this.schemaToExample(schema.properties[key], req);\r\n }));\r\n return result;\r\n }\r\n if (schema.type === \"array\") {\r\n return [await this.schemaToExample(schema.items, req)];\r\n }\r\n if (schema.type === \"string\") {\r\n if (isDefined(schema.default)) {\r\n if (isFunction(schema.default)) {\r\n return schema.default(this.container);\r\n }\r\n return schema.default;\r\n }\r\n if (schema.format == \"date\") {\r\n return new Date().toISOString().substr(0, 10);\r\n }\r\n if (schema.format == \"date-time\") {\r\n return new Date().toISOString();\r\n }\r\n if (schema.enum) {\r\n return schema.enum[0];\r\n }\r\n return \"string\";\r\n }\r\n if (schema.type === \"number\") {\r\n return schema.default ?? 0;\r\n } else if (schema.type === \"boolean\") {\r\n return schema.default ?? false;\r\n } else {\r\n return schema.default ?? null;\r\n }\r\n }\r\n\r\n protected createApiDocs(): OpenAPIObject {\r\n const storage = getMetadataArgsStorage();\r\n const docs = routingControllersToSpec(storage);\r\n docs.basePath = \"/api/\";\r\n docs.definitions = validationMetadatasToSchemas({\r\n classTransformerMetadataStorage: defaultMetadataStorage,\r\n additionalConverters: {\r\n [ValidationTypes.CUSTOM_VALIDATION]: (meta, options) => {\r\n const res = isFunction(this.customValidation) ? this.customValidation(meta, options) : this.customValidation;\r\n if (isObject(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 } as any;\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 } as any;\r\n }\r\n return null;\r\n }\r\n }\r\n });\r\n docs.components.schemas = docs.definitions;\r\n return docs;\r\n }\r\n}\r\n","import {inject, injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {DI_CONTAINER, FIXTURE, IDependencyContainer, IFixture, IFixtureOutput} from \"../common-types\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class Fixtures {\r\n\r\n protected fixtures: IFixture[];\r\n\r\n constructor(@inject(DI_CONTAINER) protected container: IDependencyContainer) {\r\n }\r\n\r\n protected init(output?: IFixtureOutput): IFixture[] {\r\n try {\r\n return this.container.resolveAll(FIXTURE);\r\n } catch (e) {\r\n output.writeln(e.message);\r\n return [];\r\n }\r\n }\r\n\r\n async load(output?: IFixtureOutput): Promise<any> {\r\n output = output || {\r\n write: console.log,\r\n writeln: t => console.log(t + \"\\n\")\r\n };\r\n this.fixtures = this.fixtures || this.init(output);\r\n output.write(`Loading fixtures: ${this.fixtures.length} items`);\r\n for (let fixture of this.fixtures) {\r\n await fixture.load(output);\r\n }\r\n }\r\n}\r\n","import {createServer, Server} from \"http\";\r\nimport {Server as SocketServer} from \"socket.io\";\r\nimport express_, {Express} from \"express\";\r\nimport {inject, singleton} from \"tsyringe\";\r\nimport bodyParser from 'body-parser';\r\nimport {Configuration} from './configuration';\r\nimport {DI_CONTAINER, IDependencyContainer} from '../common-types';\r\nimport {OpenApi} from './open-api';\r\nimport {JobManager} from './job-manager';\r\nimport {Fixtures} from './fixtures';\r\n\r\nconst express = express_;\r\n\r\n@singleton()\r\nexport class BackendProvider {\r\n\r\n get io(): SocketServer {\r\n this.ioServer = this.ioServer || new SocketServer(this.server, {\r\n path: \"/socket\",\r\n cors: {\r\n credentials: true,\r\n exposedHeaders: [\"content-disposition\"],\r\n origin: (origin, callback) => {\r\n callback(null, true);\r\n }\r\n }\r\n });\r\n return this.ioServer;\r\n }\r\n\r\n get express(): Express {\r\n if (!this.expressApp) {\r\n this.expressApp = express();\r\n this.expressApp.set(\"trust proxy\", true);\r\n this.expressApp.use(bodyParser.json({\r\n limit: this.config.resolve(\"jsonLimit\")\r\n }));\r\n this.expressApp.get(\"/api-docs\", (req, res) => {\r\n this.openApi = this.openApi || this.container.get(OpenApi);\r\n res.header(\"Content-Type\", \"application/json\")\r\n .status(200)\r\n .end(this.openApi.apiDocsStr);\r\n })\r\n }\r\n return this.expressApp;\r\n }\r\n\r\n get server(): Server {\r\n this.httpServer = this.httpServer || createServer(this.express);\r\n return this.httpServer;\r\n }\r\n\r\n protected ioServer: SocketServer;\r\n protected httpServer: Server;\r\n protected expressApp: Express;\r\n protected openApi: OpenApi;\r\n\r\n constructor(readonly config: Configuration,\r\n @inject(DI_CONTAINER) protected container: IDependencyContainer) {\r\n }\r\n\r\n async quickStart(): Promise<string> {\r\n const port = this.config.resolve(\"appPort\");\r\n const isWorker = this.config.resolve(\"isWorker\");\r\n if (isWorker || this.config.resolve(\"startWorker\")) {\r\n await this.container.resolve(JobManager).startProcessing();\r\n if (isWorker) {\r\n return;\r\n }\r\n }\r\n if (this.config.resolve(\"fixtures\")) {\r\n const fixtures = this.container.resolve(Fixtures);\r\n await fixtures.load();\r\n }\r\n return new Promise(resolve => {\r\n this.server.listen(port, () => resolve(`Service listening on port ${port}!`));\r\n });\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 {singleton} 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@singleton()\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 {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 {singleton} from \"tsyringe\";\r\nimport axios from \"axios\";\r\nimport {isObject} from \"../utils\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {ITranslations} from \"../common-types\";\r\nimport {Cache} from \"./cache\";\r\n\r\n@singleton()\r\nexport class TranslationProvider {\r\n\r\n constructor(readonly config: Configuration, readonly cache: Cache) {\r\n\r\n }\r\n\r\n getDictionary(language: string): Promise<ITranslations> {\r\n return this.cache.getOrSet(`translations-${language}`, async () => {\r\n try {\r\n const url = this.config.resolve(\"translationsTemplate\")\r\n .replace(`__lang__`, language)\r\n .replace(`[lang]`, language);\r\n const data = await axios.get(url).then(t => t.data);\r\n if (isObject(data[language])) {\r\n return data[language];\r\n }\r\n return data;\r\n } catch (e) {\r\n return {\r\n message: `${e}`\r\n }\r\n }\r\n }, 5 * 60);\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 dictionaries: { [lang: string]: ITranslations };\r\n\r\n constructor(private translationProvider: TranslationProvider) {\r\n this.dictionaries = {};\r\n }\r\n\r\n async getDictionary(language: string): Promise<ITranslations> {\r\n this.dictionaries[language] = await this.translationProvider.getDictionary(language);\r\n return this.dictionaries[language];\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.dictionaries[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 {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@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 {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@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 {injectAll, singleton} from \"tsyringe\";\r\nimport {CommandsAddon, ICommandMap, ISuggestionMap} from \"@stemy/terminal-commands-addon\";\r\nimport {ITerminal, ITerminalCommand, TERMINAL_COMMAND} from \"../common-types\";\r\nimport {Logger} from \"./logger\";\r\nimport {Configuration} from \"./configuration\";\r\nimport {camelCaseToDash, colorize, ConsoleColor} from \"../utils\";\r\n\r\n@singleton()\r\nexport class TerminalManager {\r\n protected servicePassword: string;\r\n protected suggestions: ISuggestionMap;\r\n protected commands: ICommandMap;\r\n protected loggedOutCommands: string[];\r\n protected loggedInCommands: string[];\r\n\r\n constructor(protected logger: Logger,\r\n protected config: Configuration,\r\n @injectAll(TERMINAL_COMMAND) commands: ITerminalCommand[]) {\r\n this.servicePassword = config.resolve(\"servicePassword\");\r\n this.suggestions = {\r\n login: async (args) => {\r\n if (args.length > 2) {\r\n return null;\r\n }\r\n const input = `${args.at(1).label}`;\r\n return (!input) ? [] : [{\r\n id: input,\r\n label: input,\r\n masked: true\r\n }];\r\n },\r\n ...commands.reduce((acc, command) => {\r\n command.name = camelCaseToDash(command.name || command.constructor.name || \"\");\r\n if (!command.name || !command.suggest) return acc;\r\n acc[command.name] = async (a, t) => command.suggest(a, t);\r\n return acc;\r\n }, {})\r\n };\r\n this.commands = commands.reduce((acc, command) => {\r\n if (!command.name) return acc;\r\n acc[command.name] = async (a, t) => command.execute(a, t);\r\n return acc;\r\n }, {});\r\n this.loggedOutCommands = [\"login\", \"clear\"];\r\n this.loggedInCommands = Object.keys(this.commands);\r\n this.loggedInCommands.push(\"logout\");\r\n console.log(`Current service password is: ${colorize(this.servicePassword, ConsoleColor.FgGreen)}`);\r\n }\r\n\r\n loadAddons(terminal: ITerminal): void {\r\n let loggedIn = false;\r\n const addon = new CommandsAddon({\r\n commands: {\r\n login: async (args, terminal) => {\r\n if (args.at(1).label === this.servicePassword) {\r\n loggedIn = true;\r\n terminal.writeln(\"Logged in as admin\");\r\n } else {\r\n throw new Error(\"Invalid login\");\r\n }\r\n },\r\n logout: async (args, terminal) => {\r\n loggedIn = false;\r\n terminal.writeln(\"Logged out\");\r\n },\r\n ...this.commands\r\n },\r\n suggestCommands: async () => {\r\n if (loggedIn) {\r\n return this.loggedInCommands;\r\n }\r\n return this.loggedOutCommands;\r\n },\r\n suggestions: this.suggestions\r\n });\r\n terminal.loadAddon(addon);\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {rand} from \"../utils\";\r\n\r\n@singleton()\r\nexport class TokenGenerator {\r\n\r\n protected chars: string;\r\n\r\n constructor() {\r\n this.chars = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\r\n }\r\n\r\n async generate(checkCb: (token: string) => Promise<boolean>): Promise<string> {\r\n let token = null;\r\n let tries = 0;\r\n let notGood = true;\r\n while (notGood && tries < 5) {\r\n token = this.generateToken();\r\n notGood = await checkCb(token);\r\n tries++;\r\n }\r\n if (notGood) {\r\n throw new Error(`Couldn't generate an unique token..`);\r\n }\r\n return token;\r\n }\r\n\r\n private generateToken(): string {\r\n let s = \"\";\r\n for (let i = 0; i < 15; 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 }\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\ntype AssetReqType = 'Image' | 'Asset';\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(\"/metadata/:id\")\r\n async getMetadata(@Param(\"id\") id: string, @QueryParam(\"lazy\") lazy: boolean, @Res() res: Response): Promise<any> {\r\n const asset = await this.assetResolver.resolve(id, lazy);\r\n if (!asset) {\r\n throw new HttpError(404, `Asset with id: '${id}' not found.`);\r\n }\r\n return asset.metadata;\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(asset: IAsset, res: Response): void {\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: AssetReqType, id: string, lazy: boolean, res: Response): Promise<IAsset> {\r\n let 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 asset = await this.resolveFinalAsset(type, asset);\r\n this.setAssetHeaders(asset, res);\r\n return asset;\r\n }\r\n\r\n protected async getAssetByName(type: AssetReqType, filename: string, res: Response): Promise<IAsset> {\r\n let 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 asset = await this.resolveFinalAsset(type, asset);\r\n this.setAssetHeaders(asset, res);\r\n return asset;\r\n }\r\n\r\n protected async resolveFinalAsset(type: AssetReqType, asset: IAsset): Promise<IAsset> {\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 if (type == 'Image' && asset.metadata.preview) {\r\n return this.resolveFinalAsset(type, await this.assetResolver.resolve(asset.metadata.preview));\r\n }\r\n return asset;\r\n }\r\n}\r\n","import {Response} from \"express\";\r\nimport webToken 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: webToken.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","// Add a comment hint for webstorm to style the string as css\r\nexport default `\r\n\r\nbody {\r\n margin: 0;\r\n padding: 0;\r\n background: #1e1e1e;\r\n}\r\nbody * {\r\n box-sizing: border-box;\r\n}\r\n\r\n#terminal {\r\n margin: 40px;\r\n background: black;\r\n border: 1px solid #dedede;\r\n border-radius: 5px;\r\n overflow: hidden;\r\n}\r\n\r\n#terminal .xterm {\r\n margin: 10px;\r\n height: calc(100vh - 120px);\r\n border-radius: 5px;\r\n}\r\n\r\n#terminal .xterm-viewport::-webkit-scrollbar {\r\n width: 0.4em;\r\n background-color: #222;\r\n}\r\n\r\n#terminal .xterm-viewport::-webkit-scrollbar-thumb {\r\n background-color: #555;\r\n}\r\n\r\n#terminal .window-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n background-color: #f1f1f1;\r\n padding: 10px;\r\n}\r\n\r\n#terminal .window-header button {\r\n background-color: transparent;\r\n border: none;\r\n font-size: 14px;\r\n font-weight: bold;\r\n color: #444;\r\n cursor: pointer;\r\n margin-left: 10px;\r\n}\r\n\r\n.minimize-button {\r\n content: \"-\";\r\n}\r\n\r\n.maximize-button {\r\n content: \"+\";\r\n}\r\n\r\n.close-button {\r\n content: \"x\";\r\n}\r\n\r\n`;\r\n","import {injectable} from \"tsyringe\";\r\nimport {Controller, Get, Header} from \"routing-controllers\";\r\nimport {Configuration} from \"../services/configuration\";\r\nimport styles from \"./terminal-styles\";\r\n\r\n@injectable()\r\n@Controller()\r\nexport class TerminalController {\r\n\r\n protected serviceName: string;\r\n\r\n protected serviceUrl: string;\r\n\r\n constructor(readonly config: Configuration) {\r\n this.serviceName = config.resolve(\"serviceName\");\r\n this.serviceUrl = config.resolve(\"serviceUrl\");\r\n }\r\n\r\n @Get(\"/terminal\")\r\n @Header(\"Content-Type\", \"text/html\")\r\n terminal() {\r\n return this.generateClient(\"terminal\");\r\n }\r\n\r\n @Get(\"/console\")\r\n @Header(\"Content-Type\", \"text/html\")\r\n console() {\r\n return this.generateClient(\"console\");\r\n }\r\n\r\n protected generateClient(alias: string): string {\r\n return `\r\n <!DOCTYPE html>\r\n <html>\r\n <head>\r\n <meta charset=\"utf-8\">\r\n <title>${this.serviceName} ${alias}</title>\r\n <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/xterm@5.1.0/css/xterm.min.css\"/>\r\n <script type=\"text/javascript\" src=\"${this.serviceUrl}/socket/socket.io.js\"></script>\r\n <style>\r\n ${styles}\r\n </style>\r\n </head>\r\n <body>\r\n <div id=\"terminal\"></div>\r\n <script type=\"module\">\r\n // Import terminal modules\r\n import xterm from 'https://cdn.jsdelivr.net/npm/xterm@5.1.0/+esm';\r\n import xtermFit from 'https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.7.0/+esm';\r\n // Initialize variables\r\n var terminal = new xterm.Terminal();\r\n var fitAddon = new xtermFit.FitAddon();\r\n var socket = io(\"${this.serviceUrl}\", {path: \"/socket\"});\r\n var clear = function () {\r\n terminal.clear();\r\n terminal.reset();\r\n // Prev line\r\n terminal.write(\"\\u001B[F\");\r\n }\r\n // Initialize terminal\r\n terminal.loadAddon(fitAddon);\r\n terminal.open(document.getElementById('terminal'));\r\n terminal.onData(function (data) {\r\n socket.emit(\"terminal-data\", data.charCodeAt(0) === 127 ? \"\\b\" : data);\r\n });\r\n // Socket listeners\r\n socket.on(\"terminal-data\", function (data) {\r\n if (data === \"\\x1bc\") {\r\n clear();\r\n return;\r\n }\r\n terminal.write(data);\r\n });\r\n socket.on(\"terminal-upload\", function (data) {\r\n var input = document.createElement(\"input\");\r\n input.type = \"file\";\r\n input.accept = data.accept;\r\n input.onchange = function () {\r\n var file = input.files[0];\r\n var reader = new FileReader();\r\n reader.onload = function () {\r\n socket.emit(\"terminal-upload\", {\r\n id: data.id,\r\n label: file.name,\r\n content: reader.result,\r\n accept: data.accept\r\n });\r\n };\r\n reader.onerror = function () {\r\n socket.emit(\"terminal-upload\", {\r\n id: data.id,\r\n label: file.name,\r\n error: reader.error,\r\n accept: data.accept\r\n });\r\n };\r\n reader.readAsDataURL(file);\r\n };\r\n input.click();\r\n });\r\n socket.on(\"terminal-download\", function (data) {\r\n var link = document.createElement(\"a\");\r\n link.href = data.content;\r\n link.download = data.filename;\r\n link.click();\r\n });\r\n socket.on(\"connect\", function () {\r\n clear();\r\n terminal.writeln(\"Welcome to ${this.serviceName} service's ${alias}!\");\r\n socket.emit(\"terminal-init\");\r\n });\r\n socket.on(\"disconnect\", function () {\r\n clear();\r\n terminal.writeln(\"Disconnected from ${this.serviceName} service's ${alias}.\");\r\n });\r\n </script>\r\n </body>\r\n </html>\r\n `;\r\n }\r\n}\r\n","import {injectable} from \"tsyringe\";\r\nimport {BadRequestError, ExpressErrorMiddlewareInterface, Middleware} from \"routing-controllers\";\r\nimport axios from \"axios\";\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 if (axios.isAxiosError(error)) {\r\n console.log(`Axios error:`, result);\r\n console.log(error.config.data);\r\n } else {\r\n console.log(error.constructor?.name || \"Error\", result, res.statusCode);\r\n }\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 (axios.isAxiosError(error)) {\r\n res.status(error.response.status);\r\n result.message = error.message;\r\n result.error = error.response.data;\r\n result.headers = error.response.headers;\r\n result.url = `${error.config.baseURL}${error.config.url}`;\r\n return result;\r\n }\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 (error.stack && 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\nimport {Logger} from \"../services/logger\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"after\" })\r\nexport class RequestEndedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(readonly logger: Logger) {\r\n }\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 this.logger.log(\r\n \"request-time\",\r\n `Request '${request.id}' ended at: ${request.ended.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`\r\n );\r\n this.logger.log(\r\n \"request-time\",\r\n `Request '${request.id}' lasted: ${duration.asMilliseconds()}ms`\r\n );\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\nimport {Logger} from \"../services/logger\";\r\n\r\n@injectable()\r\n@Middleware({ type: \"before\" })\r\nexport class RequestStartedMiddleware implements ExpressMiddlewareInterface {\r\n\r\n constructor(readonly logger: Logger) {\r\n }\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 this.logger.log(\r\n \"request-time\",\r\n `Request '${request.id}' started at: ${request.started.format(\"YYYY-MM-DD HH:mm:ss\")} [${request.method}] ${request.url}`\r\n );\r\n next(null);\r\n }\r\n\r\n}\r\n","import {inject, singleton} 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@singleton()\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 {BehaviorSubject, Subject} from \"rxjs\";\r\nimport {first, map, timeout} from \"rxjs/operators\";\r\nimport {IDisposable, ISuggestion, ITerminalAddon} from \"@stemy/terminal-commands-addon\";\r\nimport {IClientSocket, ITerminal, ITerminalFile} from \"../common-types\";\r\nimport {fileTypeFromBuffer} from \"../utils\";\r\n\r\nexport class Terminal implements ITerminal {\r\n protected addons: ITerminalAddon[];\r\n protected files$: BehaviorSubject<ITerminalFile[]>;\r\n protected input$: Subject<string>;\r\n\r\n constructor(protected client: IClientSocket) {\r\n this.addons = [];\r\n this.files$ = new BehaviorSubject([]);\r\n this.input$ = new Subject();\r\n }\r\n\r\n onData(cb: (data: string) => any): IDisposable {\r\n const sub = this.input$.pipe(map(v => {\r\n if (v === \"\\b\") {\r\n return \"\\x7f\";\r\n }\r\n return v;\r\n })).subscribe(cb);\r\n return {\r\n dispose: () => sub.unsubscribe()\r\n };\r\n }\r\n\r\n write(data: string): void {\r\n this.client.emit(\"terminal-data\", data);\r\n }\r\n\r\n writeln(data: string): void {\r\n this.write(data + \"\\n\");\r\n }\r\n\r\n loadAddon(addon: ITerminalAddon) {\r\n addon.activate(this);\r\n this.addons.push(addon);\r\n }\r\n\r\n dispose() {\r\n this.input$.complete();\r\n this.client = null;\r\n this.addons.forEach(a => a.dispose());\r\n }\r\n\r\n async suggestFiles(accept: string): Promise<ITerminalFile[]> {\r\n const rand = Math.round(Math.random() * 1000);\r\n const id = `${Date.now()}-${rand}`;\r\n const files = this.files$.value as ISuggestion[];\r\n return files.filter(f => f.accept === accept).concat([\r\n {\r\n id,\r\n label: \"...\",\r\n onAccept: async () => {\r\n this.client.emit(\"terminal-upload\", {\r\n id,\r\n accept\r\n });\r\n const file = await this.files$\r\n .pipe(first(v => v.some(f => f.id === id)))\r\n .pipe(timeout(120000))\r\n .pipe(map(v => v.find(f => f.id === id)))\r\n .toPromise();\r\n if (file.error) {\r\n this.files$.next(this.files$.value.filter(f => f.id !== id));\r\n throw new Error(file.error);\r\n }\r\n return file;\r\n },\r\n showAlways: true,\r\n accept: accept,\r\n }\r\n ]);\r\n }\r\n\r\n async downloadFile(filename: string, buffer: Buffer): Promise<void> {\r\n const type = await fileTypeFromBuffer(buffer);\r\n const data = buffer.toString(\"base64\");\r\n const content = `data:${type.mime};base64,${data}`;\r\n this.client.emit(\"terminal-download\", {\r\n filename,\r\n content\r\n });\r\n }\r\n\r\n addFile(upload: ITerminalFile) {\r\n if (upload.content) {\r\n upload.buffer = Buffer.from(upload.content, \"base64\");\r\n }\r\n this.files$.next(this.files$.value.concat(upload));\r\n }\r\n\r\n input(data: string) {\r\n this.input$.next(data);\r\n }\r\n}\r\n","import {singleton} from \"tsyringe\";\r\nimport {ConnectedSocket, MessageBody, OnMessage, SocketController} from \"socket-controllers\";\r\n\r\nimport {IClientSocket, ITerminalFile} from \"../common-types\";\r\nimport {TerminalManager} from \"../services/terminal-manager\";\r\nimport {Terminal} from \"./terminal\";\r\n\r\n@singleton()\r\n@SocketController()\r\nexport class TerminalController {\r\n protected terminals: {[id: string]: Terminal};\r\n\r\n constructor(protected manager: TerminalManager) {\r\n this.terminals = {};\r\n }\r\n\r\n @OnMessage(\"terminal-init\")\r\n async terminalInit(@ConnectedSocket() client: IClientSocket) {\r\n const terminal = new Terminal(client);\r\n this.manager.loadAddons(terminal);\r\n this.terminals[client.id] = terminal;\r\n client.on(\"disconnect\", () => terminal.dispose());\r\n }\r\n\r\n @OnMessage(\"terminal-data\")\r\n async terminalData(@ConnectedSocket() client: IClientSocket, @MessageBody() data: string) {\r\n const terminal = this.terminals[client.id];\r\n if (!terminal) return;\r\n terminal.input(data);\r\n }\r\n\r\n @OnMessage(\"terminal-upload\")\r\n async terminalUpload(@ConnectedSocket() client: IClientSocket, @MessageBody() upload: ITerminalFile) {\r\n const terminal = this.terminals[client.id];\r\n if (!terminal || !upload) return;\r\n terminal.addFile(upload);\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 {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {IJob} from \"../common-types\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class EmptyJob implements IJob {\r\n\r\n async process(): Promise<any> {\r\n return null;\r\n }\r\n}\r\n","import {existsSync} from \"fs\";\r\nimport {resolve} from \"path\";\r\nimport express from \"express\";\r\nimport {EXPRESS, IDependencyContainer} from \"./common-types\";\r\nimport {EndpointProvider} from \"./services/endpoint-provider\";\r\nimport {getDirName} from \"./utils\";\r\n\r\nexport async function setupStatic(rootFolder: string, container: IDependencyContainer): Promise<any> {\r\n\r\n const browserFolder = resolve(rootFolder || getDirName(), `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(express.static(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 {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {ITerminal, ITerminalCommand} from \"../common-types\";\r\nimport {AnsiCodes, ICommandArgs} from \"@stemy/terminal-commands-addon\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class ClearCommand implements ITerminalCommand {\r\n\r\n readonly name = \"clear\";\r\n\r\n async execute(args: ICommandArgs, terminal: ITerminal): Promise<any> {\r\n terminal.write(AnsiCodes.clear);\r\n }\r\n}\r\n","import {injectable, Lifecycle, scoped} from \"tsyringe\";\r\nimport {ICommandArgs} from \"@stemy/terminal-commands-addon\";\r\n\r\nimport {IFixtureOutput, ITerminal, ITerminalCommand} from \"../common-types\";\r\nimport {Fixtures} from \"../services/fixtures\";\r\nimport {colorize, ConsoleColor} from \"../utils\";\r\n\r\n@injectable()\r\n@scoped(Lifecycle.ContainerScoped)\r\nexport class FixturesCommand implements ITerminalCommand {\r\n\r\n readonly name = \"fixtures\";\r\n\r\n constructor(protected fixtures: Fixtures) {\r\n }\r\n\r\n async execute(args: ICommandArgs, terminal: ITerminal): Promise<any> {\r\n const output: IFixtureOutput = {\r\n write: text => terminal.writeln(text),\r\n writeln: text => terminal.writeln(text)\r\n };\r\n await this.fixtures.load(output);\r\n terminal.writeln(colorize(`Fixtures loaded`, ConsoleColor.FgGreen));\r\n }\r\n}\r\n","import {ClearCommand} from \"./clear-command\";\r\nimport {ITerminalCommand, Type} from \"../common-types\";\r\nimport {FixturesCommand} from \"./fixtures-command\";\r\n\r\nexport const commands: Type<ITerminalCommand>[] = [\r\n ClearCommand,\r\n FixturesCommand\r\n];\r\n","import {injectable} from \"tsyringe\";\nimport {IFixture} from '../common-types';\nimport {MongoConnector} from '../services/mongo-connector';\n\n@injectable()\nexport class TtlFixture implements IFixture {\n\n constructor(readonly connector: MongoConnector) {\n\n }\n\n async load(): Promise<any> {\n const db = this.connector.database;\n if (!db) return null;\n const expires = {expireAfterSeconds: 3600 * 24};\n await db.collection(\"progresses\").createIndex({updatedAt: 1}, expires);\n await db.collection(\"lazyassets\").createIndex({updatedAt: 1}, expires);\n }\n}\n","import {IFixture, Type} from '../common-types';\nimport {TtlFixture} from './ttl.fixture';\n\nexport const fixtures: Type<IFixture>[] = [\n TtlFixture,\n];\n","import {injectable} from \"tsyringe\";\nimport {GridFSBucket, ObjectId} from 'mongodb';\nimport {GridFSBucket as BucketImpl} from 'mongodb/lib/gridfs';\n\nimport {IAssetDriver, IAssetUploadOpts} from '../../common-types';\nimport {MongoConnector} from \"../mongo-connector\";\n\n@injectable()\nexport class AssetGridDriver implements IAssetDriver {\n readonly metaCollection: string;\n\n protected bucket: GridFSBucket;\n\n constructor(connector: MongoConnector) {\n this.bucket = new BucketImpl(connector.database, {bucketName: 'assets'});\n this.metaCollection = \"assets.files\";\n }\n\n openUploadStream(filename: string, opts?: IAssetUploadOpts) {\n return this.bucket.openUploadStream(filename, opts);\n }\n\n openDownloadStream(id: ObjectId) {\n return this.bucket.openDownloadStream(id);\n }\n\n delete(id: ObjectId) {\n return this.bucket.delete(id);\n }\n}\n","import {createReadStream, createWriteStream, mkdirSync} from 'fs';\nimport {inject, injectable} from \"tsyringe\";\nimport {rm, writeFile} from 'fs/promises';\nimport type {ObjectId} from 'mongodb';\nimport {Types} from 'mongoose';\n\nimport {IAssetDriver, IAssetUploadOpts, IAssetUploadStream, LOCAL_DIR} from '../../common-types';\n\n@injectable()\nexport class AssetLocalDriver implements IAssetDriver {\n readonly metaCollection: string;\n\n constructor(@inject(LOCAL_DIR) protected dir: string) {\n this.metaCollection = \"assets.local\";\n }\n\n openUploadStream(filename: string, opts?: IAssetUploadOpts) {\n const id = new Types.ObjectId();\n const dir = `${this.dir}/${id.toHexString()}`;\n mkdirSync(dir, { recursive: true });\n const stream = createWriteStream(`${dir}/file.bin`) as IAssetUploadStream;\n stream.id = id;\n stream.done = false;\n stream.on('finish', () => {\n writeFile(`${dir}/filename.txt`, filename);\n writeFile(`${dir}/metadata.json`, JSON.stringify(opts?.metadata || {}));\n stream.done = true;\n });\n return stream;\n }\n\n openDownloadStream(id: ObjectId) {\n return createReadStream(`${this.dir}/${id.toHexString()}/file.bin`, {autoClose: true, emitClose: true});\n }\n\n delete(id: ObjectId) {\n return rm(`${this.dir}/${id.toHexString()}`, { recursive: true, force: true });\n }\n}\n","import {RefType} from \"mongoose\";\r\nimport mongoose 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 = mongoose.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<ImplType = this>(): DocumentType<ImplType> {\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\nexport type PrimitiveArray<T> = mongoose.Types.Array<T>;\r\n\r\nexport const PrimitiveArray = mongoose.Types.Array;\r\n\r\nexport type DocumentArray<T extends BaseDoc> = mongoose.Types.DocumentArray<DocumentType<T>>;\r\n\r\nexport const DocumentArray = mongoose.Types.DocumentArray;\r\n","import {getStatusCode, OpenAPI} from \"routing-controllers-openapi\";\r\nimport {ParameterObject, ReferenceObject} from \"openapi3-ts\";\r\n\r\nexport function IsDocumented(summary: string = null, paramDescriptions: {[name: string]: string} = {}) {\r\n return OpenAPI(op => {\r\n op.summary = summary || op.summary;\r\n op.tags = [\"Documented\"].concat(op.tags || []);\r\n op.parameters?.forEach(p => {\r\n if (p.$ref) return;\r\n const schema = p as ParameterObject;\r\n schema.description = paramDescriptions[schema.name]\r\n || schema.description\r\n || `param.${op.operationId}.${schema.name}`.toLowerCase();\r\n });\r\n return op;\r\n });\r\n}\r\n\r\nexport function JsonResponse(description: string = \"Success\", statusCode: number = null) {\r\n return OpenAPI((op, route) => {\r\n const status = statusCode ?? getStatusCode(route) + \"\";\r\n op.responses = op.responses || {};\r\n op.responses[status] = {\r\n description,\r\n content: {\r\n \"application/json\": {}\r\n }\r\n };\r\n return op;\r\n });\r\n}\r\n\r\nexport interface IResponseTypeOptions {\r\n description?: string;\r\n statusCode?: number;\r\n isArray?: boolean;\r\n}\r\n\r\nexport function ResponseType(type: Function, options: IResponseTypeOptions = {}) {\r\n return OpenAPI((op, route) => {\r\n const contentType = \"application/json\";\r\n const statusCode = options?.statusCode ?? getStatusCode(route) + \"\";\r\n const reference: ReferenceObject = {\r\n $ref: `#/components/schemas/${type.name}`,\r\n };\r\n op.responses = op.responses || {};\r\n op.responses[statusCode] = {\r\n description: options.description || \"Success\",\r\n content: {\r\n [contentType]: {\r\n schema: options.isArray\r\n ? { items: reference, type: \"array\" }\r\n : reference\r\n }\r\n }\r\n };\r\n return op;\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, PipelineStage, Query, Schema} from \"mongoose\";\r\nimport mongoose 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 mongoose.Types.ObjectId) return val;\r\n return hydratePopulated(mongoose.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 webToken from \"jsonwebtoken\";\r\nimport {container, DependencyContainer} from \"tsyringe\";\r\nimport {\r\n Action,\r\n HttpError,\r\n RoutingControllersOptions,\r\n useContainer as useRoutingContainer,\r\n useExpressServer\r\n} from \"routing-controllers\";\r\nimport {SocketControllers, SocketControllersOptions} from \"socket-controllers\";\r\n\r\nimport {\r\n ASSET_DRIVER,\r\n DI_CONTAINER,\r\n EXPRESS,\r\n FIXTURE,\r\n HTTP_SERVER,\r\n IBackendConfig,\r\n IDependencyContainer,\r\n IJob,\r\n IRequest,\r\n IUser,\r\n JOB, LOCAL_DIR,\r\n OPENAPI_VALIDATION,\r\n Parameter,\r\n PARAMETER,\r\n Provider,\r\n SOCKET_CONTROLLERS,\r\n SOCKET_SERVER,\r\n TERMINAL_COMMAND,\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 {Logger} from \"./services/logger\";\r\nimport {MailSender} from \"./services/mail-sender\";\r\nimport {MemoryCache} from \"./services/memory-cache\";\r\nimport {MongoConnector} from \"./services/mongo-connector\";\r\nimport {OpenApi} from \"./services/open-api\";\r\nimport {Progresses} from \"./services/progresses\";\r\nimport {TemplateRenderer} from \"./services/template-renderer\";\r\nimport {TerminalManager} from \"./services/terminal-manager\";\r\nimport {TokenGenerator} from \"./services/token-generator\";\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\nimport {TerminalController as TerminalRestController} from \"./rest-controllers/terminal.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\nimport {TerminalController} from \"./socket-controllers/terminal.controller\";\r\n\r\nimport {CompressionMiddleware} from \"./socket-middlewares/compression.middleware\";\r\n\r\nimport {DiContainer} from \"./utilities/di-container\";\r\nimport {EmptyJob} from \"./utilities/empty-job\";\r\nimport {diContainers, getDirName, isFunction, isString, isType, prepareUrlEmpty, valueToPromise} from \"./utils\";\r\nimport {setupStatic} from \"./static\";\r\nimport {commands} from \"./commands\";\r\nimport {fixtures} from './fixtures';\r\nimport {AssetGridDriver} from \"./services/drivers/asset-grid.driver\";\r\n\r\nexport {\r\n FilterPredicate,\r\n isNullOrUndefined,\r\n isDefined,\r\n getType,\r\n isObject,\r\n isArray,\r\n isBuffer,\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 createIdString,\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 camelCaseToDash,\r\n gzipPromised,\r\n gunzipPromised,\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 regexEscape,\r\n flatten,\r\n wrapError,\r\n getDirName,\r\n prepareUrl,\r\n prepareUrlSlash,\r\n prepareUrlEmpty,\r\n fileTypeFromBuffer,\r\n fileTypeFromStream\r\n} from \"./utils\";\r\n\r\nexport {IsFile, IsObjectId} from \"./validators\";\r\n\r\nexport {\r\n FIXTURE,\r\n JOB,\r\n TERMINAL_COMMAND,\r\n EXPRESS,\r\n HTTP_SERVER,\r\n SOCKET_SERVER,\r\n SOCKET_CONTROLLERS,\r\n PARAMETER,\r\n DI_CONTAINER,\r\n OPENAPI_VALIDATION,\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 IFixtureOutput,\r\n SchemaConverter,\r\n OpenApiValidation,\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 ITerminalFile,\r\n ITerminal,\r\n ITerminalCommand,\r\n IProgress,\r\n IAssetCropInfo,\r\n IImageMeta,\r\n IAssetMeta,\r\n IAssetImageParams,\r\n IAsset,\r\n IAssetUploadStream,\r\n IAssetUploadOpts,\r\n IAssetDriver,\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 RoutingOptions,\r\n SocketOptions,\r\n IBackendConfig\r\n} from \"./common-types\";\r\n\r\nexport {AssetLocalDriver} from \"./services/drivers/asset-local.driver\";\r\nexport {AssetGridDriver} from \"./services/drivers/asset-grid.driver\";\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 {Logger} from \"./services/logger\";\r\nexport {MailSender} from \"./services/mail-sender\";\r\nexport {MemoryCache} from \"./services/memory-cache\";\r\nexport {MongoConnector} from \"./services/mongo-connector\";\r\nexport {OpenApi} from \"./services/open-api\";\r\nexport {Progresses} from \"./services/progresses\";\r\nexport {TemplateRenderer} from \"./services/template-renderer\";\r\nexport {TerminalManager} from \"./services/terminal-manager\";\r\nexport {TokenGenerator} from \"./services/token-generator\";\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\nexport {IsDocumented, JsonResponse, ResponseType} from \"./utilities/decorators\";\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\nexport async function resolveUser(req: IRequest): Promise<IUser> {\r\n if (req.user) return req.user;\r\n const container = req.container;\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 = webToken.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 dirName = getDirName();\r\n const params = [\r\n new Parameter(\"serviceName\", \"Backend\"),\r\n new Parameter(\"servicePassword\", Math.random().toString(36).substring(7)),\r\n new Parameter(\"serviceUrl\", \"http://localhost:3000\", (value, helper) => {\r\n // Replace port number to empty string\r\n const url = prepareUrlEmpty(`${value}`.replace(/:[0-9]+$/, \"\"), helper) as string;\r\n const port = helper(\"appPort\");\r\n return (!port || port === 80 || port === 443) ? url : `${url}:${port}`;\r\n }),\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(\"startWorker\", false),\r\n new Parameter(\"fixtures\", true),\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 new Parameter(\"logTags\", []),\r\n new Parameter(\"ignoredLogTags\", []),\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 Logger,\r\n MailSender,\r\n MemoryCache,\r\n MongoConnector,\r\n OpenApi,\r\n Progresses,\r\n TemplateRenderer,\r\n TerminalManager,\r\n TokenGenerator,\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 fixtureProviders = fixtures.concat(config.fixtures || []).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 = [EmptyJob as Type<IJob>].concat(config.jobs || []).map(jobType => {\r\n return {\r\n provide: JOB,\r\n useValue: jobType\r\n };\r\n });\r\n\r\n // Create commands\r\n const commandProviders = commands.concat(config.commands || []).map(commandType => {\r\n return {\r\n provide: TERMINAL_COMMAND,\r\n useClass: commandType\r\n };\r\n });\r\n\r\n // Create DI container\r\n const diContainer = parent.createChildContainer();\r\n\r\n // Setup rest API\r\n const restOptions: RoutingControllersOptions = {\r\n routePrefix: config.routePrefix || \"/api\",\r\n defaultErrorHandler: false,\r\n ...(config.restOptions || {})\r\n };\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 = 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, TerminalRestController]\r\n .concat(restOptions.controllers as any || []);\r\n\r\n // Setup socket API\r\n const socketOptions: SocketControllersOptions = {\r\n container: {\r\n get<T>(someClass: Type<any>): T {\r\n return diContainer.get<T>(someClass);\r\n }\r\n },\r\n ...(config.socketOptions || {})\r\n };\r\n socketOptions.middlewares = [CompressionMiddleware].concat(socketOptions.middlewares as any || []);\r\n socketOptions.controllers = [ProgressController, TerminalController].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 ...fixtureProviders,\r\n ...paramProviders,\r\n ...jobProviders,\r\n ...commandProviders,\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 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 diContainer.register(OPENAPI_VALIDATION, {\r\n useValue: config.customValidation || (() => null)\r\n });\r\n\r\n diContainer.register(LOCAL_DIR, {\r\n useValue: config.assetLocalDir || \"assets_files\"\r\n });\r\n\r\n diContainer.register(ASSET_DRIVER, {\r\n useClass: config.assetDriver || AssetGridDriver\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(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 try {\r\n return await resolveUser(action.request);\r\n } catch (e) {\r\n return null;\r\n }\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 useRoutingContainer(diContainer);\r\n useExpressServer(bp.express, restOptions);\r\n }\r\n\r\n if (config.socketOptions) {\r\n diContainer.register(SOCKET_CONTROLLERS, {\r\n useValue: new SocketControllers({\r\n io: bp.io,\r\n ...socketOptions,\r\n })\r\n });\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","filter","SocketServer","uuidv4","readFile","writeFile","TerminalController","Middleware","express","BucketImpl","getMongoValue","setMongoValue","TerminalRestController","useRoutingContainer"],"mappings":"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"}
|