@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.
- package/contants.js +2 -1
- package/contants.js.map +1 -1
- package/delivery/AssetDelivery/Asset.js +50 -56
- package/delivery/AssetDelivery/Asset.js.map +1 -1
- package/delivery/AssetDelivery/AssetDeliveryConfig.js +70 -83
- package/delivery/AssetDelivery/AssetDeliveryConfig.js.map +1 -1
- package/delivery/AssetDelivery/AssetRequest.js +20 -19
- package/delivery/AssetDelivery/AssetRequest.js.map +1 -1
- package/delivery/AssetDelivery/FilesAssetRequestResolver.js +19 -25
- package/delivery/AssetDelivery/FilesAssetRequestResolver.js.map +1 -1
- package/delivery/AssetDelivery/NullAssetOutputStrategy.js +5 -4
- package/delivery/AssetDelivery/NullAssetOutputStrategy.js.map +1 -1
- package/delivery/AssetDelivery/NullAssetReply.js +10 -9
- package/delivery/AssetDelivery/NullAssetReply.js.map +1 -1
- package/delivery/AssetDelivery/NullAssetResolver.js +5 -4
- package/delivery/AssetDelivery/NullAssetResolver.js.map +1 -1
- package/delivery/AssetDelivery/NullRequestResolver.js +5 -4
- package/delivery/AssetDelivery/NullRequestResolver.js.map +1 -1
- package/delivery/AssetDelivery/SetCacheControlHeaders.js +11 -14
- package/delivery/AssetDelivery/SetCacheControlHeaders.js.map +1 -1
- package/delivery/AssetDelivery/SetResponseHeaders.js +16 -15
- package/delivery/AssetDelivery/SetResponseHeaders.js.map +1 -1
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.js +0 -3
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js +0 -3
- package/delivery/AssetDelivery/abstractions/AssetProcessor.js +0 -3
- package/delivery/AssetDelivery/abstractions/AssetReply.js +28 -27
- package/delivery/AssetDelivery/abstractions/AssetReply.js.map +1 -1
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js +0 -3
- package/delivery/AssetDelivery/abstractions/AssetResolver.js +0 -3
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js +0 -3
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js +4 -5
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js +0 -3
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js +15 -14
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js +5 -4
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +14 -16
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/PrivateCache.js +18 -17
- package/delivery/AssetDelivery/privateFiles/PrivateCache.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +21 -25
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js +44 -51
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/PublicCache.js +18 -17
- package/delivery/AssetDelivery/privateFiles/PublicCache.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js +16 -15
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -1
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js +16 -15
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -1
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js +5 -4
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js.map +1 -1
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js +5 -4
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +1 -1
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js +12 -15
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js.map +1 -1
- package/delivery/index.js +0 -2
- package/delivery/setupAssetDelivery.js +70 -101
- package/delivery/setupAssetDelivery.js.map +1 -1
- package/domain/file/abstractions.js +2 -5
- package/domain/file/abstractions.js.map +1 -1
- package/domain/file/errors.js +67 -76
- package/domain/file/errors.js.map +1 -1
- package/domain/file/file.model.js +57 -49
- package/domain/file/file.model.js.map +1 -1
- package/domain/file/types.js +0 -3
- package/domain/identity/Identity.js +9 -8
- package/domain/identity/Identity.js.map +1 -1
- package/domain/permissionsSchema.js +26 -15
- package/domain/permissionsSchema.js.map +1 -1
- package/domain/settings/constants.js +2 -1
- package/domain/settings/constants.js.map +1 -1
- package/domain/settings/errors.js +22 -24
- package/domain/settings/errors.js.map +1 -1
- package/domain/settings/types.js +0 -3
- package/domain/settings/validation.js +18 -27
- package/domain/settings/validation.js.map +1 -1
- package/exports/api/file-manager/file.js +0 -2
- package/exports/api/file-manager/permissions.js +0 -2
- package/exports/api/file-manager/settings.js +0 -2
- package/features/FileManagerFeature.js +16 -15
- package/features/FileManagerFeature.js.map +1 -1
- package/features/file/CreateFile/CreateFileRepository.js +20 -18
- package/features/file/CreateFile/CreateFileRepository.js.map +1 -1
- package/features/file/CreateFile/CreateFileUseCase.js +68 -75
- package/features/file/CreateFile/CreateFileUseCase.js.map +1 -1
- package/features/file/CreateFile/abstractions.js +3 -14
- package/features/file/CreateFile/abstractions.js.map +1 -1
- package/features/file/CreateFile/events.js +17 -26
- package/features/file/CreateFile/events.js.map +1 -1
- package/features/file/CreateFile/feature.js +7 -6
- package/features/file/CreateFile/feature.js.map +1 -1
- package/features/file/CreateFile/index.js +0 -2
- package/features/file/CreateFilesInBatch/CreateFilesInBatchRepository.js +15 -17
- package/features/file/CreateFilesInBatch/CreateFilesInBatchRepository.js.map +1 -1
- package/features/file/CreateFilesInBatch/CreateFilesInBatchUseCase.js +59 -70
- package/features/file/CreateFilesInBatch/CreateFilesInBatchUseCase.js.map +1 -1
- package/features/file/CreateFilesInBatch/abstractions.js +3 -14
- package/features/file/CreateFilesInBatch/abstractions.js.map +1 -1
- package/features/file/CreateFilesInBatch/events.js +17 -26
- package/features/file/CreateFilesInBatch/events.js.map +1 -1
- package/features/file/CreateFilesInBatch/feature.js +7 -6
- package/features/file/CreateFilesInBatch/feature.js.map +1 -1
- package/features/file/CreateFilesInBatch/index.js +0 -2
- package/features/file/DeleteFile/DeleteFileRepository.js +21 -20
- package/features/file/DeleteFile/DeleteFileRepository.js.map +1 -1
- package/features/file/DeleteFile/DeleteFileUseCase.js +31 -33
- package/features/file/DeleteFile/DeleteFileUseCase.js.map +1 -1
- package/features/file/DeleteFile/abstractions.js +3 -14
- package/features/file/DeleteFile/abstractions.js.map +1 -1
- package/features/file/DeleteFile/events.js +17 -26
- package/features/file/DeleteFile/events.js.map +1 -1
- package/features/file/DeleteFile/feature.js +7 -6
- package/features/file/DeleteFile/feature.js.map +1 -1
- package/features/file/DeleteFile/index.js +1 -3
- package/features/file/FileUrlGenerator/abstractions.js +2 -2
- package/features/file/FileUrlGenerator/abstractions.js.map +1 -1
- package/features/file/GetFile/GetFileRepository.js +22 -22
- package/features/file/GetFile/GetFileRepository.js.map +1 -1
- package/features/file/GetFile/GetFileUseCase.js +19 -21
- package/features/file/GetFile/GetFileUseCase.js.map +1 -1
- package/features/file/GetFile/abstractions.js +3 -14
- package/features/file/GetFile/abstractions.js.map +1 -1
- package/features/file/GetFile/feature.js +7 -6
- package/features/file/GetFile/feature.js.map +1 -1
- package/features/file/GetFile/index.js +0 -2
- package/features/file/GetFileContentsById/abstractions.d.ts +20 -0
- package/features/file/GetFileContentsById/abstractions.js +5 -0
- package/features/file/GetFileContentsById/abstractions.js.map +1 -0
- package/features/file/GetFileContentsById/index.d.ts +1 -0
- package/features/file/GetFileContentsById/index.js +1 -0
- package/features/file/GetFileContentsByKey/abstractions.d.ts +17 -0
- package/features/file/GetFileContentsByKey/abstractions.js +5 -0
- package/features/file/GetFileContentsByKey/abstractions.js.map +1 -0
- package/features/file/GetFileContentsByKey/index.d.ts +1 -0
- package/features/file/GetFileContentsByKey/index.js +1 -0
- package/features/file/ListFiles/ListFilesRepository.js +42 -40
- package/features/file/ListFiles/ListFilesRepository.js.map +1 -1
- package/features/file/ListFiles/ListFilesUseCase.js +33 -34
- package/features/file/ListFiles/ListFilesUseCase.js.map +1 -1
- package/features/file/ListFiles/abstractions.js +3 -14
- package/features/file/ListFiles/abstractions.js.map +1 -1
- package/features/file/ListFiles/feature.js +7 -6
- package/features/file/ListFiles/feature.js.map +1 -1
- package/features/file/ListFiles/index.js +0 -2
- package/features/file/ListImagesByTagTool/ListImagesByTagTool.js +31 -28
- package/features/file/ListImagesByTagTool/ListImagesByTagTool.js.map +1 -1
- package/features/file/ListImagesByTagTool/feature.js +6 -5
- package/features/file/ListImagesByTagTool/feature.js.map +1 -1
- package/features/file/ListTags/ListTagsRepository.js +31 -36
- package/features/file/ListTags/ListTagsRepository.js.map +1 -1
- package/features/file/ListTags/ListTagsUseCase.js +21 -21
- package/features/file/ListTags/ListTagsUseCase.js.map +1 -1
- package/features/file/ListTags/abstractions.js +3 -14
- package/features/file/ListTags/abstractions.js.map +1 -1
- package/features/file/ListTags/feature.js +7 -6
- package/features/file/ListTags/feature.js.map +1 -1
- package/features/file/ListTags/index.js +0 -2
- package/features/file/UpdateFile/UpdateFileRepository.js +26 -28
- package/features/file/UpdateFile/UpdateFileRepository.js.map +1 -1
- package/features/file/UpdateFile/UpdateFileUseCase.js +57 -65
- package/features/file/UpdateFile/UpdateFileUseCase.js.map +1 -1
- package/features/file/UpdateFile/abstractions.js +3 -14
- package/features/file/UpdateFile/abstractions.js.map +1 -1
- package/features/file/UpdateFile/events.js +17 -26
- package/features/file/UpdateFile/events.js.map +1 -1
- package/features/file/UpdateFile/feature.js +7 -6
- package/features/file/UpdateFile/feature.js.map +1 -1
- package/features/file/UpdateFile/index.js +1 -3
- package/features/file/shared/EntryToFileMapper.js +25 -24
- package/features/file/shared/EntryToFileMapper.js.map +1 -1
- package/features/file/shared/FileInputToEntryInputMapper.js +29 -28
- package/features/file/shared/FileInputToEntryInputMapper.js.map +1 -1
- package/features/file/shared/FileToEntryMapper.js +28 -27
- package/features/file/shared/FileToEntryMapper.js.map +1 -1
- package/features/permissions/abstractions.js +2 -1
- package/features/permissions/abstractions.js.map +1 -1
- package/features/permissions/feature.js +2 -1
- package/features/permissions/feature.js.map +1 -1
- package/features/settings/GetSettings/GetSettingsUseCase.js +19 -19
- package/features/settings/GetSettings/GetSettingsUseCase.js.map +1 -1
- package/features/settings/GetSettings/abstractions.js +2 -7
- package/features/settings/GetSettings/abstractions.js.map +1 -1
- package/features/settings/GetSettings/feature.js +6 -5
- package/features/settings/GetSettings/feature.js.map +1 -1
- package/features/settings/SettingsInstaller/SettingsInstaller.js +25 -24
- package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -1
- package/features/settings/SettingsInstaller/feature.js +6 -5
- package/features/settings/SettingsInstaller/feature.js.map +1 -1
- package/features/settings/UpdateSettings/UpdateSettingsUseCase.js +41 -48
- package/features/settings/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
- package/features/settings/UpdateSettings/abstractions.js +2 -7
- package/features/settings/UpdateSettings/abstractions.js.map +1 -1
- package/features/settings/UpdateSettings/events.js +17 -26
- package/features/settings/UpdateSettings/events.js.map +1 -1
- package/features/settings/UpdateSettings/feature.js +6 -5
- package/features/settings/UpdateSettings/feature.js.map +1 -1
- package/features/settings/UpdateSettings/index.js +0 -2
- package/features/shared/abstractions.js +0 -2
- package/graphql/baseSchema.js +30 -33
- package/graphql/baseSchema.js.map +1 -1
- package/graphql/createFilesTypeDefs.js +49 -57
- package/graphql/createFilesTypeDefs.js.map +1 -1
- package/graphql/filesSchema.js +79 -99
- package/graphql/filesSchema.js.map +1 -1
- package/graphql/getFileByUrl.js +45 -53
- package/graphql/getFileByUrl.js.map +1 -1
- package/graphql/index.js +35 -42
- package/graphql/index.js.map +1 -1
- package/graphql/utils.js +9 -14
- package/graphql/utils.js.map +1 -1
- package/index.d.ts +2 -2
- package/index.js +25 -30
- package/index.js.map +1 -1
- package/modelModifier/CmsModelModifier.js +40 -43
- package/modelModifier/CmsModelModifier.js.map +1 -1
- package/package.json +18 -21
- package/types.js +0 -2
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.js.map +0 -1
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js.map +0 -1
- package/delivery/AssetDelivery/abstractions/AssetProcessor.js.map +0 -1
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js.map +0 -1
- package/delivery/AssetDelivery/abstractions/AssetResolver.js.map +0 -1
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js.map +0 -1
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js.map +0 -1
- package/delivery/index.js.map +0 -1
- package/domain/file/types.js.map +0 -1
- package/domain/settings/types.js.map +0 -1
- package/exports/api/file-manager/file.js.map +0 -1
- package/exports/api/file-manager/permissions.js.map +0 -1
- package/exports/api/file-manager/settings.js.map +0 -1
- package/features/ai/AiImageEnrichmentAfterCreateHandler.d.ts +0 -11
- package/features/ai/AiImageEnrichmentAfterCreateHandler.js +0 -28
- package/features/ai/AiImageEnrichmentAfterCreateHandler.js.map +0 -1
- package/features/ai/AiImageEnrichmentFeature.d.ts +0 -4
- package/features/ai/AiImageEnrichmentFeature.js +0 -12
- package/features/ai/AiImageEnrichmentFeature.js.map +0 -1
- package/features/file/CreateFile/index.js.map +0 -1
- package/features/file/CreateFilesInBatch/index.js.map +0 -1
- package/features/file/DeleteFile/index.js.map +0 -1
- package/features/file/GetFile/index.js.map +0 -1
- package/features/file/ListFiles/index.js.map +0 -1
- package/features/file/ListTags/index.js.map +0 -1
- package/features/file/UpdateFile/index.js.map +0 -1
- package/features/settings/UpdateSettings/index.js.map +0 -1
- package/features/shared/abstractions.js.map +0 -1
- package/tasks/AiImageEnrichmentTask.d.ts +0 -35
- package/tasks/AiImageEnrichmentTask.js +0 -136
- package/tasks/AiImageEnrichmentTask.js.map +0 -1
- 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":[]}
|