@flusys/nestjs-storage 7.1.0 → 8.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.
Files changed (202) hide show
  1. package/config/index.d.ts +3 -3
  2. package/controllers/file-manager.controller.d.ts +4 -4
  3. package/controllers/folder.controller.d.ts +2 -2
  4. package/controllers/index.d.ts +4 -4
  5. package/controllers/storage-config.controller.d.ts +2 -2
  6. package/controllers/upload.controller.d.ts +3 -3
  7. package/docs/index.d.ts +1 -1
  8. package/docs/storage-swagger.config.d.ts +2 -2
  9. package/dtos/index.d.ts +4 -4
  10. package/entities/file-manager-with-company.entity.d.ts +2 -2
  11. package/entities/file-manager.entity.d.ts +1 -1
  12. package/entities/folder-with-company.entity.d.ts +1 -1
  13. package/entities/index.d.ts +15 -15
  14. package/entities/storage-config-with-company.entity.d.ts +1 -1
  15. package/enums/index.d.ts +1 -1
  16. package/fesm/493.js +2768 -0
  17. package/fesm/537.js +1157 -0
  18. package/fesm/562.js +786 -0
  19. package/fesm/{providers/azure-provider.optional.js → chunks/190.js} +33 -30
  20. package/fesm/chunks/252.js +12 -0
  21. package/fesm/chunks/327.js +12 -0
  22. package/fesm/chunks/385.js +12 -0
  23. package/fesm/{providers/s3-provider.optional.js → chunks/591.js} +37 -34
  24. package/fesm/chunks/746.js +12 -0
  25. package/fesm/chunks/798.js +12 -0
  26. package/fesm/{providers/sftp-provider.optional.js → chunks/918.js} +35 -31
  27. package/fesm/config/index.js +119 -3
  28. package/fesm/controllers/index.js +16 -4
  29. package/fesm/docs/index.js +206 -1
  30. package/fesm/dtos/index.js +879 -4
  31. package/fesm/entities/index.js +463 -18
  32. package/fesm/enums/index.js +36 -1
  33. package/fesm/index.js +398 -12
  34. package/fesm/interfaces/index.js +19 -5
  35. package/fesm/modules/index.js +16 -1
  36. package/fesm/providers/index.js +364 -3
  37. package/fesm/runtime.js +252 -0
  38. package/fesm/services/index.js +16 -6
  39. package/fesm/utils/index.js +149 -1
  40. package/index.d.ts +11 -11
  41. package/interfaces/file-manager.interface.d.ts +1 -1
  42. package/interfaces/folder.interface.d.ts +1 -1
  43. package/interfaces/index.d.ts +5 -5
  44. package/interfaces/storage-config.interface.d.ts +1 -1
  45. package/interfaces/storage-module-options.interface.d.ts +3 -3
  46. package/interfaces/storage-provider.interface.d.ts +1 -1
  47. package/middlewares/file-serve.middleware.d.ts +4 -3
  48. package/middlewares/index.d.ts +1 -1
  49. package/modules/index.d.ts +1 -1
  50. package/modules/storage.module.d.ts +2 -2
  51. package/package.json +30 -41
  52. package/providers/azure-provider.optional.d.ts +2 -2
  53. package/providers/index.d.ts +3 -3
  54. package/providers/local-provider.d.ts +2 -2
  55. package/providers/s3-provider.optional.d.ts +2 -2
  56. package/providers/sftp-provider.optional.d.ts +2 -2
  57. package/providers/storage-factory.service.d.ts +3 -3
  58. package/providers/storage-provider.registry.d.ts +2 -2
  59. package/services/file-manager.service.d.ts +9 -8
  60. package/services/folder.service.d.ts +6 -6
  61. package/services/index.d.ts +6 -6
  62. package/services/storage-config.service.d.ts +3 -3
  63. package/services/storage-datasource.provider.d.ts +3 -3
  64. package/services/storage-provider-config.service.d.ts +7 -7
  65. package/services/upload.service.d.ts +6 -6
  66. package/utils/image-compressor.util.d.ts +1 -1
  67. package/utils/index.d.ts +1 -1
  68. package/cjs/config/event-actions.js +0 -34
  69. package/cjs/config/index.js +0 -20
  70. package/cjs/config/message-keys.js +0 -46
  71. package/cjs/config/storage.constants.js +0 -28
  72. package/cjs/controllers/file-manager.controller.js +0 -152
  73. package/cjs/controllers/file-manager.controller.spec.js +0 -135
  74. package/cjs/controllers/folder.controller.js +0 -102
  75. package/cjs/controllers/folder.controller.spec.js +0 -86
  76. package/cjs/controllers/index.js +0 -21
  77. package/cjs/controllers/storage-config.controller.js +0 -102
  78. package/cjs/controllers/storage-config.controller.spec.js +0 -85
  79. package/cjs/controllers/upload.controller.js +0 -234
  80. package/cjs/controllers/upload.controller.spec.js +0 -132
  81. package/cjs/docs/index.js +0 -11
  82. package/cjs/docs/storage-swagger.config.js +0 -188
  83. package/cjs/docs/storage-swagger.config.spec.js +0 -72
  84. package/cjs/dtos/file-manager.dto.js +0 -327
  85. package/cjs/dtos/folder.dto.js +0 -105
  86. package/cjs/dtos/index.js +0 -21
  87. package/cjs/dtos/storage-config.dto.js +0 -170
  88. package/cjs/dtos/upload.dto.js +0 -272
  89. package/cjs/entities/file-manager-with-company.entity.js +0 -61
  90. package/cjs/entities/file-manager.entity.js +0 -122
  91. package/cjs/entities/folder-with-company.entity.js +0 -55
  92. package/cjs/entities/folder.entity.js +0 -64
  93. package/cjs/entities/index.js +0 -63
  94. package/cjs/entities/index.spec.js +0 -18
  95. package/cjs/entities/storage-config-with-company.entity.js +0 -51
  96. package/cjs/entities/storage-config.entity.js +0 -96
  97. package/cjs/enums/file-location.enum.js +0 -17
  98. package/cjs/enums/index.js +0 -18
  99. package/cjs/index.js +0 -29
  100. package/cjs/interfaces/file-manager.interface.js +0 -4
  101. package/cjs/interfaces/folder.interface.js +0 -4
  102. package/cjs/interfaces/index.js +0 -22
  103. package/cjs/interfaces/storage-config.interface.js +0 -4
  104. package/cjs/interfaces/storage-module-options.interface.js +0 -4
  105. package/cjs/interfaces/storage-provider.interface.js +0 -4
  106. package/cjs/middlewares/file-serve.middleware.js +0 -241
  107. package/cjs/middlewares/file-serve.middleware.spec.js +0 -211
  108. package/cjs/middlewares/index.js +0 -18
  109. package/cjs/modules/index.js +0 -18
  110. package/cjs/modules/storage.module.js +0 -165
  111. package/cjs/modules/storage.module.spec.js +0 -184
  112. package/cjs/providers/azure-provider.optional.js +0 -155
  113. package/cjs/providers/azure-provider.optional.spec.js +0 -228
  114. package/cjs/providers/index.js +0 -26
  115. package/cjs/providers/local-provider.js +0 -230
  116. package/cjs/providers/local-provider.spec.js +0 -239
  117. package/cjs/providers/s3-provider.optional.js +0 -175
  118. package/cjs/providers/s3-provider.optional.spec.js +0 -243
  119. package/cjs/providers/sftp-provider.optional.js +0 -203
  120. package/cjs/providers/sftp-provider.optional.spec.js +0 -217
  121. package/cjs/providers/storage-factory.service.js +0 -175
  122. package/cjs/providers/storage-factory.service.spec.js +0 -253
  123. package/cjs/providers/storage-provider.registry.js +0 -41
  124. package/cjs/providers/storage-provider.registry.spec.js +0 -67
  125. package/cjs/services/file-manager.service.js +0 -387
  126. package/cjs/services/file-manager.service.spec.js +0 -580
  127. package/cjs/services/folder.service.js +0 -101
  128. package/cjs/services/folder.service.spec.js +0 -167
  129. package/cjs/services/index.js +0 -23
  130. package/cjs/services/storage-config.service.js +0 -129
  131. package/cjs/services/storage-config.service.spec.js +0 -257
  132. package/cjs/services/storage-datasource.provider.js +0 -137
  133. package/cjs/services/storage-datasource.provider.spec.js +0 -217
  134. package/cjs/services/storage-provider-config.service.js +0 -171
  135. package/cjs/services/storage-provider-config.service.spec.js +0 -265
  136. package/cjs/services/upload.service.js +0 -376
  137. package/cjs/services/upload.service.spec.js +0 -426
  138. package/cjs/utils/file-validator.util.js +0 -440
  139. package/cjs/utils/file-validator.util.spec.js +0 -259
  140. package/cjs/utils/image-compressor.util.js +0 -162
  141. package/cjs/utils/image-compressor.util.spec.js +0 -166
  142. package/cjs/utils/index.js +0 -18
  143. package/fesm/config/event-actions.js +0 -13
  144. package/fesm/config/message-keys.js +0 -22
  145. package/fesm/config/storage.constants.js +0 -7
  146. package/fesm/controllers/file-manager.controller.js +0 -142
  147. package/fesm/controllers/file-manager.controller.spec.js +0 -131
  148. package/fesm/controllers/folder.controller.js +0 -92
  149. package/fesm/controllers/folder.controller.spec.js +0 -82
  150. package/fesm/controllers/storage-config.controller.js +0 -92
  151. package/fesm/controllers/storage-config.controller.spec.js +0 -81
  152. package/fesm/controllers/upload.controller.js +0 -224
  153. package/fesm/controllers/upload.controller.spec.js +0 -128
  154. package/fesm/docs/storage-swagger.config.js +0 -181
  155. package/fesm/docs/storage-swagger.config.spec.js +0 -68
  156. package/fesm/dtos/file-manager.dto.js +0 -300
  157. package/fesm/dtos/folder.dto.js +0 -84
  158. package/fesm/dtos/storage-config.dto.js +0 -149
  159. package/fesm/dtos/upload.dto.js +0 -245
  160. package/fesm/entities/file-manager-with-company.entity.js +0 -51
  161. package/fesm/entities/file-manager.entity.js +0 -112
  162. package/fesm/entities/folder-with-company.entity.js +0 -45
  163. package/fesm/entities/folder.entity.js +0 -54
  164. package/fesm/entities/index.spec.js +0 -14
  165. package/fesm/entities/storage-config-with-company.entity.js +0 -41
  166. package/fesm/entities/storage-config.entity.js +0 -86
  167. package/fesm/enums/file-location.enum.js +0 -7
  168. package/fesm/interfaces/file-manager.interface.js +0 -1
  169. package/fesm/interfaces/folder.interface.js +0 -1
  170. package/fesm/interfaces/storage-config.interface.js +0 -1
  171. package/fesm/interfaces/storage-module-options.interface.js +0 -3
  172. package/fesm/interfaces/storage-provider.interface.js +0 -4
  173. package/fesm/middlewares/file-serve.middleware.js +0 -190
  174. package/fesm/middlewares/file-serve.middleware.spec.js +0 -207
  175. package/fesm/middlewares/index.js +0 -1
  176. package/fesm/modules/storage.module.js +0 -156
  177. package/fesm/modules/storage.module.spec.js +0 -180
  178. package/fesm/providers/azure-provider.optional.spec.js +0 -224
  179. package/fesm/providers/local-provider.js +0 -182
  180. package/fesm/providers/local-provider.spec.js +0 -194
  181. package/fesm/providers/s3-provider.optional.spec.js +0 -239
  182. package/fesm/providers/sftp-provider.optional.spec.js +0 -213
  183. package/fesm/providers/storage-factory.service.js +0 -124
  184. package/fesm/providers/storage-factory.service.spec.js +0 -249
  185. package/fesm/providers/storage-provider.registry.js +0 -34
  186. package/fesm/providers/storage-provider.registry.spec.js +0 -63
  187. package/fesm/services/file-manager.service.js +0 -336
  188. package/fesm/services/file-manager.service.spec.js +0 -576
  189. package/fesm/services/folder.service.js +0 -91
  190. package/fesm/services/folder.service.spec.js +0 -163
  191. package/fesm/services/storage-config.service.js +0 -119
  192. package/fesm/services/storage-config.service.spec.js +0 -253
  193. package/fesm/services/storage-datasource.provider.js +0 -86
  194. package/fesm/services/storage-datasource.provider.spec.js +0 -172
  195. package/fesm/services/storage-provider-config.service.js +0 -161
  196. package/fesm/services/storage-provider-config.service.spec.js +0 -261
  197. package/fesm/services/upload.service.js +0 -366
  198. package/fesm/services/upload.service.spec.js +0 -422
  199. package/fesm/utils/file-validator.util.js +0 -433
  200. package/fesm/utils/file-validator.util.spec.js +0 -255
  201. package/fesm/utils/image-compressor.util.js +0 -114
  202. package/fesm/utils/image-compressor.util.spec.js +0 -162
@@ -1,387 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "FileManagerService", {
6
- enumerable: true,
7
- get: function() {
8
- return FileManagerService;
9
- }
10
- });
11
- const _classes = require("@flusys/nestjs-shared/classes");
12
- const _modules = require("@flusys/nestjs-shared/modules");
13
- const _utils = require("@flusys/nestjs-shared/utils");
14
- const _common = require("@nestjs/common");
15
- const _typeorm = require("typeorm");
16
- const _config = require("../config");
17
- const _entities = require("../entities");
18
- const _filelocationenum = require("../enums/file-location.enum");
19
- const _storageconfigservice = require("./storage-config.service");
20
- const _storagedatasourceprovider = require("./storage-datasource.provider");
21
- const _uploadservice = require("./upload.service");
22
- function _define_property(obj, key, value) {
23
- if (key in obj) {
24
- Object.defineProperty(obj, key, {
25
- value: value,
26
- enumerable: true,
27
- configurable: true,
28
- writable: true
29
- });
30
- } else {
31
- obj[key] = value;
32
- }
33
- return obj;
34
- }
35
- function _getRequireWildcardCache(nodeInterop) {
36
- if (typeof WeakMap !== "function") return null;
37
- var cacheBabelInterop = new WeakMap();
38
- var cacheNodeInterop = new WeakMap();
39
- return (_getRequireWildcardCache = function(nodeInterop) {
40
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
41
- })(nodeInterop);
42
- }
43
- function _interop_require_wildcard(obj, nodeInterop) {
44
- if (!nodeInterop && obj && obj.__esModule) {
45
- return obj;
46
- }
47
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
48
- return {
49
- default: obj
50
- };
51
- }
52
- var cache = _getRequireWildcardCache(nodeInterop);
53
- if (cache && cache.has(obj)) {
54
- return cache.get(obj);
55
- }
56
- var newObj = {
57
- __proto__: null
58
- };
59
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
60
- for(var key in obj){
61
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
62
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
63
- if (desc && (desc.get || desc.set)) {
64
- Object.defineProperty(newObj, key, desc);
65
- } else {
66
- newObj[key] = obj[key];
67
- }
68
- }
69
- }
70
- newObj.default = obj;
71
- if (cache) {
72
- cache.set(obj, newObj);
73
- }
74
- return newObj;
75
- }
76
- function _ts_decorate(decorators, target, key, desc) {
77
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
78
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
79
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
80
- return c > 3 && r && Object.defineProperty(target, key, r), r;
81
- }
82
- function _ts_metadata(k, v) {
83
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
84
- }
85
- function _ts_param(paramIndex, decorator) {
86
- return function(target, key) {
87
- decorator(target, key, paramIndex);
88
- };
89
- }
90
- const URL_EXPIRY_SECONDS = 3600;
91
- const DEFAULT_SELECT_FIELDS = [
92
- 'id',
93
- 'name',
94
- 'contentType',
95
- 'size',
96
- 'key',
97
- 'url',
98
- 'location',
99
- 'storageConfigId',
100
- 'isPrivate',
101
- 'createdAt',
102
- 'deletedAt'
103
- ];
104
- let FileManagerService = class FileManagerService extends _classes.ApiService {
105
- // ─── Override Methods ───────────────────────────────────────────────────────
106
- async convertSingleDtoToEntity(dto, user) {
107
- let entity = {};
108
- if ('id' in dto && dto.id && typeof dto.id === 'string') {
109
- const existing = await this.repository.findOne({
110
- where: {
111
- id: dto.id
112
- }
113
- });
114
- if (!existing) throw new _common.NotFoundException({
115
- message: 'Entity not found for update',
116
- messageKey: _config.FILE_MESSAGES.NOT_FOUND
117
- });
118
- entity = existing;
119
- }
120
- const validatedFolder = dto.folderId ? await this.validateFolder(dto.folderId, user) : null;
121
- const storageLocation = await this.resolveStorageLocation(dto, user);
122
- const merged = {
123
- ...entity,
124
- ...dto,
125
- location: storageLocation,
126
- folder: validatedFolder
127
- };
128
- if (this.storageConfig.isCompanyFeatureEnabled()) {
129
- merged.companyId = user?.companyId ?? null;
130
- }
131
- return merged;
132
- }
133
- async getSelectQuery(query, _user, select) {
134
- const fields = (select?.length ? select : DEFAULT_SELECT_FIELDS).map((f)=>`${this.entityName}.${f}`);
135
- if (this.storageConfig.isCompanyFeatureEnabled()) {
136
- fields.push('file_manager.companyId');
137
- }
138
- fields.push('folder.id', 'folder.name');
139
- query.leftJoinAndSelect('file_manager.folder', 'folder').select(fields);
140
- return {
141
- query,
142
- isRaw: false
143
- };
144
- }
145
- async getFilterQuery(query, filter, _user) {
146
- for (const [key, value] of Object.entries(filter)){
147
- if (key === 'contentType' && typeof value === 'string') {
148
- this.applyContentTypeFilter(query, value);
149
- } else {
150
- query.andWhere(`${this.entityName}.${key} = :value`, {
151
- value
152
- });
153
- }
154
- }
155
- return {
156
- query,
157
- isRaw: false
158
- };
159
- }
160
- async getExtraManipulateQuery(query, filterDto, user) {
161
- const result = await super.getExtraManipulateQuery(query, filterDto, user);
162
- (0, _utils.applyCompanyFilter)(query, {
163
- isCompanyFeatureEnabled: this.storageConfig.isCompanyFeatureEnabled(),
164
- entityAlias: 'file_manager'
165
- }, user);
166
- await this.applyPrivateFileFilter(query, user);
167
- return result;
168
- }
169
- async beforeDeleteOperation(dto, user, _qr) {
170
- if (dto.type !== 'permanent') return;
171
- const ids = Array.isArray(dto.id) ? dto.id : [
172
- dto.id
173
- ];
174
- const files = await this.repository.findBy({
175
- id: (0, _typeorm.In)(ids)
176
- });
177
- const grouped = this.groupFilesByConfig(files);
178
- for (const [configId, { keys, location }] of grouped){
179
- let deleteKeys = keys;
180
- if (location === _filelocationenum.FileLocationEnum.LOCAL && configId !== 'default') {
181
- const basePath = await this.getStorageConfigBasePath(configId);
182
- if (basePath) {
183
- deleteKeys = keys.map((k)=>k.includes('/') ? k : `${basePath}/${k}`);
184
- }
185
- }
186
- await this.uploadService.deleteMultipleFile(deleteKeys, configId === 'default' ? undefined : configId, user ?? undefined, location);
187
- }
188
- }
189
- // ─── Public Methods ─────────────────────────────────────────────────────────
190
- async getFiles(dtos, protocol, host, user) {
191
- await this.ensureDataSourceRepository();
192
- const ids = dtos.map((d)=>d.id).filter(Boolean);
193
- if (!ids.length) throw new _common.BadRequestException({
194
- message: 'No valid file IDs provided',
195
- messageKey: _config.UPLOAD_MESSAGES.NO_FILES_PROVIDED
196
- });
197
- const files = await this.repository.findBy({
198
- id: (0, _typeorm.In)(ids)
199
- });
200
- const now = Date.now();
201
- const updatedFiles = [];
202
- const responses = await Promise.all(files.map(async (file)=>{
203
- const updated = await this.refreshFileUrl(file, protocol, host, now, user);
204
- if (updated) updatedFiles.push(file);
205
- return this.toFileResponse(file);
206
- }));
207
- if (updatedFiles.length) {
208
- try {
209
- await this.repository.save(updatedFiles);
210
- await Promise.all([
211
- this.clearCacheForAll(),
212
- this.clearCacheForId(updatedFiles)
213
- ]);
214
- } catch {
215
- // Silent failure - URL update is non-critical
216
- }
217
- }
218
- return responses;
219
- }
220
- // ─── Private Helpers ────────────────────────────────────────────────────────
221
- buildWhereWithCompany(id, user) {
222
- const where = {
223
- id
224
- };
225
- if (this.storageConfig.isCompanyFeatureEnabled() && user?.companyId) {
226
- where.companyId = user.companyId;
227
- }
228
- return where;
229
- }
230
- async getStorageConfigRepository() {
231
- const entity = this.storageConfig.isCompanyFeatureEnabled() ? (await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")))).StorageConfigWithCompany : (await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")))).StorageConfig;
232
- return this.dataSourceProvider.getRepository(entity);
233
- }
234
- async getStorageConfigBasePath(configId) {
235
- try {
236
- const repo = await this.getStorageConfigRepository();
237
- const config = await repo.findOne({
238
- where: {
239
- id: configId
240
- },
241
- select: [
242
- 'id',
243
- 'config'
244
- ]
245
- });
246
- return config?.config?.basePath?.replace(/^\.\//, '') ?? null;
247
- } catch {
248
- return null;
249
- }
250
- }
251
- async validateFolder(folderId, user) {
252
- const entity = this.storageConfig.isCompanyFeatureEnabled() ? _entities.FolderWithCompany : _entities.Folder;
253
- const repo = await this.dataSourceProvider.getRepository(entity);
254
- const folder = await repo.findOne({
255
- where: this.buildWhereWithCompany(folderId, user)
256
- });
257
- if (!folder) {
258
- throw new _common.BadRequestException({
259
- message: `Folder "${folderId}" not found or access denied`,
260
- messageKey: _config.FOLDER_MESSAGES.NOT_FOUND,
261
- messageVariables: {
262
- folderId
263
- }
264
- });
265
- }
266
- return folder;
267
- }
268
- async resolveStorageLocation(dto, user) {
269
- const configId = dto.storageConfigId;
270
- if (!configId) return dto.location || _filelocationenum.FileLocationEnum.LOCAL;
271
- try {
272
- const repo = await this.getStorageConfigRepository();
273
- const config = await repo.findOne({
274
- where: this.buildWhereWithCompany(configId, user)
275
- });
276
- return config?.storage || dto.location || _filelocationenum.FileLocationEnum.LOCAL;
277
- } catch {
278
- return dto.location || _filelocationenum.FileLocationEnum.LOCAL;
279
- }
280
- }
281
- applyContentTypeFilter(query, value) {
282
- const patterns = value.split(',').map((t)=>t.trim().replace('*', '%'));
283
- query.where(new _typeorm.Brackets((qb)=>{
284
- patterns.forEach((p, i)=>{
285
- const method = i === 0 ? 'where' : 'orWhere';
286
- qb[method](`${this.entityName}.contentType LIKE :p${i}`, {
287
- [`p${i}`]: p
288
- });
289
- });
290
- }));
291
- }
292
- async applyPrivateFileFilter(query, user) {
293
- if (!user) {
294
- query.andWhere('file_manager.isPrivate = :isPrivate', {
295
- isPrivate: false
296
- });
297
- return;
298
- }
299
- const canViewPrivate = await this.permissionCacheService.hasPermission({
300
- userId: user.id,
301
- companyId: user.companyId,
302
- branchId: user.branchId
303
- }, _classes.FILE_PERMISSIONS.VIEW_PRIVATE_ACTION);
304
- if (!canViewPrivate) {
305
- query.andWhere('file_manager.isPrivate = :isPrivate', {
306
- isPrivate: false
307
- });
308
- }
309
- }
310
- groupFilesByConfig(files) {
311
- const grouped = new Map();
312
- for (const file of files){
313
- const configId = file.storageConfigId || 'default';
314
- if (!grouped.has(configId)) {
315
- grouped.set(configId, {
316
- keys: [],
317
- location: file.location
318
- });
319
- }
320
- grouped.get(configId).keys.push(file.key);
321
- }
322
- return grouped;
323
- }
324
- getFileBaseUrl(protocol, host) {
325
- const appUrl = this.storageConfig.getAppUrl()?.replace(/\/$/, '');
326
- return appUrl || `${protocol}://${host}`;
327
- }
328
- async refreshFileUrl(file, protocol, host, now, user) {
329
- const isCloudProvider = file.location === _filelocationenum.FileLocationEnum.AWS || file.location === _filelocationenum.FileLocationEnum.AZURE;
330
- const needsNewUrl = !file.url || isCloudProvider && (typeof file.expiresAt !== 'number' || now >= file.expiresAt);
331
- if (needsNewUrl && file.storageConfigId) {
332
- try {
333
- file.url = await this.uploadService.makeFileUrl(file.key, file.storageConfigId, URL_EXPIRY_SECONDS, user);
334
- file.expiresAt = now + URL_EXPIRY_SECONDS * 1000;
335
- return true;
336
- } catch {
337
- file.url = `${this.getFileBaseUrl(protocol, host)}/storage/upload/file/${file.key}`;
338
- }
339
- }
340
- if (file.location === _filelocationenum.FileLocationEnum.SFTP || file.location === _filelocationenum.FileLocationEnum.LOCAL) {
341
- let fileKey = file.key;
342
- if (!fileKey.includes('/') && file.storageConfigId) {
343
- const basePath = await this.getStorageConfigBasePath(file.storageConfigId);
344
- if (basePath) fileKey = `${basePath}/${file.key}`;
345
- }
346
- const expectedUrl = `${this.getFileBaseUrl(protocol, host)}/storage/upload/file/${fileKey}`;
347
- if (file.url !== expectedUrl) {
348
- file.url = expectedUrl;
349
- return true;
350
- }
351
- }
352
- return false;
353
- }
354
- toFileResponse(file) {
355
- return {
356
- id: file.id,
357
- name: file.name,
358
- contentType: file.contentType,
359
- url: file.url || '',
360
- location: file.location,
361
- storageConfigId: file.storageConfigId || undefined
362
- };
363
- }
364
- constructor(cacheManager, utilsService, uploadService, storageConfig, dataSourceProvider, permissionCacheService){
365
- super(_config.STORAGE_EVENT_ENTITIES.FILE, cacheManager, utilsService, FileManagerService.name, true, _config.STORAGE_EVENT_MODULE, dataSourceProvider, storageConfig.isCompanyFeatureEnabled() ? _entities.FileManagerWithCompany : _entities.FileManager), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "uploadService", void 0), _define_property(this, "storageConfig", void 0), _define_property(this, "dataSourceProvider", void 0), _define_property(this, "permissionCacheService", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.uploadService = uploadService, this.storageConfig = storageConfig, this.dataSourceProvider = dataSourceProvider, this.permissionCacheService = permissionCacheService;
366
- }
367
- };
368
- FileManagerService = _ts_decorate([
369
- (0, _common.Injectable)({
370
- scope: _common.Scope.REQUEST
371
- }),
372
- _ts_param(0, (0, _common.Inject)('CACHE_INSTANCE')),
373
- _ts_param(1, (0, _common.Inject)(_modules.UtilsService)),
374
- _ts_param(2, (0, _common.Inject)(_uploadservice.UploadService)),
375
- _ts_param(3, (0, _common.Inject)(_storageconfigservice.StorageConfigService)),
376
- _ts_param(4, (0, _common.Inject)(_storagedatasourceprovider.StorageDataSourceProvider)),
377
- _ts_param(5, (0, _common.Inject)(_modules.SharedPermissionCacheService)),
378
- _ts_metadata("design:type", Function),
379
- _ts_metadata("design:paramtypes", [
380
- typeof _classes.HybridCache === "undefined" ? Object : _classes.HybridCache,
381
- typeof _modules.UtilsService === "undefined" ? Object : _modules.UtilsService,
382
- typeof _uploadservice.UploadService === "undefined" ? Object : _uploadservice.UploadService,
383
- typeof _storageconfigservice.StorageConfigService === "undefined" ? Object : _storageconfigservice.StorageConfigService,
384
- typeof _storagedatasourceprovider.StorageDataSourceProvider === "undefined" ? Object : _storagedatasourceprovider.StorageDataSourceProvider,
385
- typeof _modules.SharedPermissionCacheService === "undefined" ? Object : _modules.SharedPermissionCacheService
386
- ])
387
- ], FileManagerService);