@stemy/backend 5.2.1 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/clear-command.d.ts +6 -6
- package/commands/fixtures-command.d.ts +9 -9
- package/commands/index.d.ts +2 -2
- package/common-types.d.ts +325 -326
- package/esm2020/services/assets.mjs +2 -2
- package/esm2022/commands/clear-command.mjs +15 -0
- package/esm2022/commands/fixtures-command.mjs +26 -0
- package/esm2022/commands/index.mjs +7 -0
- package/esm2022/common-types.mjs +26 -0
- package/esm2022/fixtures/index.mjs +5 -0
- package/esm2022/fixtures/ttl.fixture.mjs +23 -0
- package/esm2022/public_api.mjs +378 -0
- package/esm2022/requests/asset-image-params.mjs +60 -0
- package/esm2022/rest-controllers/assets.controller.mjs +177 -0
- package/esm2022/rest-controllers/auth.controller.mjs +57 -0
- package/esm2022/rest-controllers/gallery.controller.mjs +27 -0
- package/esm2022/rest-controllers/progresses.controller.mjs +38 -0
- package/esm2022/rest-controllers/terminal-styles.mjs +67 -0
- package/esm2022/rest-controllers/terminal.controller.mjs +132 -0
- package/esm2022/rest-middlewares/container.middleware.mjs +22 -0
- package/esm2022/rest-middlewares/error-handler.middleware.mjs +79 -0
- package/esm2022/rest-middlewares/language.middleware.mjs +21 -0
- package/esm2022/rest-middlewares/request-ended.middleware.mjs +26 -0
- package/esm2022/rest-middlewares/request-started.middleware.mjs +25 -0
- package/esm2022/services/asset-processor.mjs +90 -0
- package/esm2022/services/asset-resolver.mjs +36 -0
- package/esm2022/services/assets.mjs +154 -0
- package/esm2022/services/backend-provider.mjs +83 -0
- package/esm2022/services/cache-processor.mjs +16 -0
- package/esm2022/services/cache.mjs +70 -0
- package/esm2022/services/configuration.mjs +68 -0
- package/esm2022/services/drivers/asset-grid.driver.mjs +27 -0
- package/esm2022/services/drivers/asset-local.driver.mjs +41 -0
- package/esm2022/services/endpoint-provider.mjs +13 -0
- package/esm2022/services/entities/asset.mjs +61 -0
- package/esm2022/services/entities/base-entity.mjs +32 -0
- package/esm2022/services/entities/lazy-asset.mjs +87 -0
- package/esm2022/services/entities/progress.mjs +182 -0
- package/esm2022/services/entities/temp-asset.mjs +53 -0
- package/esm2022/services/fixtures.mjs +38 -0
- package/esm2022/services/gallery-cache.mjs +29 -0
- package/esm2022/services/gallery-image.mjs +42 -0
- package/esm2022/services/gallery.mjs +124 -0
- package/esm2022/services/id-generator.mjs +49 -0
- package/esm2022/services/job-manager.mjs +198 -0
- package/esm2022/services/lazy-assets.mjs +68 -0
- package/esm2022/services/logger.mjs +26 -0
- package/esm2022/services/mail-sender.mjs +42 -0
- package/esm2022/services/memory-cache.mjs +61 -0
- package/esm2022/services/mongo-connector.mjs +36 -0
- package/esm2022/services/open-api.mjs +124 -0
- package/esm2022/services/progresses.mjs +93 -0
- package/esm2022/services/template-renderer.mjs +71 -0
- package/esm2022/services/terminal-manager.mjs +88 -0
- package/esm2022/services/token-generator.mjs +37 -0
- package/esm2022/services/translation-provider.mjs +39 -0
- package/esm2022/services/translator.mjs +67 -0
- package/esm2022/services/user-manager.mjs +27 -0
- package/esm2022/socket-controllers/progress.controller.mjs +63 -0
- package/esm2022/socket-controllers/terminal.controller.mjs +61 -0
- package/esm2022/socket-controllers/terminal.mjs +89 -0
- package/esm2022/socket-middlewares/compression.middleware.mjs +14 -0
- package/esm2022/static.mjs +23 -0
- package/esm2022/stemy-backend.mjs +5 -0
- package/esm2022/utilities/base-doc.mjs +33 -0
- package/esm2022/utilities/decorators.mjs +51 -0
- package/esm2022/utilities/di-container.mjs +88 -0
- package/esm2022/utilities/empty-job.mjs +13 -0
- package/esm2022/utilities/lazy-asset-generator.mjs +38 -0
- package/esm2022/utilities/mongoose.mjs +216 -0
- package/esm2022/utilities/tree.mjs +119 -0
- package/esm2022/utils.mjs +726 -0
- package/esm2022/validators.mjs +46 -0
- package/fesm2015/stemy-backend.mjs +1 -1
- package/fesm2015/stemy-backend.mjs.map +1 -1
- package/fesm2020/stemy-backend.mjs +1 -1
- package/fesm2020/stemy-backend.mjs.map +1 -1
- package/fesm2022/stemy-backend.mjs +4690 -0
- package/fesm2022/stemy-backend.mjs.map +1 -0
- package/fixtures/index.d.ts +2 -2
- package/fixtures/ttl.fixture.d.ts +7 -7
- package/index.d.ts +5 -5
- package/package.json +43 -49
- package/public_api.d.ts +44 -44
- package/requests/asset-image-params.d.ts +12 -12
- package/rest-controllers/assets.controller.d.ts +25 -27
- package/rest-controllers/auth.controller.d.ts +14 -14
- package/rest-controllers/gallery.controller.d.ts +6 -7
- package/rest-controllers/progresses.controller.d.ts +9 -9
- package/rest-controllers/terminal-styles.d.ts +2 -2
- package/rest-controllers/terminal.controller.d.ts +10 -10
- package/rest-middlewares/container.middleware.d.ts +8 -8
- package/rest-middlewares/error-handler.middleware.d.ts +13 -13
- package/rest-middlewares/language.middleware.d.ts +8 -8
- package/rest-middlewares/request-ended.middleware.d.ts +8 -8
- package/rest-middlewares/request-started.middleware.d.ts +8 -8
- package/services/asset-processor.d.ts +10 -11
- package/services/asset-resolver.d.ts +10 -10
- package/services/assets.d.ts +24 -26
- package/services/backend-provider.d.ts +19 -20
- package/services/cache-processor.d.ts +4 -4
- package/services/cache.d.ts +23 -23
- package/services/configuration.d.ts +15 -15
- package/services/drivers/asset-grid.driver.d.ts +11 -11
- package/services/drivers/asset-local.driver.d.ts +10 -11
- package/services/endpoint-provider.d.ts +4 -4
- package/services/entities/asset.d.ts +19 -21
- package/services/entities/base-entity.d.ts +13 -13
- package/services/entities/lazy-asset.d.ts +25 -25
- package/services/entities/progress.d.ts +49 -49
- package/services/entities/temp-asset.d.ts +20 -22
- package/services/fixtures.d.ts +8 -8
- package/services/gallery-cache.d.ts +8 -9
- package/services/gallery-image.d.ts +10 -11
- package/services/gallery.d.ts +13 -13
- package/services/id-generator.d.ts +11 -11
- package/services/job-manager.d.ts +35 -35
- package/services/lazy-assets.d.ts +22 -22
- package/services/logger.d.ts +8 -8
- package/services/mail-sender.d.ts +20 -20
- package/services/memory-cache.d.ts +10 -10
- package/services/mongo-connector.d.ts +12 -12
- package/services/open-api.d.ts +13 -13
- package/services/progresses.d.ts +20 -20
- package/services/template-renderer.d.ts +14 -14
- package/services/terminal-manager.d.ts +15 -15
- package/services/token-generator.d.ts +6 -6
- package/services/translation-provider.d.ts +9 -9
- package/services/translator.d.ts +15 -15
- package/services/user-manager.d.ts +6 -6
- package/socket-controllers/progress.controller.d.ts +10 -10
- package/socket-controllers/terminal.controller.d.ts +13 -13
- package/socket-controllers/terminal.d.ts +19 -20
- package/socket-middlewares/compression.middleware.d.ts +4 -4
- package/static.d.ts +2 -2
- package/utilities/base-doc.d.ts +40 -40
- package/utilities/decorators.d.ts +10 -10
- package/utilities/di-container.d.ts +43 -43
- package/utilities/empty-job.d.ts +4 -4
- package/utilities/lazy-asset-generator.d.ts +15 -15
- package/utilities/mongoose.d.ts +36 -36
- package/utilities/tree.d.ts +15 -15
- package/utils.d.ts +120 -123
- package/validators.d.ts +7 -7
|
@@ -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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"}
|