@webiny/api-file-manager 6.3.0 → 6.4.0-beta.1

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 (251) hide show
  1. package/contants.js +2 -1
  2. package/contants.js.map +1 -1
  3. package/delivery/AssetDelivery/Asset.js +50 -56
  4. package/delivery/AssetDelivery/Asset.js.map +1 -1
  5. package/delivery/AssetDelivery/AssetDeliveryConfig.js +70 -83
  6. package/delivery/AssetDelivery/AssetDeliveryConfig.js.map +1 -1
  7. package/delivery/AssetDelivery/AssetRequest.js +20 -19
  8. package/delivery/AssetDelivery/AssetRequest.js.map +1 -1
  9. package/delivery/AssetDelivery/FilesAssetRequestResolver.js +19 -25
  10. package/delivery/AssetDelivery/FilesAssetRequestResolver.js.map +1 -1
  11. package/delivery/AssetDelivery/NullAssetOutputStrategy.js +5 -4
  12. package/delivery/AssetDelivery/NullAssetOutputStrategy.js.map +1 -1
  13. package/delivery/AssetDelivery/NullAssetReply.js +10 -9
  14. package/delivery/AssetDelivery/NullAssetReply.js.map +1 -1
  15. package/delivery/AssetDelivery/NullAssetResolver.js +5 -4
  16. package/delivery/AssetDelivery/NullAssetResolver.js.map +1 -1
  17. package/delivery/AssetDelivery/NullRequestResolver.js +5 -4
  18. package/delivery/AssetDelivery/NullRequestResolver.js.map +1 -1
  19. package/delivery/AssetDelivery/SetCacheControlHeaders.js +11 -14
  20. package/delivery/AssetDelivery/SetCacheControlHeaders.js.map +1 -1
  21. package/delivery/AssetDelivery/SetResponseHeaders.js +16 -15
  22. package/delivery/AssetDelivery/SetResponseHeaders.js.map +1 -1
  23. package/delivery/AssetDelivery/abstractions/AssetContentsReader.js +0 -3
  24. package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js +0 -3
  25. package/delivery/AssetDelivery/abstractions/AssetProcessor.js +0 -3
  26. package/delivery/AssetDelivery/abstractions/AssetReply.js +28 -27
  27. package/delivery/AssetDelivery/abstractions/AssetReply.js.map +1 -1
  28. package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js +0 -3
  29. package/delivery/AssetDelivery/abstractions/AssetResolver.js +0 -3
  30. package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js +0 -3
  31. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js +4 -5
  32. package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js.map +1 -1
  33. package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js +0 -3
  34. package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js +15 -14
  35. package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +1 -1
  36. package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js +5 -4
  37. package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -1
  38. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +14 -16
  39. package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -1
  40. package/delivery/AssetDelivery/privateFiles/PrivateCache.js +18 -17
  41. package/delivery/AssetDelivery/privateFiles/PrivateCache.js.map +1 -1
  42. package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +21 -25
  43. package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -1
  44. package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js +44 -51
  45. package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -1
  46. package/delivery/AssetDelivery/privateFiles/PublicCache.js +18 -17
  47. package/delivery/AssetDelivery/privateFiles/PublicCache.js.map +1 -1
  48. package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js +16 -15
  49. package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -1
  50. package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js +16 -15
  51. package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -1
  52. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js +5 -4
  53. package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js.map +1 -1
  54. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js +5 -4
  55. package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +1 -1
  56. package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js +12 -15
  57. package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js.map +1 -1
  58. package/delivery/index.js +0 -2
  59. package/delivery/setupAssetDelivery.js +70 -101
  60. package/delivery/setupAssetDelivery.js.map +1 -1
  61. package/domain/file/abstractions.js +2 -5
  62. package/domain/file/abstractions.js.map +1 -1
  63. package/domain/file/errors.js +67 -76
  64. package/domain/file/errors.js.map +1 -1
  65. package/domain/file/file.model.js +57 -49
  66. package/domain/file/file.model.js.map +1 -1
  67. package/domain/file/types.js +0 -3
  68. package/domain/identity/Identity.js +9 -8
  69. package/domain/identity/Identity.js.map +1 -1
  70. package/domain/permissionsSchema.js +26 -15
  71. package/domain/permissionsSchema.js.map +1 -1
  72. package/domain/settings/constants.js +2 -1
  73. package/domain/settings/constants.js.map +1 -1
  74. package/domain/settings/errors.js +22 -24
  75. package/domain/settings/errors.js.map +1 -1
  76. package/domain/settings/types.js +0 -3
  77. package/domain/settings/validation.js +18 -27
  78. package/domain/settings/validation.js.map +1 -1
  79. package/exports/api/file-manager/file.js +0 -2
  80. package/exports/api/file-manager/permissions.js +0 -2
  81. package/exports/api/file-manager/settings.js +0 -2
  82. package/features/FileManagerFeature.js +16 -15
  83. package/features/FileManagerFeature.js.map +1 -1
  84. package/features/file/CreateFile/CreateFileRepository.js +20 -18
  85. package/features/file/CreateFile/CreateFileRepository.js.map +1 -1
  86. package/features/file/CreateFile/CreateFileUseCase.js +68 -75
  87. package/features/file/CreateFile/CreateFileUseCase.js.map +1 -1
  88. package/features/file/CreateFile/abstractions.js +3 -14
  89. package/features/file/CreateFile/abstractions.js.map +1 -1
  90. package/features/file/CreateFile/events.js +17 -26
  91. package/features/file/CreateFile/events.js.map +1 -1
  92. package/features/file/CreateFile/feature.js +7 -6
  93. package/features/file/CreateFile/feature.js.map +1 -1
  94. package/features/file/CreateFile/index.js +0 -2
  95. package/features/file/CreateFilesInBatch/CreateFilesInBatchRepository.js +15 -17
  96. package/features/file/CreateFilesInBatch/CreateFilesInBatchRepository.js.map +1 -1
  97. package/features/file/CreateFilesInBatch/CreateFilesInBatchUseCase.js +59 -70
  98. package/features/file/CreateFilesInBatch/CreateFilesInBatchUseCase.js.map +1 -1
  99. package/features/file/CreateFilesInBatch/abstractions.js +3 -14
  100. package/features/file/CreateFilesInBatch/abstractions.js.map +1 -1
  101. package/features/file/CreateFilesInBatch/events.js +17 -26
  102. package/features/file/CreateFilesInBatch/events.js.map +1 -1
  103. package/features/file/CreateFilesInBatch/feature.js +7 -6
  104. package/features/file/CreateFilesInBatch/feature.js.map +1 -1
  105. package/features/file/CreateFilesInBatch/index.js +0 -2
  106. package/features/file/DeleteFile/DeleteFileRepository.js +21 -20
  107. package/features/file/DeleteFile/DeleteFileRepository.js.map +1 -1
  108. package/features/file/DeleteFile/DeleteFileUseCase.js +31 -33
  109. package/features/file/DeleteFile/DeleteFileUseCase.js.map +1 -1
  110. package/features/file/DeleteFile/abstractions.js +3 -14
  111. package/features/file/DeleteFile/abstractions.js.map +1 -1
  112. package/features/file/DeleteFile/events.js +17 -26
  113. package/features/file/DeleteFile/events.js.map +1 -1
  114. package/features/file/DeleteFile/feature.js +7 -6
  115. package/features/file/DeleteFile/feature.js.map +1 -1
  116. package/features/file/DeleteFile/index.js +1 -3
  117. package/features/file/FileUrlGenerator/abstractions.js +2 -2
  118. package/features/file/FileUrlGenerator/abstractions.js.map +1 -1
  119. package/features/file/GetFile/GetFileRepository.js +22 -22
  120. package/features/file/GetFile/GetFileRepository.js.map +1 -1
  121. package/features/file/GetFile/GetFileUseCase.js +19 -21
  122. package/features/file/GetFile/GetFileUseCase.js.map +1 -1
  123. package/features/file/GetFile/abstractions.js +3 -14
  124. package/features/file/GetFile/abstractions.js.map +1 -1
  125. package/features/file/GetFile/feature.js +7 -6
  126. package/features/file/GetFile/feature.js.map +1 -1
  127. package/features/file/GetFile/index.js +0 -2
  128. package/features/file/GetFileContentsById/abstractions.d.ts +20 -0
  129. package/features/file/GetFileContentsById/abstractions.js +5 -0
  130. package/features/file/GetFileContentsById/abstractions.js.map +1 -0
  131. package/features/file/GetFileContentsById/index.d.ts +1 -0
  132. package/features/file/GetFileContentsById/index.js +1 -0
  133. package/features/file/GetFileContentsByKey/abstractions.d.ts +17 -0
  134. package/features/file/GetFileContentsByKey/abstractions.js +5 -0
  135. package/features/file/GetFileContentsByKey/abstractions.js.map +1 -0
  136. package/features/file/GetFileContentsByKey/index.d.ts +1 -0
  137. package/features/file/GetFileContentsByKey/index.js +1 -0
  138. package/features/file/ListFiles/ListFilesRepository.js +42 -40
  139. package/features/file/ListFiles/ListFilesRepository.js.map +1 -1
  140. package/features/file/ListFiles/ListFilesUseCase.js +33 -34
  141. package/features/file/ListFiles/ListFilesUseCase.js.map +1 -1
  142. package/features/file/ListFiles/abstractions.js +3 -14
  143. package/features/file/ListFiles/abstractions.js.map +1 -1
  144. package/features/file/ListFiles/feature.js +7 -6
  145. package/features/file/ListFiles/feature.js.map +1 -1
  146. package/features/file/ListFiles/index.js +0 -2
  147. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js +31 -28
  148. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js.map +1 -1
  149. package/features/file/ListImagesByTagTool/feature.js +6 -5
  150. package/features/file/ListImagesByTagTool/feature.js.map +1 -1
  151. package/features/file/ListTags/ListTagsRepository.js +31 -36
  152. package/features/file/ListTags/ListTagsRepository.js.map +1 -1
  153. package/features/file/ListTags/ListTagsUseCase.js +21 -21
  154. package/features/file/ListTags/ListTagsUseCase.js.map +1 -1
  155. package/features/file/ListTags/abstractions.js +3 -14
  156. package/features/file/ListTags/abstractions.js.map +1 -1
  157. package/features/file/ListTags/feature.js +7 -6
  158. package/features/file/ListTags/feature.js.map +1 -1
  159. package/features/file/ListTags/index.js +0 -2
  160. package/features/file/UpdateFile/UpdateFileRepository.js +26 -28
  161. package/features/file/UpdateFile/UpdateFileRepository.js.map +1 -1
  162. package/features/file/UpdateFile/UpdateFileUseCase.js +57 -65
  163. package/features/file/UpdateFile/UpdateFileUseCase.js.map +1 -1
  164. package/features/file/UpdateFile/abstractions.js +3 -14
  165. package/features/file/UpdateFile/abstractions.js.map +1 -1
  166. package/features/file/UpdateFile/events.js +17 -26
  167. package/features/file/UpdateFile/events.js.map +1 -1
  168. package/features/file/UpdateFile/feature.js +7 -6
  169. package/features/file/UpdateFile/feature.js.map +1 -1
  170. package/features/file/UpdateFile/index.js +1 -3
  171. package/features/file/shared/EntryToFileMapper.js +25 -24
  172. package/features/file/shared/EntryToFileMapper.js.map +1 -1
  173. package/features/file/shared/FileInputToEntryInputMapper.js +29 -28
  174. package/features/file/shared/FileInputToEntryInputMapper.js.map +1 -1
  175. package/features/file/shared/FileToEntryMapper.js +28 -27
  176. package/features/file/shared/FileToEntryMapper.js.map +1 -1
  177. package/features/permissions/abstractions.js +2 -1
  178. package/features/permissions/abstractions.js.map +1 -1
  179. package/features/permissions/feature.js +2 -1
  180. package/features/permissions/feature.js.map +1 -1
  181. package/features/settings/GetSettings/GetSettingsUseCase.js +19 -19
  182. package/features/settings/GetSettings/GetSettingsUseCase.js.map +1 -1
  183. package/features/settings/GetSettings/abstractions.js +2 -7
  184. package/features/settings/GetSettings/abstractions.js.map +1 -1
  185. package/features/settings/GetSettings/feature.js +6 -5
  186. package/features/settings/GetSettings/feature.js.map +1 -1
  187. package/features/settings/SettingsInstaller/SettingsInstaller.js +25 -24
  188. package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -1
  189. package/features/settings/SettingsInstaller/feature.js +6 -5
  190. package/features/settings/SettingsInstaller/feature.js.map +1 -1
  191. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js +41 -48
  192. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
  193. package/features/settings/UpdateSettings/abstractions.js +2 -7
  194. package/features/settings/UpdateSettings/abstractions.js.map +1 -1
  195. package/features/settings/UpdateSettings/events.js +17 -26
  196. package/features/settings/UpdateSettings/events.js.map +1 -1
  197. package/features/settings/UpdateSettings/feature.js +6 -5
  198. package/features/settings/UpdateSettings/feature.js.map +1 -1
  199. package/features/settings/UpdateSettings/index.js +0 -2
  200. package/features/shared/abstractions.js +0 -2
  201. package/graphql/baseSchema.js +30 -33
  202. package/graphql/baseSchema.js.map +1 -1
  203. package/graphql/createFilesTypeDefs.js +49 -57
  204. package/graphql/createFilesTypeDefs.js.map +1 -1
  205. package/graphql/filesSchema.js +79 -99
  206. package/graphql/filesSchema.js.map +1 -1
  207. package/graphql/getFileByUrl.js +45 -53
  208. package/graphql/getFileByUrl.js.map +1 -1
  209. package/graphql/index.js +35 -42
  210. package/graphql/index.js.map +1 -1
  211. package/graphql/utils.js +9 -14
  212. package/graphql/utils.js.map +1 -1
  213. package/index.d.ts +2 -2
  214. package/index.js +25 -30
  215. package/index.js.map +1 -1
  216. package/modelModifier/CmsModelModifier.js +40 -43
  217. package/modelModifier/CmsModelModifier.js.map +1 -1
  218. package/package.json +18 -21
  219. package/types.js +0 -2
  220. package/delivery/AssetDelivery/abstractions/AssetContentsReader.js.map +0 -1
  221. package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js.map +0 -1
  222. package/delivery/AssetDelivery/abstractions/AssetProcessor.js.map +0 -1
  223. package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js.map +0 -1
  224. package/delivery/AssetDelivery/abstractions/AssetResolver.js.map +0 -1
  225. package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js.map +0 -1
  226. package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js.map +0 -1
  227. package/delivery/index.js.map +0 -1
  228. package/domain/file/types.js.map +0 -1
  229. package/domain/settings/types.js.map +0 -1
  230. package/exports/api/file-manager/file.js.map +0 -1
  231. package/exports/api/file-manager/permissions.js.map +0 -1
  232. package/exports/api/file-manager/settings.js.map +0 -1
  233. package/features/ai/AiImageEnrichmentAfterCreateHandler.d.ts +0 -11
  234. package/features/ai/AiImageEnrichmentAfterCreateHandler.js +0 -28
  235. package/features/ai/AiImageEnrichmentAfterCreateHandler.js.map +0 -1
  236. package/features/ai/AiImageEnrichmentFeature.d.ts +0 -4
  237. package/features/ai/AiImageEnrichmentFeature.js +0 -12
  238. package/features/ai/AiImageEnrichmentFeature.js.map +0 -1
  239. package/features/file/CreateFile/index.js.map +0 -1
  240. package/features/file/CreateFilesInBatch/index.js.map +0 -1
  241. package/features/file/DeleteFile/index.js.map +0 -1
  242. package/features/file/GetFile/index.js.map +0 -1
  243. package/features/file/ListFiles/index.js.map +0 -1
  244. package/features/file/ListTags/index.js.map +0 -1
  245. package/features/file/UpdateFile/index.js.map +0 -1
  246. package/features/settings/UpdateSettings/index.js.map +0 -1
  247. package/features/shared/abstractions.js.map +0 -1
  248. package/tasks/AiImageEnrichmentTask.d.ts +0 -35
  249. package/tasks/AiImageEnrichmentTask.js +0 -136
  250. package/tasks/AiImageEnrichmentTask.js.map +0 -1
  251. package/types.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["ListFilesUseCase"],"sources":["index.ts"],"sourcesContent":["export { ListFilesUseCase } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,gBAAgB","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["ListTagsUseCase"],"sources":["index.ts"],"sourcesContent":["export { ListTagsUseCase } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,eAAe","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["UpdateFileUseCase","FileBeforeUpdateEventHandler","FileAfterUpdateEventHandler"],"sources":["index.ts"],"sourcesContent":["export { UpdateFileUseCase } from \"./abstractions.js\";\nexport { FileBeforeUpdateEventHandler, FileAfterUpdateEventHandler } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,iBAAiB;AAC1B,SAASC,4BAA4B,EAAEC,2BAA2B","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["UpdateSettingsUseCase","SettingsAfterUpdateEventHandler","SettingsBeforeUpdateEventHandler"],"sources":["index.ts"],"sourcesContent":["export { UpdateSettingsUseCase } from \"./abstractions.js\";\nexport { SettingsAfterUpdateEventHandler, SettingsBeforeUpdateEventHandler } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,qBAAqB;AAC9B,SAASC,+BAA+B,EAAEC,gCAAgC","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["FmPermissions"],"sources":["abstractions.ts"],"sourcesContent":["export { FmPermissions } from \"~/features/permissions/abstractions.js\";\n"],"mappings":"AAAA,SAASA,aAAa","ignoreList":[]}
@@ -1,35 +0,0 @@
1
- import "~/types.js";
2
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
3
- import { Ai } from "@webiny/api-core/features/ai/index.js";
4
- import { Encryption } from "@webiny/api-core/features/encryption/index.js";
5
- import { GetFileUseCase } from "../features/file/GetFile/index.js";
6
- import { UpdateFileUseCase } from "../features/file/UpdateFile/index.js";
7
- import { GetSettingsUseCase } from "../features/settings/GetSettings/abstractions.js";
8
- import { GetSettingsUseCase as AiPowerUpsGetSettingsUseCase } from "@webiny/ai-powerups/api/features/GetSettings/index.js";
9
- import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
10
- export declare const AI_IMAGE_ENRICHMENT_TASK_ID = "fmAiImageEnrichment";
11
- export interface IAiImageEnrichmentTaskInput {
12
- fileId: string;
13
- }
14
- declare class AiImageEnrichmentTaskImpl implements TaskDefinition.Interface<IAiImageEnrichmentTaskInput> {
15
- private getFile;
16
- private getSettings;
17
- private updateFile;
18
- private ai;
19
- private aiPowerUpsSettings;
20
- private encryption;
21
- private websocketService?;
22
- id: string;
23
- title: string;
24
- description: string;
25
- maxIterations: number;
26
- isPrivate: boolean;
27
- databaseLogs: boolean;
28
- readonly selfCleanup: ("onSuccess" | "onAbort")[];
29
- constructor(getFile: GetFileUseCase.Interface, getSettings: GetSettingsUseCase.Interface, updateFile: UpdateFileUseCase.Interface, ai: Ai.Interface, aiPowerUpsSettings: AiPowerUpsGetSettingsUseCase.Interface, encryption: Encryption.Interface, websocketService?: WebsocketService.Interface | undefined);
30
- run({ input, controller }: TaskDefinition.RunParams<IAiImageEnrichmentTaskInput>): Promise<TaskDefinition.Result<IAiImageEnrichmentTaskInput>>;
31
- }
32
- export declare const AiImageEnrichmentTask: typeof AiImageEnrichmentTaskImpl & {
33
- __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
34
- };
35
- export {};
@@ -1,136 +0,0 @@
1
- import "../types.js";
2
- import { Output } from "ai";
3
- import { z } from "zod";
4
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
5
- import { Ai } from "@webiny/api-core/features/ai/index.js";
6
- import { Encryption } from "@webiny/api-core/features/encryption/index.js";
7
- import { GetFileUseCase } from "../features/file/GetFile/index.js";
8
- import { UpdateFileUseCase } from "../features/file/UpdateFile/index.js";
9
- import { GetSettingsUseCase } from "../features/settings/GetSettings/abstractions.js";
10
- import { GetSettingsUseCase as AiPowerUpsGetSettingsUseCase } from "@webiny/ai-powerups/api/features/GetSettings/index.js";
11
- import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
12
- export const AI_IMAGE_ENRICHMENT_TASK_ID = "fmAiImageEnrichment";
13
- const AI_PROMPT = "Analyze this image and return up to 5 lowercase descriptive tags and one short sentence describing the image.";
14
- const aiOutputSchema = Output.object({
15
- schema: z.object({
16
- tags: z.array(z.string()),
17
- description: z.string()
18
- })
19
- });
20
- class AiImageEnrichmentTaskImpl {
21
- id = AI_IMAGE_ENRICHMENT_TASK_ID;
22
- title = "File Manager - AI Image Enrichment";
23
- description = "Automatically enriches uploaded images with AI-generated tags and description.";
24
- maxIterations = 1;
25
- isPrivate = true;
26
- databaseLogs = false;
27
- selfCleanup = ["onSuccess", "onAbort"];
28
- constructor(getFile, getSettings, updateFile, ai, aiPowerUpsSettings, encryption, websocketService) {
29
- this.getFile = getFile;
30
- this.getSettings = getSettings;
31
- this.updateFile = updateFile;
32
- this.ai = ai;
33
- this.aiPowerUpsSettings = aiPowerUpsSettings;
34
- this.encryption = encryption;
35
- this.websocketService = websocketService;
36
- }
37
- async run({
38
- input,
39
- controller
40
- }) {
41
- if (controller.runtime.isAborted()) {
42
- return controller.response.aborted();
43
- }
44
- const fileResult = await this.getFile.execute(input.fileId);
45
- if (fileResult.isFail()) {
46
- return controller.response.error({
47
- message: `File not found: ${input.fileId}`
48
- });
49
- }
50
- const file = fileResult.value;
51
- if (!file.type.startsWith("image/")) {
52
- return controller.response.done("File is not an image; skipping AI enrichment.");
53
- }
54
- const settingsResult = await this.getSettings.execute();
55
- const srcPrefix = settingsResult.isOk() ? settingsResult.value.srcPrefix ?? "" : "";
56
- const imageUrl = `${srcPrefix}${file.key}`;
57
- const aiSettingsResult = await this.aiPowerUpsSettings.execute();
58
- if (aiSettingsResult.isFail()) {
59
- return controller.response.error({
60
- message: "No AI provider configured. Add a provider in AI Power Ups settings."
61
- });
62
- }
63
- const aiSettings = aiSettingsResult.value;
64
-
65
- // TODO: for now we're loading first provider, but later we'll be loading
66
- // TODO: the right provider via AI Powerups settings.
67
- const firstProvider = aiSettings.providers.presets[0];
68
- if (!firstProvider) {
69
- return controller.response.done({
70
- message: "No AI provider configured. Add a provider in AI Power Ups settings."
71
- });
72
- }
73
- let tags = [];
74
- let description = "";
75
- try {
76
- const aiResult = await this.ai.generateText({
77
- model: firstProvider.model,
78
- output: aiOutputSchema,
79
- connection: {
80
- sdkName: firstProvider.model.split("/")[0],
81
- apiKey: this.encryption.decrypt(firstProvider.apiKeyEncrypted)
82
- },
83
- messages: [{
84
- role: "user",
85
- content: [{
86
- type: "image",
87
- image: new URL(imageUrl)
88
- }, {
89
- type: "text",
90
- text: AI_PROMPT
91
- }]
92
- }]
93
- });
94
- tags = aiResult.output.tags;
95
- description = aiResult.output.description;
96
- } catch (error) {
97
- console.log("error", error.message);
98
- return controller.response.error({
99
- message: `AI enrichment failed: ${error instanceof Error ? error.message : String(error)}`
100
- });
101
- }
102
- const mergedTags = [...new Set([...file.tags, ...tags])];
103
- const updateResult = await this.updateFile.execute({
104
- id: file.id,
105
- tags: mergedTags,
106
- description
107
- });
108
- if (updateResult.isFail()) {
109
- return controller.response.error({
110
- message: `Failed to update file: ${updateResult.error.message}`
111
- });
112
- }
113
- if (this.websocketService) {
114
- const connectionsResult = await this.websocketService.listConnections();
115
- if (connectionsResult.isOk() && connectionsResult.value.length > 0) {
116
- await this.websocketService.sendToConnections(connectionsResult.value, {
117
- action: "fm.file.enrichment",
118
- data: {
119
- id: file.id,
120
- tags: mergedTags,
121
- description
122
- }
123
- });
124
- }
125
- }
126
- return controller.response.done("AI image enrichment completed successfully.");
127
- }
128
- }
129
- export const AiImageEnrichmentTask = TaskDefinition.createImplementation({
130
- implementation: AiImageEnrichmentTaskImpl,
131
- dependencies: [GetFileUseCase, GetSettingsUseCase, UpdateFileUseCase, Ai, AiPowerUpsGetSettingsUseCase, Encryption, [WebsocketService, {
132
- optional: true
133
- }]]
134
- });
135
-
136
- //# sourceMappingURL=AiImageEnrichmentTask.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Output","z","TaskDefinition","Ai","Encryption","GetFileUseCase","UpdateFileUseCase","GetSettingsUseCase","AiPowerUpsGetSettingsUseCase","WebsocketService","AI_IMAGE_ENRICHMENT_TASK_ID","AI_PROMPT","aiOutputSchema","object","schema","tags","array","string","description","AiImageEnrichmentTaskImpl","id","title","maxIterations","isPrivate","databaseLogs","selfCleanup","constructor","getFile","getSettings","updateFile","ai","aiPowerUpsSettings","encryption","websocketService","run","input","controller","runtime","isAborted","response","aborted","fileResult","execute","fileId","isFail","error","message","file","value","type","startsWith","done","settingsResult","srcPrefix","isOk","imageUrl","key","aiSettingsResult","aiSettings","firstProvider","providers","presets","aiResult","generateText","model","output","connection","sdkName","split","apiKey","decrypt","apiKeyEncrypted","messages","role","content","image","URL","text","console","log","Error","String","mergedTags","Set","updateResult","connectionsResult","listConnections","length","sendToConnections","action","data","AiImageEnrichmentTask","createImplementation","implementation","dependencies","optional"],"sources":["AiImageEnrichmentTask.ts"],"sourcesContent":["import \"~/types.js\";\nimport { Output } from \"ai\";\nimport { z } from \"zod\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { GetFileUseCase } from \"~/features/file/GetFile/index.js\";\nimport { UpdateFileUseCase } from \"~/features/file/UpdateFile/index.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport { GetSettingsUseCase as AiPowerUpsGetSettingsUseCase } from \"@webiny/ai-powerups/api/features/GetSettings/index.js\";\nimport { WebsocketService } from \"@webiny/api-websockets/features/WebsocketService/index.js\";\n\nexport const AI_IMAGE_ENRICHMENT_TASK_ID = \"fmAiImageEnrichment\";\n\nconst AI_PROMPT =\n \"Analyze this image and return up to 5 lowercase descriptive tags and one short sentence describing the image.\";\n\nconst aiOutputSchema = Output.object({\n schema: z.object({\n tags: z.array(z.string()),\n description: z.string()\n })\n});\n\nexport interface IAiImageEnrichmentTaskInput {\n fileId: string;\n}\n\nclass AiImageEnrichmentTaskImpl implements TaskDefinition.Interface<IAiImageEnrichmentTaskInput> {\n id = AI_IMAGE_ENRICHMENT_TASK_ID;\n title = \"File Manager - AI Image Enrichment\";\n description = \"Automatically enriches uploaded images with AI-generated tags and description.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n constructor(\n private getFile: GetFileUseCase.Interface,\n private getSettings: GetSettingsUseCase.Interface,\n private updateFile: UpdateFileUseCase.Interface,\n private ai: Ai.Interface,\n private aiPowerUpsSettings: AiPowerUpsGetSettingsUseCase.Interface,\n private encryption: Encryption.Interface,\n private websocketService?: WebsocketService.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IAiImageEnrichmentTaskInput>): Promise<\n TaskDefinition.Result<IAiImageEnrichmentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const fileResult = await this.getFile.execute(input.fileId);\n if (fileResult.isFail()) {\n return controller.response.error({\n message: `File not found: ${input.fileId}`\n });\n }\n\n const file = fileResult.value;\n\n if (!file.type.startsWith(\"image/\")) {\n return controller.response.done(\"File is not an image; skipping AI enrichment.\");\n }\n\n const settingsResult = await this.getSettings.execute();\n const srcPrefix = settingsResult.isOk() ? (settingsResult.value.srcPrefix ?? \"\") : \"\";\n const imageUrl = `${srcPrefix}${file.key}`;\n\n const aiSettingsResult = await this.aiPowerUpsSettings.execute();\n\n if (aiSettingsResult.isFail()) {\n return controller.response.error({\n message: \"No AI provider configured. Add a provider in AI Power Ups settings.\"\n });\n }\n\n const aiSettings = aiSettingsResult.value;\n\n // TODO: for now we're loading first provider, but later we'll be loading\n // TODO: the right provider via AI Powerups settings.\n const firstProvider = aiSettings.providers.presets[0];\n\n if (!firstProvider) {\n return controller.response.done({\n message: \"No AI provider configured. Add a provider in AI Power Ups settings.\"\n });\n }\n\n let tags: string[] = [];\n let description = \"\";\n try {\n const aiResult = await this.ai.generateText({\n model: firstProvider.model,\n output: aiOutputSchema,\n connection: {\n sdkName: firstProvider.model.split(\"/\")[0],\n apiKey: this.encryption.decrypt(firstProvider.apiKeyEncrypted)\n },\n messages: [\n {\n role: \"user\",\n content: [\n {\n type: \"image\",\n image: new URL(imageUrl)\n },\n {\n type: \"text\",\n text: AI_PROMPT\n }\n ]\n }\n ]\n });\n\n tags = aiResult.output.tags;\n description = aiResult.output.description;\n } catch (error) {\n console.log(\"error\", error.message);\n return controller.response.error({\n message: `AI enrichment failed: ${error instanceof Error ? error.message : String(error)}`\n });\n }\n\n const mergedTags = [...new Set([...file.tags, ...tags])];\n\n const updateResult = await this.updateFile.execute({\n id: file.id,\n tags: mergedTags,\n description\n });\n\n if (updateResult.isFail()) {\n return controller.response.error({\n message: `Failed to update file: ${updateResult.error.message}`\n });\n }\n\n if (this.websocketService) {\n const connectionsResult = await this.websocketService.listConnections();\n if (connectionsResult.isOk() && connectionsResult.value.length > 0) {\n await this.websocketService.sendToConnections(connectionsResult.value, {\n action: \"fm.file.enrichment\",\n data: {\n id: file.id,\n tags: mergedTags,\n description\n }\n });\n }\n }\n\n return controller.response.done(\"AI image enrichment completed successfully.\");\n }\n}\n\nexport const AiImageEnrichmentTask = TaskDefinition.createImplementation({\n implementation: AiImageEnrichmentTaskImpl,\n dependencies: [\n GetFileUseCase,\n GetSettingsUseCase,\n UpdateFileUseCase,\n Ai,\n AiPowerUpsGetSettingsUseCase,\n Encryption,\n [WebsocketService, { optional: true }]\n ]\n});\n"],"mappings":"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","ignoreList":[]}
package/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import \"@webiny/tasks/features/TaskController/augmentation.js\";\nimport type { SecurityPermission } from \"@webiny/api-core/types/security.js\";\n\nexport interface FilePermission extends SecurityPermission {\n name: \"fm.file\";\n rwd?: string;\n own?: boolean;\n}\n"],"mappings":"AAAA,OAAO,uDAAuD","ignoreList":[]}