@stemy/backend 6.0.3 → 6.1.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.
Files changed (43) hide show
  1. package/commands/clear.command.d.ts +6 -0
  2. package/commands/fixtures.command.d.ts +9 -0
  3. package/commands/move-assets.command.d.ts +10 -0
  4. package/common-types.d.ts +22 -12
  5. package/esm2022/commands/clear.command.mjs +15 -0
  6. package/esm2022/commands/fixtures.command.mjs +26 -0
  7. package/esm2022/commands/index.mjs +6 -4
  8. package/esm2022/commands/move-assets.command.mjs +45 -0
  9. package/esm2022/common-types.mjs +3 -3
  10. package/esm2022/public_api.mjs +18 -6
  11. package/esm2022/services/assets.mjs +46 -13
  12. package/esm2022/services/backend-provider.mjs +7 -1
  13. package/esm2022/services/cli-terminal.mjs +56 -0
  14. package/esm2022/services/configuration.mjs +11 -4
  15. package/esm2022/services/drivers/asset-fallback-driver.mjs +35 -0
  16. package/esm2022/services/drivers/asset-grid.driver.mjs +5 -7
  17. package/esm2022/services/drivers/asset-local.driver.mjs +19 -18
  18. package/esm2022/services/drivers/asset-storage-proxy.driver.mjs +48 -0
  19. package/esm2022/services/drivers/fallback-readable.mjs +34 -0
  20. package/esm2022/services/drivers/fallback-streams.mjs +34 -0
  21. package/esm2022/services/entities/asset.mjs +50 -15
  22. package/esm2022/services/entities/temp-asset.mjs +15 -3
  23. package/esm2022/services/terminal-manager.mjs +30 -16
  24. package/esm2022/socket-controllers/socket-terminal.mjs +89 -0
  25. package/esm2022/socket-controllers/terminal.controller.mjs +3 -3
  26. package/fesm2022/stemy-backend.mjs +423 -140
  27. package/fesm2022/stemy-backend.mjs.map +1 -1
  28. package/package.json +3 -2
  29. package/public_api.d.ts +2 -1
  30. package/services/assets.d.ts +13 -5
  31. package/services/cli-terminal.d.ts +18 -0
  32. package/services/configuration.d.ts +2 -0
  33. package/services/drivers/asset-fallback-driver.d.ts +11 -0
  34. package/services/drivers/asset-grid.driver.d.ts +4 -5
  35. package/services/drivers/asset-local.driver.d.ts +6 -6
  36. package/services/drivers/asset-storage-proxy.driver.d.ts +14 -0
  37. package/services/drivers/fallback-readable.d.ts +2 -0
  38. package/services/drivers/fallback-streams.d.ts +2 -0
  39. package/services/entities/asset.d.ts +8 -3
  40. package/services/entities/temp-asset.d.ts +6 -1
  41. package/services/terminal-manager.d.ts +3 -0
  42. package/socket-controllers/socket-terminal.d.ts +19 -0
  43. package/socket-controllers/terminal.controller.d.ts +2 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stemy/backend",
3
- "version": "6.0.3",
3
+ "version": "6.1.0",
4
4
  "license": "MIT",
5
5
  "repository": "git@github.com:stemyke/node-backend.git",
6
6
  "builders": "builders.json",
@@ -46,7 +46,8 @@
46
46
  "tz-offset": "^0.0.2",
47
47
  "fontkit": "^2.0.4",
48
48
  "moment": "^2.30.1",
49
- "@stemy/terminal-commands-addon": "1.0.0",
49
+ "got": "^14.4.5",
50
+ "@stemy/terminal-commands-addon": "^1.1.0",
50
51
  "tslib": "^2.3.0"
51
52
  },
52
53
  "module": "fesm2022/stemy-backend.mjs",
package/public_api.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { IBackendConfig, IDependencyContainer, IRequest, IUser, Provider } from "./common-types";
2
2
  export { FilterPredicate, isNullOrUndefined, isDefined, getType, isObject, isArray, isBuffer, isBoolean, isDate, isPrimitive, isString, isFunction, isConstructor, isType, isInterface, ucFirst, lcFirst, isObjectId, firstItem, lastItem, regroup, uniqueItems, getValue, groupBy, convertValue, toImage, bufferToStream, streamToBuffer, copyStream, mkdirRecursive, deleteFile, readFile, readAndDeleteFile, writeFile, valueToPromise, promiseTimeout, getConstructorName, getFunctionParams, getFileName, getExtension, createIdString, idToString, createTransformer, broadcast, rand, random, multiSubscription, observableFromFunction, padLeft, padRight, camelCaseToDash, gzipPromised, gunzipPromised, deleteFromBucket, filter, copy, assign, md5, runCommand, ConsoleColor, IJsonColors, colorize, jsonHighlight, replaceSpecialChars, regexEscape, flatten, wrapError, getDirName, prepareUrl, prepareUrlSlash, prepareUrlEmpty, fileTypeFromBuffer } from "./utils";
3
3
  export { IsFile, IsObjectId } from "./validators";
4
- export { FIXTURE, JOB, TERMINAL_COMMAND, EXPRESS, HTTP_SERVER, SOCKET_SERVER, SOCKET_CONTROLLERS, PARAMETER, DI_CONTAINER, OPENAPI_VALIDATION, Type, FactoryProvider, IDependencyContainer, ClassBasedProvider, ValueBasedProvider, FactoryBasedProvider, TokenBasedProvider, SyringeProvider, Provider, Constructor, InferGeneric, PickMatching, OmitFirstArg, IMatchField, IProjectOptions, IUnwindOptions, IFixture, IFixtureOutput, SchemaConverter, OpenApiValidation, ParamResolver, Parameter, SocketParam, SocketParams, ISocketMessage, IMessageBridge, IJob, IJobTask, JobParams, JobScheduleRange, JobScheduleTime, ITerminalFile, ITerminal, ITerminalCommand, IProgress, IAssetCropInfo, IImageMeta, IAssetMeta, IAssetImageParams, IAsset, IAssetUploadStream, IAssetUploadOpts, IAssetDriver, ILazyAsset, IUser, IClientSocket, IRequestBase, IRequest, IGalleryImage, IGallerySize, IGalleryImageHandler, ITranslations, IPaginationMeta, IPaginationBase, IPagination, IPaginationParams, FontFormat, IFileType, RoutingOptions, SocketOptions, IBackendConfig } from "./common-types";
4
+ export { FIXTURE, JOB, TERMINAL_COMMAND, EXPRESS, HTTP_SERVER, SOCKET_SERVER, SOCKET_CONTROLLERS, PARAMETER, DI_CONTAINER, OPENAPI_VALIDATION, Type, FactoryProvider, IDependencyContainer, ClassBasedProvider, ValueBasedProvider, FactoryBasedProvider, TokenBasedProvider, SyringeProvider, Provider, Constructor, InferGeneric, PickMatching, OmitFirstArg, IMatchField, IProjectOptions, IUnwindOptions, IFixture, IFixtureOutput, SchemaConverter, OpenApiValidation, ParamResolver, Parameter, SocketParam, SocketParams, ISocketMessage, IMessageBridge, IJob, IJobTask, JobParams, JobScheduleRange, JobScheduleTime, ITerminalFile, ITerminal, ITerminalCommand, IProgress, IAssetCropInfo, IImageMeta, IAssetMeta, IAssetImageParams, IAsset, IAssetUploadStream, IAssetUploadOpts, IAssetDriver, IAssetDrivers, ILazyAsset, AssetDriverFactoryMap, IUser, IClientSocket, IRequestBase, IRequest, IGalleryImage, IGallerySize, IGalleryImageHandler, ITranslations, IPaginationMeta, IPaginationBase, IPagination, IPaginationParams, FontFormat, IFileType, RoutingOptions, SocketOptions, IBackendConfig } from "./common-types";
5
5
  export { AssetLocalDriver } from "./services/drivers/asset-local.driver";
6
6
  export { AssetGridDriver } from "./services/drivers/asset-grid.driver";
7
+ export { AssetStorageProxyDriver } from "./services/drivers/asset-storage-proxy.driver";
7
8
  export { AssetProcessor } from "./services/asset-processor";
8
9
  export { AssetResolver } from "./services/asset-resolver";
9
10
  export { Assets } from "./services/assets";
@@ -2,15 +2,23 @@ import { Readable } from "stream";
2
2
  import { ObjectId } from "bson";
3
3
  import { Collection } from "mongodb";
4
4
  import { FilterQuery } from "mongoose";
5
- import { IAsset, IAssetDriver, IAssetMeta, IFileType } from "../common-types";
5
+ import { AssetDriverFactoryMap, IAsset, IAssetDriver, IAssetDrivers, IAssetMeta, IDependencyContainer, IFileType } from "../common-types";
6
6
  import { MongoConnector } from "./mongo-connector";
7
7
  import { AssetProcessor } from "./asset-processor";
8
- export declare class Assets {
8
+ import { Configuration } from "./configuration";
9
+ export declare class Assets implements IAssetDrivers {
9
10
  readonly connector: MongoConnector;
10
11
  readonly assetProcessor: AssetProcessor;
11
- readonly driver: IAssetDriver;
12
- readonly collection: Collection<Partial<IAsset>>;
13
- constructor(connector: MongoConnector, assetProcessor: AssetProcessor, driver: IAssetDriver);
12
+ readonly config: Configuration;
13
+ protected readonly container: IDependencyContainer;
14
+ protected readonly driverFactoryMap: AssetDriverFactoryMap;
15
+ protected readonly collection: Collection<Partial<IAsset>>;
16
+ protected readonly driverMap: Map<string, IAssetDriver>;
17
+ readonly mainDriver: string;
18
+ readonly missingDriver: string;
19
+ readonly drivers: ReadonlyArray<string>;
20
+ constructor(connector: MongoConnector, assetProcessor: AssetProcessor, config: Configuration, container: IDependencyContainer, driverFactoryMap: AssetDriverFactoryMap);
21
+ getDriver(name: string): IAssetDriver;
14
22
  write(stream: Readable, contentType?: string, metadata?: IAssetMeta): Promise<IAsset>;
15
23
  writeBuffer(buffer: Buffer, metadata?: IAssetMeta, contentType?: string): Promise<IAsset>;
16
24
  writeUrl(url: string, metadata?: IAssetMeta): Promise<IAsset>;
@@ -0,0 +1,18 @@
1
+ import { IDisposable, ITerminalAddon } from "@stemy/terminal-commands-addon";
2
+ import { ITerminal } from "../common-types";
3
+ export declare class CliTerminal implements ITerminal {
4
+ private callbacks;
5
+ private stdin;
6
+ constructor();
7
+ private clearScreen;
8
+ private handleInput;
9
+ /**
10
+ * Registers a listener for data input.
11
+ * Returns an IDisposable to unregister the listener.
12
+ */
13
+ onData(cb: (data: string) => any): IDisposable;
14
+ write(data: string): void;
15
+ writeln(data: string): void;
16
+ loadAddon(addon: ITerminalAddon): void;
17
+ dispose(): void;
18
+ }
@@ -1,5 +1,6 @@
1
1
  import { Parameter } from "../common-types";
2
2
  export declare class Configuration {
3
+ readonly isCli: boolean;
3
4
  protected paramMap: {
4
5
  [name: string]: Parameter;
5
6
  };
@@ -12,4 +13,5 @@ export declare class Configuration {
12
13
  hasParam(name: string): boolean;
13
14
  resolve(name: string): any;
14
15
  protected resolveInternal(name: string, alreadyResolved: string[]): any;
16
+ protected log(...args: any[]): void;
15
17
  }
@@ -0,0 +1,11 @@
1
+ import { Readable } from "stream";
2
+ import { ObjectId } from "bson";
3
+ import { IAssetDriver, IAssetUploadOpts, IAssetUploadStream } from "../../common-types";
4
+ export declare class AssetFallbackDriver implements IAssetDriver {
5
+ protected main: IAssetDriver;
6
+ protected fallback: IAssetDriver;
7
+ constructor(main: IAssetDriver, fallback: IAssetDriver);
8
+ openDownloadStream(id: ObjectId): Readable;
9
+ openUploadStream(filename: string, opts?: IAssetUploadOpts): IAssetUploadStream;
10
+ delete(id: ObjectId): Promise<void>;
11
+ }
@@ -1,11 +1,10 @@
1
- import { GridFSBucket, ObjectId } from 'mongodb';
2
- import { IAssetDriver, IAssetUploadOpts } from '../../common-types';
1
+ import { GridFSBucket } from 'mongodb';
2
+ import { IAsset, IAssetDriver, IAssetUploadOpts } from '../../common-types';
3
3
  import { MongoConnector } from "../mongo-connector";
4
4
  export declare class AssetGridDriver implements IAssetDriver {
5
- readonly metaCollection: string;
6
5
  protected bucket: GridFSBucket;
7
6
  constructor(connector: MongoConnector);
8
7
  openUploadStream(filename: string, opts?: IAssetUploadOpts): import("mongodb").GridFSBucketWriteStream;
9
- openDownloadStream(id: ObjectId): import("mongodb").GridFSBucketReadStream;
10
- delete(id: ObjectId): Promise<void>;
8
+ openDownloadStream(asset: IAsset): import("mongodb").GridFSBucketReadStream;
9
+ delete(asset: IAsset): Promise<void>;
11
10
  }
@@ -1,10 +1,10 @@
1
- import type { ObjectId } from 'mongodb';
2
- import { IAssetDriver, IAssetUploadOpts, IAssetUploadStream } from '../../common-types';
1
+ import { ObjectId } from 'bson';
2
+ import { IAsset, IAssetDriver, IAssetUploadOpts, IAssetUploadStream } from '../../common-types';
3
3
  export declare class AssetLocalDriver implements IAssetDriver {
4
4
  protected dir: string;
5
- readonly metaCollection: string;
6
5
  constructor(dir: string);
7
- openUploadStream(filename: string, opts?: IAssetUploadOpts): IAssetUploadStream;
8
- openDownloadStream(id: ObjectId): import("fs").ReadStream;
9
- delete(id: ObjectId): Promise<void>;
6
+ openUploadStream(filename: string, opts: IAssetUploadOpts): IAssetUploadStream;
7
+ openDownloadStream(asset: IAsset): import("fs").ReadStream;
8
+ delete(asset: IAsset): Promise<void>;
9
+ protected getPath(id: ObjectId, name: string, ext: string): string;
10
10
  }
@@ -0,0 +1,14 @@
1
+ import { Readable } from "stream";
2
+ import { ObjectId } from "bson";
3
+ import { IAsset, IAssetDriver, IAssetUploadOpts, IAssetUploadStream } from "../../common-types";
4
+ import { Configuration } from "../configuration";
5
+ export declare class AssetStorageProxyDriver implements IAssetDriver {
6
+ protected config: Configuration;
7
+ readonly baseUrl: string;
8
+ readonly url: string;
9
+ constructor(config: Configuration);
10
+ openUploadStream(_: string, opts: IAssetUploadOpts): IAssetUploadStream;
11
+ openDownloadStream(asset: IAsset): Readable;
12
+ delete(asset: IAsset): Promise<void>;
13
+ protected getUrl(id: ObjectId, ext?: string): string;
14
+ }
@@ -0,0 +1,2 @@
1
+ import { Readable } from 'stream';
2
+ export declare function createFallbackReadable(primary: Readable, fallbackFactory: () => Readable): Readable;
@@ -0,0 +1,2 @@
1
+ import { Readable } from 'stream';
2
+ export declare function createFallbackReadable(primary: Readable, fallbackFactory: () => Readable): Readable;
@@ -1,18 +1,23 @@
1
1
  import { Readable } from "stream";
2
2
  import { Collection } from "mongodb";
3
3
  import { ObjectId } from "bson";
4
- import { IAsset, IAssetDriver, IAssetImageParams, IAssetMeta } from "../../common-types";
4
+ import { IAsset, IAssetDriver, IAssetDrivers, IAssetImageParams, IAssetMeta } from "../../common-types";
5
5
  import { BaseEntity } from "./base-entity";
6
6
  export declare class Asset extends BaseEntity<IAsset> implements IAsset {
7
- protected driver: IAssetDriver;
7
+ protected drivers: IAssetDrivers;
8
8
  get filename(): string;
9
+ get streamId(): ObjectId;
10
+ get driverId(): string;
11
+ get driver(): IAssetDriver;
9
12
  get contentType(): string;
10
13
  get metadata(): IAssetMeta;
11
14
  get stream(): Readable;
12
- constructor(id: ObjectId, data: Partial<IAsset>, collection: Collection, driver: IAssetDriver);
15
+ constructor(id: ObjectId, data: Partial<IAsset>, collection: Collection, drivers: IAssetDrivers);
13
16
  unlink(): Promise<string>;
14
17
  setMeta(metadata: Partial<IAssetMeta>): Promise<any>;
15
18
  getBuffer(): Promise<Buffer>;
19
+ move(driverId: string): Promise<IAsset>;
20
+ protected uploadTo(driver: IAssetDriver): Promise<ObjectId>;
16
21
  download(metadata?: IAssetMeta): Promise<Readable>;
17
22
  getImage(params?: IAssetImageParams): Promise<Readable>;
18
23
  downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable>;
@@ -1,16 +1,21 @@
1
1
  import { Readable } from "stream";
2
+ import { ObjectId } from "bson";
2
3
  import { IAsset, IAssetImageParams, IAssetMeta } from "../../common-types";
3
4
  export declare class TempAsset implements IAsset {
4
5
  protected buffer: Buffer;
5
6
  readonly filename: string;
6
7
  readonly contentType: string;
7
8
  readonly metadata: IAssetMeta;
8
- readonly id: string;
9
+ get id(): string;
10
+ get streamId(): ObjectId;
11
+ get driverId(): string;
9
12
  get stream(): Readable;
13
+ protected readonly oid: ObjectId;
10
14
  constructor(buffer: Buffer, filename: string, contentType: string, metadata: IAssetMeta);
11
15
  unlink(): Promise<string>;
12
16
  setMeta(meta: Partial<IAssetMeta>): Promise<any>;
13
17
  getBuffer(): Promise<Buffer>;
18
+ move(): Promise<IAsset>;
14
19
  download(metadata?: IAssetMeta): Promise<Readable>;
15
20
  downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable>;
16
21
  getImage(params?: IAssetImageParams): Promise<Readable>;
@@ -2,14 +2,17 @@ import { ICommandMap, ISuggestionMap } from "@stemy/terminal-commands-addon";
2
2
  import { ITerminal, ITerminalCommand } from "../common-types";
3
3
  import { Logger } from "./logger";
4
4
  import { Configuration } from "./configuration";
5
+ import { CliTerminal } from "./cli-terminal";
5
6
  export declare class TerminalManager {
6
7
  protected logger: Logger;
7
8
  protected config: Configuration;
9
+ protected cliTerminal: CliTerminal;
8
10
  protected servicePassword: string;
9
11
  protected suggestions: ISuggestionMap;
10
12
  protected commands: ICommandMap;
11
13
  protected loggedOutCommands: string[];
12
14
  protected loggedInCommands: string[];
13
15
  constructor(logger: Logger, config: Configuration, commands: ITerminalCommand[]);
16
+ runCli(): void;
14
17
  loadAddons(terminal: ITerminal): void;
15
18
  }
@@ -0,0 +1,19 @@
1
+ import { BehaviorSubject, Subject } from "rxjs";
2
+ import { IDisposable, ITerminalAddon } from "@stemy/terminal-commands-addon";
3
+ import { IClientSocket, ITerminal, ITerminalFile } from "../common-types";
4
+ export declare class SocketTerminal implements ITerminal {
5
+ protected client: IClientSocket;
6
+ protected addons: ITerminalAddon[];
7
+ protected files$: BehaviorSubject<ITerminalFile[]>;
8
+ protected input$: Subject<string>;
9
+ constructor(client: IClientSocket);
10
+ onData(cb: (data: string) => any): IDisposable;
11
+ write(data: string): void;
12
+ writeln(data: string): void;
13
+ loadAddon(addon: ITerminalAddon): void;
14
+ dispose(): void;
15
+ suggestFiles(accept: string): Promise<ITerminalFile[]>;
16
+ downloadFile(filename: string, buffer: Buffer): Promise<void>;
17
+ addFile(upload: ITerminalFile): void;
18
+ input(data: string): void;
19
+ }
@@ -1,10 +1,10 @@
1
1
  import { IClientSocket, ITerminalFile } from "../common-types";
2
2
  import { TerminalManager } from "../services/terminal-manager";
3
- import { Terminal } from "./terminal";
3
+ import { SocketTerminal } from "./socket-terminal";
4
4
  export declare class TerminalController {
5
5
  protected manager: TerminalManager;
6
6
  protected terminals: {
7
- [id: string]: Terminal;
7
+ [id: string]: SocketTerminal;
8
8
  };
9
9
  constructor(manager: TerminalManager);
10
10
  terminalInit(client: IClientSocket): Promise<void>;