@venizia/ignis-helpers 0.0.1-6 → 0.0.1-7

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 (35) hide show
  1. package/dist/common/constants/http.d.ts +10 -2
  2. package/dist/common/constants/http.d.ts.map +1 -1
  3. package/dist/common/constants/http.js +10 -2
  4. package/dist/common/constants/http.js.map +1 -1
  5. package/dist/helpers/inversion/common/keys.d.ts +0 -1
  6. package/dist/helpers/inversion/common/keys.d.ts.map +1 -1
  7. package/dist/helpers/storage/base.d.ts +62 -0
  8. package/dist/helpers/storage/base.d.ts.map +1 -0
  9. package/dist/helpers/storage/base.js +74 -0
  10. package/dist/helpers/storage/base.js.map +1 -0
  11. package/dist/helpers/storage/disk/helper.d.ts +61 -0
  12. package/dist/helpers/storage/disk/helper.d.ts.map +1 -0
  13. package/dist/helpers/storage/disk/helper.js +250 -0
  14. package/dist/helpers/storage/disk/helper.js.map +1 -0
  15. package/dist/helpers/storage/disk/index.d.ts +2 -0
  16. package/dist/helpers/storage/disk/index.d.ts.map +1 -0
  17. package/dist/helpers/storage/disk/index.js +18 -0
  18. package/dist/helpers/storage/disk/index.js.map +1 -0
  19. package/dist/helpers/storage/index.d.ts +3 -0
  20. package/dist/helpers/storage/index.d.ts.map +1 -1
  21. package/dist/helpers/storage/index.js +3 -0
  22. package/dist/helpers/storage/index.js.map +1 -1
  23. package/dist/helpers/storage/minio/helper.d.ts +23 -26
  24. package/dist/helpers/storage/minio/helper.d.ts.map +1 -1
  25. package/dist/helpers/storage/minio/helper.js +66 -54
  26. package/dist/helpers/storage/minio/helper.js.map +1 -1
  27. package/dist/helpers/storage/types.d.ts +95 -0
  28. package/dist/helpers/storage/types.d.ts.map +1 -0
  29. package/dist/helpers/storage/types.js +3 -0
  30. package/dist/helpers/storage/types.js.map +1 -0
  31. package/dist/utilities/request.utility.d.ts +13 -0
  32. package/dist/utilities/request.utility.d.ts.map +1 -1
  33. package/dist/utilities/request.utility.js +44 -1
  34. package/dist/utilities/request.utility.js.map +1 -1
  35. package/package.json +3 -3
@@ -2,13 +2,21 @@ import { ValueOf } from '../types';
2
2
  export declare class HTTP {
3
3
  static readonly Headers: {
4
4
  readonly AUTHORIZATION: "authorization";
5
+ readonly CACHE_CONTROL: "cache-control";
6
+ readonly CONTENT_DISPOSITION: "content-disposition";
7
+ readonly CONTENT_ENCODING: "content-encoding";
8
+ readonly CONTENT_LENGTH: "content-length";
9
+ readonly CONTENT_TYPE: "content-type";
10
+ readonly ETAG: "etag";
11
+ readonly LAST_MODIFIED: "last-modified";
5
12
  readonly REQUEST_TRACING_ID: "x-request-id";
6
13
  };
7
14
  static readonly HeaderValues: {
8
- readonly APPLICATION_JSON: "application/json";
9
15
  readonly APPLICATION_FORM_URLENCODED: "application/x-www-form-urlencoded";
10
- readonly TEXT_PLAIN: "text/plain";
16
+ readonly APPLICATION_JSON: "application/json";
17
+ readonly APPPLICATION_OCTET_STREAM: "application/octet-stream";
11
18
  readonly MULTIPART_FORM_DATA: "multipart/form-data";
19
+ readonly TEXT_PLAIN: "text/plain";
12
20
  };
13
21
  static readonly Methods: {
14
22
  readonly GET: "get";
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/common/constants/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,qBAAa,IAAI;IACf,MAAM,CAAC,QAAQ,CAAC,OAAO;;;MAGZ;IAEX,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;MAKjB;IAEX,MAAM,CAAC,QAAQ,CAAC,OAAO;;;;;;;;MAQZ;IAEX,MAAM,CAAC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoChB;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AACvD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/common/constants/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,qBAAa,IAAI;IACf,MAAM,CAAC,QAAQ,CAAC,OAAO;;;;;;;;;;MAUZ;IAEX,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;MAMjB;IAEX,MAAM,CAAC,QAAQ,CAAC,OAAO;;;;;;;;MAQZ;IAEX,MAAM,CAAC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoChB;CACZ;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AACvD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC"}
@@ -4,13 +4,21 @@ exports.HTTP = void 0;
4
4
  class HTTP {
5
5
  static { this.Headers = {
6
6
  AUTHORIZATION: 'authorization',
7
+ CACHE_CONTROL: 'cache-control',
8
+ CONTENT_DISPOSITION: 'content-disposition',
9
+ CONTENT_ENCODING: 'content-encoding',
10
+ CONTENT_LENGTH: 'content-length',
11
+ CONTENT_TYPE: 'content-type',
12
+ ETAG: 'etag',
13
+ LAST_MODIFIED: 'last-modified',
7
14
  REQUEST_TRACING_ID: 'x-request-id',
8
15
  }; }
9
16
  static { this.HeaderValues = {
10
- APPLICATION_JSON: 'application/json',
11
17
  APPLICATION_FORM_URLENCODED: 'application/x-www-form-urlencoded',
12
- TEXT_PLAIN: 'text/plain',
18
+ APPLICATION_JSON: 'application/json',
19
+ APPPLICATION_OCTET_STREAM: 'application/octet-stream',
13
20
  MULTIPART_FORM_DATA: 'multipart/form-data',
21
+ TEXT_PLAIN: 'text/plain',
14
22
  }; }
15
23
  static { this.Methods = {
16
24
  GET: 'get',
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/common/constants/http.ts"],"names":[],"mappings":";;;AAEA,MAAa,IAAI;aACC,YAAO,GAAG;QACxB,aAAa,EAAE,eAAe;QAC9B,kBAAkB,EAAE,cAAc;KAC1B,CAAC;aAEK,iBAAY,GAAG;QAC7B,gBAAgB,EAAE,kBAAkB;QACpC,2BAA2B,EAAE,mCAAmC;QAChE,UAAU,EAAE,YAAY;QACxB,mBAAmB,EAAE,qBAAqB;KAClC,CAAC;aAEK,YAAO,GAAG;QACxB,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;KACV,CAAC;aAEK,gBAAW,GAAG;QAC5B,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;QACb,gBAAgB,EAAE,CAAC,GAAG;QAEtB,mFAAmF;QACnF,IAAI,EAAE;YACJ,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,GAAG;YACb,2BAA2B,EAAE,GAAG;YAChC,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;YACjB,cAAc,EAAE,GAAG;SACpB;QAED,4EAA4E;QAC5E,IAAI,EAAE;YACJ,UAAU,EAAE,GAAG;YACf,YAAY,EAAE,GAAG;YACjB,eAAe,EAAE,GAAG;YACpB,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,GAAG;YACb,gBAAgB,EAAE,GAAG;YACrB,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,GAAG;YACpB,UAAU,EAAE,GAAG;YACf,oBAAoB,EAAE,GAAG;YACzB,mBAAmB,EAAE,GAAG;SACzB;QAED,6EAA6E;QAC7E,IAAI,EAAE;YACJ,mBAAmB,EAAE,GAAG;YACxB,cAAc,EAAE,GAAG;SACpB;KACO,CAAC;;AA3Db,oBA4DC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/common/constants/http.ts"],"names":[],"mappings":";;;AAEA,MAAa,IAAI;aACC,YAAO,GAAG;QACxB,aAAa,EAAE,eAAe;QAC9B,aAAa,EAAE,eAAe;QAC9B,mBAAmB,EAAE,qBAAqB;QAC1C,gBAAgB,EAAE,kBAAkB;QACpC,cAAc,EAAE,gBAAgB;QAChC,YAAY,EAAE,cAAc;QAC5B,IAAI,EAAE,MAAM;QACZ,aAAa,EAAE,eAAe;QAC9B,kBAAkB,EAAE,cAAc;KAC1B,CAAC;aAEK,iBAAY,GAAG;QAC7B,2BAA2B,EAAE,mCAAmC;QAChE,gBAAgB,EAAE,kBAAkB;QACpC,yBAAyB,EAAE,0BAA0B;QACrD,mBAAmB,EAAE,qBAAqB;QAC1C,UAAU,EAAE,YAAY;KAChB,CAAC;aAEK,YAAO,GAAG;QACxB,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,SAAS;KACV,CAAC;aAEK,gBAAW,GAAG;QAC5B,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;QACb,gBAAgB,EAAE,CAAC,GAAG;QAEtB,mFAAmF;QACnF,IAAI,EAAE;YACJ,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,GAAG;YACb,2BAA2B,EAAE,GAAG;YAChC,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;YACjB,cAAc,EAAE,GAAG;SACpB;QAED,4EAA4E;QAC5E,IAAI,EAAE;YACJ,UAAU,EAAE,GAAG;YACf,YAAY,EAAE,GAAG;YACjB,eAAe,EAAE,GAAG;YACpB,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,GAAG;YACb,gBAAgB,EAAE,GAAG;YACrB,cAAc,EAAE,GAAG;YACnB,eAAe,EAAE,GAAG;YACpB,UAAU,EAAE,GAAG;YACf,oBAAoB,EAAE,GAAG;YACzB,mBAAmB,EAAE,GAAG;SACzB;QAED,6EAA6E;QAC7E,IAAI,EAAE;YACJ,mBAAmB,EAAE,GAAG;YACxB,cAAc,EAAE,GAAG;SACpB;KACO,CAAC;;AAnEb,oBAoEC"}
@@ -1,7 +1,6 @@
1
1
  export declare const MetadataKeys: {
2
2
  PROPERTIES: symbol;
3
3
  INJECT: symbol;
4
- INJECTABLE: symbol;
5
4
  } & {
6
5
  CONTROLLER: symbol;
7
6
  CONTROLLER_ROUTE: symbol;
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../../src/helpers/inversion/common/keys.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;CASvB,CAAC"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../../src/helpers/inversion/common/keys.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;CASvB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { BaseHelper } from '../../helpers/base';
2
+ import { Readable } from 'node:stream';
3
+ import { IBucketInfo, IFileStat, IStorageHelper, IUploadFile, IUploadResult } from './types';
4
+ export declare abstract class BaseStorageHelper extends BaseHelper implements IStorageHelper {
5
+ constructor(opts: {
6
+ scope: string;
7
+ identifier: string;
8
+ });
9
+ isValidName(name: string): boolean;
10
+ getFileType(opts: {
11
+ mimeType: string;
12
+ }): string;
13
+ abstract isBucketExists(opts: {
14
+ name: string;
15
+ }): Promise<boolean>;
16
+ abstract getBuckets(): Promise<IBucketInfo[]>;
17
+ abstract getBucket(opts: {
18
+ name: string;
19
+ }): Promise<IBucketInfo | null>;
20
+ abstract createBucket(opts: {
21
+ name: string;
22
+ }): Promise<IBucketInfo | null>;
23
+ abstract removeBucket(opts: {
24
+ name: string;
25
+ }): Promise<boolean>;
26
+ abstract upload(opts: {
27
+ bucket: string;
28
+ files: IUploadFile[];
29
+ normalizeNameFn?: (opts: {
30
+ originalName: string;
31
+ folderPath?: string;
32
+ }) => string;
33
+ normalizeLinkFn?: (opts: {
34
+ bucketName: string;
35
+ normalizeName: string;
36
+ }) => string;
37
+ }): Promise<IUploadResult[]>;
38
+ abstract getFile(opts: {
39
+ bucket: string;
40
+ name: string;
41
+ options?: any;
42
+ }): Promise<Readable>;
43
+ abstract getStat(opts: {
44
+ bucket: string;
45
+ name: string;
46
+ }): Promise<IFileStat>;
47
+ abstract removeObject(opts: {
48
+ bucket: string;
49
+ name: string;
50
+ }): Promise<void>;
51
+ abstract removeObjects(opts: {
52
+ bucket: string;
53
+ names: string[];
54
+ }): Promise<void>;
55
+ abstract listObjects(opts: {
56
+ bucket: string;
57
+ prefix?: string;
58
+ useRecursive?: boolean;
59
+ maxKeys?: number;
60
+ }): Promise<import('./types').IObjectInfo[]>;
61
+ }
62
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/helpers/storage/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG7F,8BAAsB,iBAAkB,SAAQ,UAAW,YAAW,cAAc;gBACtE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAKvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAoDlC,WAAW,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAkB/C,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IACjE,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IACvE,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1E,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAE/D,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;QAClF,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;KACnF,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAE5B,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC1F,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5E,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5E,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAChF,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,OAAO,SAAS,EAAE,WAAW,EAAE,CAAC;CAC7C"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BaseStorageHelper = void 0;
7
+ const common_1 = require("../../common");
8
+ const base_1 = require("../../helpers/base");
9
+ const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
10
+ // -------------------------------------------------------------------------
11
+ class BaseStorageHelper extends base_1.BaseHelper {
12
+ constructor(opts) {
13
+ super(opts);
14
+ }
15
+ // -------------------------------------------------------------------------
16
+ isValidName(name) {
17
+ if (typeof name !== 'string') {
18
+ this.logger.error('[isValidName] Invalid name provided: %j', name);
19
+ return false;
20
+ }
21
+ if (!name || (0, isEmpty_1.default)(name)) {
22
+ this.logger.error('[isValidName] Empty name provided');
23
+ return false;
24
+ }
25
+ // Prevent path traversal
26
+ if (name.includes('..') || name.includes('/') || name.includes('\\')) {
27
+ this.logger.error('[isValidName] Name contains invalid path characters: %s', name);
28
+ return false;
29
+ }
30
+ // Prevent hidden files (starting with dot)
31
+ if (name.startsWith('.')) {
32
+ this.logger.error('[isValidName] Name cannot start with a dot: %s', name);
33
+ return false;
34
+ }
35
+ // Prevent special shell characters
36
+ const dangerousChars = /[;|&$`<>{}[\]!#]/;
37
+ if (dangerousChars.test(name)) {
38
+ this.logger.error('[isValidName] Name contains dangerous characters: %s', name);
39
+ return false;
40
+ }
41
+ // Prevent newlines/carriage returns (header injection)
42
+ if (name.includes('\n') || name.includes('\r') || name.includes('\0')) {
43
+ this.logger.error('[isValidName] Name contains invalid control characters: %s', name);
44
+ return false;
45
+ }
46
+ // Prevent extremely long names (DoS)
47
+ if (name.length > 255) {
48
+ this.logger.error('[isValidName] Name is too long (%d characters): %s', name.length, name);
49
+ return false;
50
+ }
51
+ // Prevent empty or whitespace-only names
52
+ if (name.trim().length === 0) {
53
+ this.logger.error('[isValidName] Name cannot be empty or whitespace only: "%s"', name);
54
+ return false;
55
+ }
56
+ return true;
57
+ }
58
+ // -------------------------------------------------------------------------
59
+ getFileType(opts) {
60
+ const { mimeType } = opts;
61
+ if (mimeType?.toLowerCase()?.startsWith(common_1.MimeTypes.IMAGE)) {
62
+ return common_1.MimeTypes.IMAGE;
63
+ }
64
+ if (mimeType?.toLowerCase()?.startsWith(common_1.MimeTypes.VIDEO)) {
65
+ return common_1.MimeTypes.VIDEO;
66
+ }
67
+ if (mimeType?.toLowerCase()?.startsWith(common_1.MimeTypes.TEXT)) {
68
+ return common_1.MimeTypes.TEXT;
69
+ }
70
+ return common_1.MimeTypes.UNKNOWN;
71
+ }
72
+ }
73
+ exports.BaseStorageHelper = BaseStorageHelper;
74
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/helpers/storage/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { Readable } from 'node:stream';
2
+ import { BaseStorageHelper } from '../base';
3
+ import { IBucketInfo, IFileStat, IObjectInfo, IStorageHelperOptions, IUploadFile, IUploadResult } from '../types';
4
+ export interface IDiskHelperOptions extends IStorageHelperOptions {
5
+ basePath: string;
6
+ }
7
+ export declare class DiskHelper extends BaseStorageHelper {
8
+ private basePath;
9
+ constructor(options: IDiskHelperOptions);
10
+ private getBucketPath;
11
+ private getObjectPath;
12
+ isBucketExists(opts: {
13
+ name: string;
14
+ }): Promise<boolean>;
15
+ getBuckets(): Promise<IBucketInfo[]>;
16
+ getBucket(opts: {
17
+ name: string;
18
+ }): Promise<IBucketInfo | null>;
19
+ createBucket(opts: {
20
+ name: string;
21
+ }): Promise<IBucketInfo | null>;
22
+ removeBucket(opts: {
23
+ name: string;
24
+ }): Promise<boolean>;
25
+ upload(opts: {
26
+ bucket: string;
27
+ files: IUploadFile[];
28
+ normalizeNameFn?: (opts: {
29
+ originalName: string;
30
+ folderPath?: string;
31
+ }) => string;
32
+ normalizeLinkFn?: (opts: {
33
+ bucketName: string;
34
+ normalizeName: string;
35
+ }) => string;
36
+ }): Promise<IUploadResult[]>;
37
+ getFile(opts: {
38
+ bucket: string;
39
+ name: string;
40
+ options?: any;
41
+ }): Promise<Readable>;
42
+ getStat(opts: {
43
+ bucket: string;
44
+ name: string;
45
+ }): Promise<IFileStat>;
46
+ removeObject(opts: {
47
+ bucket: string;
48
+ name: string;
49
+ }): Promise<void>;
50
+ removeObjects(opts: {
51
+ bucket: string;
52
+ names: string[];
53
+ }): Promise<void>;
54
+ listObjects(opts: {
55
+ bucket: string;
56
+ prefix?: string;
57
+ useRecursive?: boolean;
58
+ maxKeys?: number;
59
+ }): Promise<IObjectInfo[]>;
60
+ }
61
+ //# sourceMappingURL=helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../../src/helpers/storage/disk/helper.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,aAAa,EACd,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,qBAAa,UAAW,SAAQ,iBAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,kBAAkB;IAcvC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,aAAa;IAKf,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxD,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAuBpC,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiB9D,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAqBjE,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA6BtD,MAAM,CAAC,IAAI,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;QAClF,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;KACnF,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgEtB,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAcjF,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAoBnE,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnE,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IASvE,WAAW,CAAC,IAAI,EAAE;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CA+C3B"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DiskHelper = void 0;
7
+ const error_1 = require("../../../helpers/error");
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const base_1 = require("../base");
11
+ // ================================================================================
12
+ class DiskHelper extends base_1.BaseStorageHelper {
13
+ constructor(options) {
14
+ super({
15
+ scope: options.scope ?? DiskHelper.name,
16
+ identifier: options.identifier ?? DiskHelper.name,
17
+ });
18
+ this.basePath = node_path_1.default.resolve(options.basePath);
19
+ // Ensure base path exists
20
+ if (!node_fs_1.default.existsSync(this.basePath)) {
21
+ node_fs_1.default.mkdirSync(this.basePath, { recursive: true });
22
+ }
23
+ }
24
+ // ---------------------------------------------------------------------
25
+ getBucketPath(bucketName) {
26
+ return node_path_1.default.join(this.basePath, bucketName);
27
+ }
28
+ // ---------------------------------------------------------------------
29
+ getObjectPath(bucketName, objectName) {
30
+ return node_path_1.default.join(this.getBucketPath(bucketName), objectName);
31
+ }
32
+ // ---------------------------------------------------------------------
33
+ async isBucketExists(opts) {
34
+ const { name } = opts;
35
+ if (!this.isValidName(name)) {
36
+ return false;
37
+ }
38
+ const bucketPath = this.getBucketPath(name);
39
+ return node_fs_1.default.existsSync(bucketPath) && node_fs_1.default.statSync(bucketPath).isDirectory();
40
+ }
41
+ // ---------------------------------------------------------------------
42
+ async getBuckets() {
43
+ if (!node_fs_1.default.existsSync(this.basePath)) {
44
+ return [];
45
+ }
46
+ const entries = node_fs_1.default.readdirSync(this.basePath, { withFileTypes: true });
47
+ const buckets = [];
48
+ for (const entry of entries) {
49
+ if (entry.isDirectory()) {
50
+ const bucketPath = node_path_1.default.join(this.basePath, entry.name);
51
+ const stat = node_fs_1.default.statSync(bucketPath);
52
+ buckets.push({
53
+ name: entry.name,
54
+ creationDate: stat.birthtime,
55
+ });
56
+ }
57
+ }
58
+ return buckets;
59
+ }
60
+ // ---------------------------------------------------------------------
61
+ async getBucket(opts) {
62
+ const { name } = opts;
63
+ const isExists = await this.isBucketExists(opts);
64
+ if (!isExists) {
65
+ return null;
66
+ }
67
+ const bucketPath = this.getBucketPath(name);
68
+ const stat = node_fs_1.default.statSync(bucketPath);
69
+ return {
70
+ name,
71
+ creationDate: stat.birthtime,
72
+ };
73
+ }
74
+ // ---------------------------------------------------------------------
75
+ async createBucket(opts) {
76
+ const { name } = opts;
77
+ if (!this.isValidName(name)) {
78
+ throw (0, error_1.getError)({
79
+ message: '[createBucket] Invalid name to create bucket!',
80
+ });
81
+ }
82
+ const bucketPath = this.getBucketPath(name);
83
+ if (node_fs_1.default.existsSync(bucketPath)) {
84
+ throw (0, error_1.getError)({
85
+ message: `[createBucket] Bucket already exists | name: ${name}`,
86
+ });
87
+ }
88
+ node_fs_1.default.mkdirSync(bucketPath, { recursive: true });
89
+ return this.getBucket({ name });
90
+ }
91
+ // ---------------------------------------------------------------------
92
+ async removeBucket(opts) {
93
+ const { name } = opts;
94
+ if (!this.isValidName(name)) {
95
+ throw (0, error_1.getError)({
96
+ message: '[removeBucket] Invalid name to remove bucket!',
97
+ });
98
+ }
99
+ const bucketPath = this.getBucketPath(name);
100
+ if (!node_fs_1.default.existsSync(bucketPath)) {
101
+ throw (0, error_1.getError)({
102
+ message: `[removeBucket] Bucket does not exist | name: ${name}`,
103
+ });
104
+ }
105
+ // Check if bucket is empty
106
+ const files = node_fs_1.default.readdirSync(bucketPath);
107
+ if (files.length > 0) {
108
+ throw (0, error_1.getError)({
109
+ message: `[removeBucket] Bucket is not empty | name: ${name}`,
110
+ });
111
+ }
112
+ node_fs_1.default.rmdirSync(bucketPath);
113
+ return true;
114
+ }
115
+ // ---------------------------------------------------------------------
116
+ async upload(opts) {
117
+ const { bucket, files, normalizeNameFn, normalizeLinkFn } = opts;
118
+ if (!files || files.length === 0) {
119
+ return [];
120
+ }
121
+ const isExists = await this.isBucketExists({ name: bucket });
122
+ if (!isExists) {
123
+ throw (0, error_1.getError)({
124
+ message: `[upload] Bucket does not exist | name: ${bucket}`,
125
+ });
126
+ }
127
+ // Validate all files first
128
+ for (const file of files) {
129
+ const { originalName, size, folderPath } = file;
130
+ if (!this.isValidName(originalName)) {
131
+ throw (0, error_1.getError)({ message: '[upload] Invalid original file name' });
132
+ }
133
+ if (folderPath && !this.isValidName(folderPath)) {
134
+ throw (0, error_1.getError)({ message: '[upload] Invalid folder path' });
135
+ }
136
+ if (!size) {
137
+ throw (0, error_1.getError)({ message: `[upload] Invalid file size` });
138
+ }
139
+ }
140
+ const uploadPromises = files.map(async (file) => {
141
+ const { originalName, buffer, size, mimetype: mimeType, encoding, folderPath } = file;
142
+ const t = performance.now();
143
+ const normalizeName = normalizeNameFn
144
+ ? normalizeNameFn({ originalName, folderPath })
145
+ : folderPath
146
+ ? `${folderPath.toLowerCase().replace(/ /g, '_')}/${originalName.toLowerCase().replace(/ /g, '_')}`
147
+ : originalName.toLowerCase().replace(/ /g, '_');
148
+ const normalizeLink = normalizeLinkFn
149
+ ? normalizeLinkFn({ bucketName: bucket, normalizeName })
150
+ : `/static-resources/${bucket}/${encodeURIComponent(normalizeName)}`;
151
+ const objectPath = this.getObjectPath(bucket, normalizeName);
152
+ node_fs_1.default.writeFileSync(objectPath, buffer);
153
+ this.logger.info('[upload] Uploaded: %j | Took: %s (ms)', { normalizeName, normalizeLink, mimeType, encoding, size }, performance.now() - t);
154
+ return {
155
+ bucketName: bucket,
156
+ objectName: normalizeName,
157
+ link: normalizeLink,
158
+ };
159
+ });
160
+ return Promise.all(uploadPromises);
161
+ }
162
+ // ---------------------------------------------------------------------
163
+ async getFile(opts) {
164
+ const { bucket, name } = opts;
165
+ const objectPath = this.getObjectPath(bucket, name);
166
+ if (!node_fs_1.default.existsSync(objectPath)) {
167
+ throw (0, error_1.getError)({
168
+ message: `[getFile] File not found | bucket: ${bucket} | name: ${name}`,
169
+ });
170
+ }
171
+ return node_fs_1.default.createReadStream(objectPath);
172
+ }
173
+ // ---------------------------------------------------------------------
174
+ async getStat(opts) {
175
+ const { bucket, name } = opts;
176
+ const objectPath = this.getObjectPath(bucket, name);
177
+ if (!node_fs_1.default.existsSync(objectPath)) {
178
+ throw (0, error_1.getError)({
179
+ message: `[getStat] File not found | bucket: ${bucket} | name: ${name}`,
180
+ });
181
+ }
182
+ const stat = node_fs_1.default.statSync(objectPath);
183
+ return {
184
+ size: stat.size,
185
+ lastModified: stat.mtime,
186
+ metadata: {},
187
+ };
188
+ }
189
+ // ---------------------------------------------------------------------
190
+ async removeObject(opts) {
191
+ const { bucket, name } = opts;
192
+ const objectPath = this.getObjectPath(bucket, name);
193
+ if (!node_fs_1.default.existsSync(objectPath)) {
194
+ throw (0, error_1.getError)({
195
+ message: `[removeObject] File not found | bucket: ${bucket} | name: ${name}`,
196
+ });
197
+ }
198
+ node_fs_1.default.unlinkSync(objectPath);
199
+ }
200
+ // ---------------------------------------------------------------------
201
+ async removeObjects(opts) {
202
+ const { bucket, names } = opts;
203
+ for (const name of names) {
204
+ await this.removeObject({ bucket, name });
205
+ }
206
+ }
207
+ // ---------------------------------------------------------------------
208
+ async listObjects(opts) {
209
+ const { bucket, prefix = '', useRecursive = false, maxKeys } = opts;
210
+ const bucketPath = this.getBucketPath(bucket);
211
+ if (!node_fs_1.default.existsSync(bucketPath)) {
212
+ return [];
213
+ }
214
+ const objects = [];
215
+ const scanDirectory = (dirPath, currentPrefix = '') => {
216
+ if (maxKeys && objects.length >= maxKeys) {
217
+ return;
218
+ }
219
+ const entries = node_fs_1.default.readdirSync(dirPath, { withFileTypes: true });
220
+ for (const entry of entries) {
221
+ const fullName = currentPrefix ? `${currentPrefix}/${entry.name}` : entry.name;
222
+ const fullPath = node_path_1.default.join(dirPath, entry.name);
223
+ if (entry.isDirectory()) {
224
+ if (useRecursive) {
225
+ scanDirectory(fullPath, fullName);
226
+ }
227
+ }
228
+ else if (entry.isFile()) {
229
+ // Check if file matches prefix
230
+ if (!prefix || fullName.startsWith(prefix)) {
231
+ const stat = node_fs_1.default.statSync(fullPath);
232
+ objects.push({
233
+ name: fullName,
234
+ size: stat.size,
235
+ lastModified: stat.mtime,
236
+ etag: undefined,
237
+ });
238
+ if (maxKeys && objects.length >= maxKeys) {
239
+ break;
240
+ }
241
+ }
242
+ }
243
+ }
244
+ };
245
+ scanDirectory(bucketPath);
246
+ return objects;
247
+ }
248
+ }
249
+ exports.DiskHelper = DiskHelper;
250
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/helpers/storage/disk/helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './helper';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/helpers/storage/disk/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./helper"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/helpers/storage/disk/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
@@ -1,3 +1,6 @@
1
+ export * from './base';
2
+ export * from './disk';
1
3
  export * from './in-memory';
2
4
  export * from './minio';
5
+ export * from './types';
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -14,6 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base"), exports);
18
+ __exportStar(require("./disk"), exports);
17
19
  __exportStar(require("./in-memory"), exports);
18
20
  __exportStar(require("./minio"), exports);
21
+ __exportStar(require("./types"), exports);
19
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/storage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/storage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,yCAAuB;AACvB,8CAA4B;AAC5B,0CAAwB;AACxB,0CAAwB"}
@@ -1,41 +1,37 @@
1
- import { BaseHelper } from '../../../helpers/base';
2
1
  import { Client, ClientOptions } from 'minio';
3
2
  import { Readable } from 'node:stream';
4
- export interface IUploadFile {
5
- originalname: string;
6
- mimetype: string;
7
- buffer: Buffer;
8
- size: number;
9
- encoding: string;
10
- [key: string | symbol]: any;
3
+ import { BaseStorageHelper } from '../base';
4
+ import { IBucketInfo, IFileStat, IObjectInfo, IStorageHelperOptions, IUploadFile, IUploadResult } from '../types';
5
+ export interface IMinioHelperOptions extends IStorageHelperOptions, ClientOptions {
11
6
  }
12
- export declare class MinioHelper extends BaseHelper {
7
+ export declare class MinioHelper extends BaseStorageHelper {
13
8
  client: Client;
14
- constructor(options: ClientOptions);
9
+ constructor(options: IMinioHelperOptions);
15
10
  isBucketExists(opts: {
16
11
  name: string;
17
12
  }): Promise<boolean>;
18
- getBuckets(): Promise<import("minio").BucketItemFromList[]>;
13
+ getBuckets(): Promise<IBucketInfo[]>;
19
14
  getBucket(opts: {
20
15
  name: string;
21
- }): Promise<import("minio").BucketItemFromList | null | undefined>;
16
+ }): Promise<IBucketInfo | null>;
22
17
  createBucket(opts: {
23
18
  name: string;
24
- }): Promise<import("minio").BucketItemFromList | null | undefined>;
19
+ }): Promise<IBucketInfo | null>;
25
20
  removeBucket(opts: {
26
21
  name: string;
27
22
  }): Promise<boolean>;
28
- getFileType(opts: {
29
- mimeType: string;
30
- }): "unknown" | "image" | "video" | "text";
31
23
  upload(opts: {
32
24
  bucket: string;
33
- files: Array<IUploadFile>;
34
- }): Promise<Array<{
35
- bucket: string;
36
- fileName: string;
37
- link: string;
38
- }>>;
25
+ files: IUploadFile[];
26
+ normalizeNameFn?: (opts: {
27
+ originalName: string;
28
+ folderPath?: string;
29
+ }) => string;
30
+ normalizeLinkFn?: (opts: {
31
+ bucketName: string;
32
+ normalizeName: string;
33
+ }) => string;
34
+ }): Promise<IUploadResult[]>;
39
35
  getFile(opts: {
40
36
  bucket: string;
41
37
  name: string;
@@ -49,19 +45,20 @@ export declare class MinioHelper extends BaseHelper {
49
45
  getStat(opts: {
50
46
  bucket: string;
51
47
  name: string;
52
- }): Promise<import("minio").BucketItemStat>;
48
+ }): Promise<IFileStat>;
53
49
  removeObject(opts: {
54
50
  bucket: string;
55
51
  name: string;
56
52
  }): Promise<void>;
57
53
  removeObjects(opts: {
58
54
  bucket: string;
59
- names: Array<string>;
55
+ names: string[];
60
56
  }): Promise<void>;
61
- getListObjects(opts: {
57
+ listObjects(opts: {
62
58
  bucket: string;
63
59
  prefix?: string;
64
60
  useRecursive?: boolean;
65
- }): import("minio").BucketStream<import("minio/dist/main/internal/type.js").ObjectInfo>;
61
+ maxKeys?: number;
62
+ }): Promise<IObjectInfo[]>;
66
63
  }
67
64
  //# sourceMappingURL=helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../../src/helpers/storage/minio/helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC7B;AAGD,qBAAa,WAAY,SAAQ,UAAU;IACzC,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,aAAa;IAM5B,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAWrC,UAAU;IAMV,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAYhC,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAcnC,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAazC,WAAW,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAkBhC,MAAM,CAAC,IAAI,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;KAC3B,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA8DtE,OAAO,CAAC,IAAI,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE;YACR,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;YAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;KACH,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMf,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAO9C,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAMnD,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE;IAMlE,cAAc,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE;CAKjF"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../../src/helpers/storage/minio/helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,aAAa,EACd,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB,EAAE,aAAa;CAAG;AAGpF,qBAAa,WAAY,SAAQ,iBAAiB;IAChD,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,mBAAmB;IASlC,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAWrC,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAMpC,SAAS,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAY9D,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAcjE,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAatD,MAAM,CAAC,IAAI,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;QAClF,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,KAAK,MAAM,CAAC;KACnF,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAqE5B,OAAO,CAAC,IAAI,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE;YACR,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;YAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;KACH,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMf,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAanE,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvE,WAAW,CAAC,IAAI,EAAE;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAyB3B"}
@@ -1,24 +1,22 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.MinioHelper = void 0;
7
- const common_1 = require("../../../common");
8
- const base_1 = require("../../../helpers/base");
9
4
  const error_1 = require("../../../helpers/error");
10
- const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
11
5
  const minio_1 = require("minio");
12
- // ---------------------------------------------------------------------
13
- class MinioHelper extends base_1.BaseHelper {
6
+ const base_1 = require("../base");
7
+ // ================================================================================
8
+ class MinioHelper extends base_1.BaseStorageHelper {
14
9
  constructor(options) {
15
- super({ scope: MinioHelper.name, identifier: MinioHelper.name });
10
+ super({
11
+ scope: options.scope ?? MinioHelper.name,
12
+ identifier: options.identifier ?? MinioHelper.name,
13
+ });
16
14
  this.client = new minio_1.Client(options);
17
15
  }
18
16
  // ---------------------------------------------------------------------
19
17
  async isBucketExists(opts) {
20
18
  const { name } = opts;
21
- if (!name || (0, isEmpty_1.default)(name)) {
19
+ if (!this.isValidName(name)) {
22
20
  return false;
23
21
  }
24
22
  const isExists = await this.client.bucketExists(name);
@@ -35,14 +33,14 @@ class MinioHelper extends base_1.BaseHelper {
35
33
  if (!isExists) {
36
34
  return null;
37
35
  }
38
- const allBuckets = await this.getBuckets();
39
- const bucket = allBuckets.find(el => el.name === opts.name);
40
- return bucket;
36
+ const buckets = await this.getBuckets();
37
+ const bucket = buckets.find(el => el.name === opts.name);
38
+ return bucket ?? null;
41
39
  }
42
40
  // ---------------------------------------------------------------------
43
41
  async createBucket(opts) {
44
42
  const { name } = opts;
45
- if (!name || (0, isEmpty_1.default)(name)) {
43
+ if (!this.isValidName(name)) {
46
44
  throw (0, error_1.getError)({
47
45
  message: '[createBucket] Invalid name to create bucket!',
48
46
  });
@@ -54,7 +52,7 @@ class MinioHelper extends base_1.BaseHelper {
54
52
  // ---------------------------------------------------------------------
55
53
  async removeBucket(opts) {
56
54
  const { name } = opts;
57
- if (!name || (0, isEmpty_1.default)(name)) {
55
+ if (!this.isValidName(name)) {
58
56
  throw (0, error_1.getError)({
59
57
  message: '[removeBucket] Invalid name to remove bucket!',
60
58
  });
@@ -63,61 +61,53 @@ class MinioHelper extends base_1.BaseHelper {
63
61
  return true;
64
62
  }
65
63
  // ---------------------------------------------------------------------
66
- getFileType(opts) {
67
- const { mimeType } = opts;
68
- if (mimeType?.toLowerCase()?.startsWith(common_1.MimeTypes.IMAGE)) {
69
- return common_1.MimeTypes.IMAGE;
70
- }
71
- if (mimeType?.toLowerCase()?.startsWith(common_1.MimeTypes.VIDEO)) {
72
- return common_1.MimeTypes.VIDEO;
73
- }
74
- if (mimeType?.toLowerCase()?.startsWith(common_1.MimeTypes.TEXT)) {
75
- return common_1.MimeTypes.TEXT;
76
- }
77
- return common_1.MimeTypes.UNKNOWN;
78
- }
79
- // ---------------------------------------------------------------------
80
64
  async upload(opts) {
81
- const { bucket, files } = opts;
65
+ const { bucket, files, normalizeNameFn, normalizeLinkFn } = opts;
82
66
  if (!files || files.length === 0) {
83
67
  return [];
84
68
  }
85
69
  const isExists = await this.isBucketExists({ name: bucket });
86
70
  if (!isExists) {
87
- return [];
71
+ throw (0, error_1.getError)({
72
+ message: `[upload] Bucket does not exist | name: ${bucket}`,
73
+ });
88
74
  }
89
75
  // Validate all files first
90
76
  for (const file of files) {
91
- const { originalname: originalName, size } = file;
92
- if (!originalName || (0, isEmpty_1.default)(originalName)) {
93
- this.logger.error('[upload] Invalid original name!');
94
- throw (0, error_1.getError)({
95
- message: '[upload] Invalid original file name | please check again files!',
96
- });
77
+ const { originalName, size, folderPath } = file;
78
+ if (!this.isValidName(originalName)) {
79
+ throw (0, error_1.getError)({ message: '[upload] Invalid original file name' });
80
+ }
81
+ if (folderPath && !this.isValidName(folderPath)) {
82
+ throw (0, error_1.getError)({ message: '[upload] Invalid folder path' });
97
83
  }
98
84
  if (!size) {
99
- throw (0, error_1.getError)({
100
- message: `[upload] Invalid file size | please check again update file | name: ${originalName}`,
101
- });
85
+ throw (0, error_1.getError)({ message: `[upload] Invalid file size` });
102
86
  }
103
87
  }
104
- // Upload all files
105
88
  const uploadPromises = files.map(async (file) => {
106
- const { originalname: originalName, mimetype: mimeType, buffer, size, encoding } = file;
107
- const normalizeName = originalName.toLowerCase().replace(/ /g, '_');
108
- const t = new Date().getTime();
109
- const uploadInfo = await this.client.putObject(bucket, normalizeName, buffer, size, {
89
+ const { folderPath, originalName, mimetype: mimeType, buffer, size, encoding } = file;
90
+ const t = performance.now();
91
+ const normalizeName = normalizeNameFn
92
+ ? normalizeNameFn({ originalName, folderPath })
93
+ : folderPath
94
+ ? `${folderPath.toLowerCase().replace(/ /g, '_')}/${originalName.toLowerCase().replace(/ /g, '_')}`
95
+ : originalName.toLowerCase().replace(/ /g, '_');
96
+ const normalizeLink = normalizeLinkFn
97
+ ? normalizeLinkFn({ bucketName: bucket, normalizeName })
98
+ : `/static-assets/${bucket}/${encodeURIComponent(normalizeName)}`;
99
+ await this.client.putObject(bucket, normalizeName, buffer, size, {
110
100
  originalName,
111
101
  normalizeName,
112
102
  size,
113
103
  encoding,
114
104
  mimeType,
115
105
  });
116
- this.logger.info('[upload] Uploaded: %j | Took: %s (ms)', uploadInfo, new Date().getTime() - t);
106
+ this.logger.info('[upload] Uploaded: %j | Took: %s (ms)', { normalizeName, normalizeLink, mimeType, encoding, size }, performance.now() - t);
117
107
  return {
118
- bucket,
119
- fileName: normalizeName,
120
- link: `/static-assets/${bucket}/${encodeURIComponent(normalizeName)}`,
108
+ bucketName: bucket,
109
+ objectName: normalizeName,
110
+ link: normalizeLink,
121
111
  };
122
112
  });
123
113
  return Promise.all(uploadPromises);
@@ -131,7 +121,13 @@ class MinioHelper extends base_1.BaseHelper {
131
121
  async getStat(opts) {
132
122
  const { bucket, name } = opts;
133
123
  const stat = await this.client.statObject(bucket, name);
134
- return stat;
124
+ return {
125
+ size: stat.size,
126
+ metadata: stat.metaData,
127
+ lastModified: stat.lastModified,
128
+ etag: stat.etag,
129
+ versionId: stat.versionId ?? undefined,
130
+ };
135
131
  }
136
132
  // ---------------------------------------------------------------------
137
133
  async removeObject(opts) {
@@ -144,10 +140,26 @@ class MinioHelper extends base_1.BaseHelper {
144
140
  await this.client.removeObjects(bucket, names);
145
141
  }
146
142
  // ---------------------------------------------------------------------
147
- getListObjects(opts) {
148
- const { bucket, prefix = '', useRecursive = false } = opts;
149
- const listObjects = this.client.listObjects(bucket, prefix, useRecursive);
150
- return listObjects;
143
+ async listObjects(opts) {
144
+ const { bucket, prefix = '', useRecursive = false, maxKeys } = opts;
145
+ return new Promise((resolve, reject) => {
146
+ const objects = [];
147
+ const stream = this.client.listObjects(bucket, prefix, useRecursive);
148
+ stream.on('data', obj => {
149
+ objects.push({
150
+ name: obj.name,
151
+ size: obj.size,
152
+ lastModified: obj.lastModified,
153
+ etag: obj.etag,
154
+ prefix: obj.prefix,
155
+ });
156
+ if (maxKeys && objects.length >= maxKeys) {
157
+ stream.destroy();
158
+ }
159
+ });
160
+ stream.on('end', () => resolve(objects));
161
+ stream.on('error', err => reject(err));
162
+ });
151
163
  }
152
164
  }
153
165
  exports.MinioHelper = MinioHelper;
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/helpers/storage/minio/helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/helpers/storage/minio/helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { Readable } from 'node:stream';
2
+ export interface IUploadFile {
3
+ originalName: string;
4
+ mimetype: string;
5
+ buffer: Buffer;
6
+ size: number;
7
+ encoding?: string;
8
+ folderPath?: string;
9
+ [key: string | symbol]: any;
10
+ }
11
+ export interface IUploadResult {
12
+ bucketName: string;
13
+ objectName: string;
14
+ link: string;
15
+ metaLink?: any;
16
+ metaLinkError?: any;
17
+ }
18
+ export interface IFileStat {
19
+ size: number;
20
+ metadata: Record<string, any>;
21
+ lastModified?: Date;
22
+ etag?: string;
23
+ versionId?: string;
24
+ }
25
+ export interface IBucketInfo {
26
+ name: string;
27
+ creationDate: Date;
28
+ }
29
+ export interface IObjectInfo {
30
+ name?: string;
31
+ size?: number;
32
+ lastModified?: Date;
33
+ etag?: string;
34
+ prefix?: string;
35
+ }
36
+ export interface IListObjectsOptions {
37
+ bucket: string;
38
+ prefix?: string;
39
+ useRecursive?: boolean;
40
+ maxKeys?: number;
41
+ }
42
+ export interface IStorageHelperOptions {
43
+ scope?: string;
44
+ identifier?: string;
45
+ }
46
+ export interface IStorageHelper {
47
+ isValidName(name: string): boolean;
48
+ isBucketExists(opts: {
49
+ name: string;
50
+ }): Promise<boolean>;
51
+ getBuckets(): Promise<IBucketInfo[]>;
52
+ getBucket(opts: {
53
+ name: string;
54
+ }): Promise<IBucketInfo | null>;
55
+ createBucket(opts: {
56
+ name: string;
57
+ }): Promise<IBucketInfo | null>;
58
+ removeBucket(opts: {
59
+ name: string;
60
+ }): Promise<boolean>;
61
+ upload(opts: {
62
+ bucket: string;
63
+ files: IUploadFile[];
64
+ normalizeNameFn?: (opts: {
65
+ originalName: string;
66
+ folderPath?: string;
67
+ }) => string;
68
+ normalizeLinkFn?: (opts: {
69
+ bucketName: string;
70
+ normalizeName: string;
71
+ }) => string;
72
+ }): Promise<IUploadResult[]>;
73
+ getFile(opts: {
74
+ bucket: string;
75
+ name: string;
76
+ options?: any;
77
+ }): Promise<Readable>;
78
+ getStat(opts: {
79
+ bucket: string;
80
+ name: string;
81
+ }): Promise<IFileStat>;
82
+ removeObject(opts: {
83
+ bucket: string;
84
+ name: string;
85
+ }): Promise<void>;
86
+ removeObjects(opts: {
87
+ bucket: string;
88
+ names: string[];
89
+ }): Promise<void>;
90
+ listObjects(opts: IListObjectsOptions): Promise<IObjectInfo[]>;
91
+ getFileType(opts: {
92
+ mimeType: string;
93
+ }): string;
94
+ }
95
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/helpers/storage/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/helpers/storage/types.ts"],"names":[],"mappings":""}
@@ -28,5 +28,18 @@ export declare const parseMultipartBody: <C extends {
28
28
  } = {
29
29
  req: any;
30
30
  }>(opts: IParseMultipartOptions<C>) => Promise<IParsedFile[]>;
31
+ /**
32
+ * Sanitizes a filename for safe use, removing path components and dangerous characters.
33
+ * Useful for HTTP headers (e.g., Content-Disposition) and general file handling.
34
+ *
35
+ * @param filename - The original filename to sanitize.
36
+ * @returns A safe, sanitized filename string.
37
+ */
38
+ export declare const sanitizeFilename: (filename: string) => string;
39
+ export declare const encodeRFC5987: (filename: string) => string;
40
+ export declare const createContentDispositionHeader: (opts: {
41
+ filename: string;
42
+ type: "attachment" | "inline";
43
+ }) => string;
31
44
  export {};
32
45
  //# sourceMappingURL=request.utility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC/B;AAED,UAAU,sBAAsB,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE;IACpE,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,GAAU,CAAC,SAAS;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,EAC5E,MAAM,sBAAsB,CAAC,CAAC,CAAC,KAC9B,OAAO,CAAC,WAAW,EAAE,CA0DvB,CAAC"}
1
+ {"version":3,"file":"request.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAC/B;AAED,UAAU,sBAAsB,CAAC,CAAC,SAAS;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE;IACpE,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,GAAU,CAAC,SAAS;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,GAAG,CAAA;CAAE,EAC5E,MAAM,sBAAsB,CAAC,CAAC,CAAC,KAC9B,OAAO,CAAC,WAAW,EAAE,CA0DvB,CAAC;AAGF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,MAgBnD,CAAC;AAGF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAIhD,CAAC;AAGF,eAAO,MAAM,8BAA8B,GAAI,MAAM;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAC;CAC/B,KAAG,MAQH,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.parseMultipartBody = void 0;
6
+ exports.createContentDispositionHeader = exports.encodeRFC5987 = exports.sanitizeFilename = exports.parseMultipartBody = void 0;
7
7
  const error_1 = require("../helpers/error");
8
8
  const node_fs_1 = __importDefault(require("node:fs"));
9
9
  const node_path_1 = __importDefault(require("node:path"));
@@ -57,4 +57,47 @@ const parseMultipartBody = async (opts) => {
57
57
  return files;
58
58
  };
59
59
  exports.parseMultipartBody = parseMultipartBody;
60
+ // -------------------------------------------------------------------------
61
+ /**
62
+ * Sanitizes a filename for safe use, removing path components and dangerous characters.
63
+ * Useful for HTTP headers (e.g., Content-Disposition) and general file handling.
64
+ *
65
+ * @param filename - The original filename to sanitize.
66
+ * @returns A safe, sanitized filename string.
67
+ */
68
+ const sanitizeFilename = (filename) => {
69
+ const basename = node_path_1.default.basename(filename);
70
+ // Remove or replace dangerous characters
71
+ // Allow only alphanumeric, spaces, hyphens, underscores, and dots
72
+ let sanitized = basename.replace(/[^\w\s.-]/g, '_');
73
+ // Remove leading dots
74
+ sanitized = sanitized.replace(/^\.+/, '');
75
+ // Replace consecutive dots with a single dot
76
+ sanitized = sanitized.replace(/\.{2,}/g, '.');
77
+ // Remove any occurrence of ".."
78
+ sanitized = sanitized.replace(/\.\./g, '.');
79
+ // Prevent empty filename or suspicious patterns
80
+ if (!sanitized || sanitized === '.' || sanitized.includes('..')) {
81
+ sanitized = 'download';
82
+ }
83
+ return sanitized;
84
+ };
85
+ exports.sanitizeFilename = sanitizeFilename;
86
+ // Create RFC 5987 encoded filename
87
+ const encodeRFC5987 = (filename) => {
88
+ return encodeURIComponent(filename)
89
+ .replace(/['()]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())
90
+ .replace(/\*/g, '%2A');
91
+ };
92
+ exports.encodeRFC5987 = encodeRFC5987;
93
+ // Create safe Content-Disposition header
94
+ const createContentDispositionHeader = (opts) => {
95
+ const { filename, type } = opts;
96
+ const sanitized = (0, exports.sanitizeFilename)(filename);
97
+ const encoded = (0, exports.encodeRFC5987)(sanitized);
98
+ // Use both ASCII fallback and UTF-8 encoded version for better compatibility
99
+ // filename= for old browsers, filename*= for modern browsers with UTF-8 support
100
+ return `${type}; filename="${sanitized}"; filename*=UTF-8''${encoded}`;
101
+ };
102
+ exports.createContentDispositionHeader = createContentDispositionHeader;
60
103
  //# sourceMappingURL=request.utility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.utility.js","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":";;;;;;AAAA,2CAA2C;AAC3C,sDAAyB;AACzB,0DAA6B;AA2BtB,MAAM,kBAAkB,GAAG,KAAK,EACrC,IAA+B,EACP,EAAE;IAC1B,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAE,SAAS,GAAG,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEtE,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACpD,iBAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,KAAa,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAExC,MAAM,UAAU,GAAgB;YAC9B,SAAS;YACT,YAAY,EAAE,IAAI,CAAC,IAAI;YACvB,QAAQ,EAAE,MAAM,EAAE,mBAAmB;YACrC,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;QAEF,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC3B,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC7D,8CAA8C;gBAC9C,MAAM,aAAa,GAAG,mBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBAChF,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAEhD,iBAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAEnC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC/B,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAC3B,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAA,gBAAQ,EAAC;oBACb,OAAO,EAAE,iCAAiC,OAAO,sDAAsD;iBACxG,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AA5DW,QAAA,kBAAkB,sBA4D7B"}
1
+ {"version":3,"file":"request.utility.js","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@venizia/ignis-helpers",
3
- "version": "0.0.1-6",
3
+ "version": "0.0.1-7",
4
4
  "description": "Utility helpers for the Ignis Framework - logging, cron, Redis, queues, storage, and more",
5
5
  "keywords": [
6
6
  "ignis",
@@ -86,12 +86,12 @@
86
86
  "bugs": {
87
87
  "url": "https://github.com/VENIZIA-AI/ignis/issues"
88
88
  },
89
- "homepage": "https://github.com/VENIZIA-AI/ignis/wiki",
89
+ "homepage": "https://venizia-ai.github.io/ignis",
90
90
  "license": "MIT",
91
91
  "dependencies": {
92
92
  "@socket.io/redis-adapter": "^8.3.0",
93
93
  "@socket.io/redis-emitter": "^5.1.0",
94
- "@venizia/ignis-inversion": "^0.0.1-7",
94
+ "@venizia/ignis-inversion": "^0.0.1-8",
95
95
  "axios": "^1.12.2",
96
96
  "bullmq": "^5.63.1",
97
97
  "cron": "^4.3.3",