@webiny/ai-powerups 6.6.0-alpha.2 → 6.6.0-alpha.4

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.
@@ -1,4 +1,4 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  import { Ai } from "@webiny/api-core/features/ai/index.js";
3
3
  import { ApplyImageEnrichmentUseCase, PrepareImageEnrichmentUseCase } from "./abstractions.js";
4
4
  export declare const AI_IMAGE_ENRICHMENT_TASK_ID = "fmAiImageEnrichment";
@@ -10,10 +10,14 @@ export interface IAiImageEnrichmentTaskInput {
10
10
  * with the streaming HTTP route (`AiImageEnrichmentStreamRoute`); the only difference is that this
11
11
  * one waits for the whole AI response, because a background task has no one to stream to.
12
12
  */
13
- declare class AiImageEnrichmentTaskImpl implements TaskDefinition.Interface<IAiImageEnrichmentTaskInput> {
13
+ declare class AiImageEnrichmentTaskHandlerImpl implements TaskHandler.Interface<IAiImageEnrichmentTaskInput> {
14
14
  private prepare;
15
15
  private apply;
16
16
  private ai;
17
+ constructor(prepare: PrepareImageEnrichmentUseCase.Interface, apply: ApplyImageEnrichmentUseCase.Interface, ai: Ai.Interface);
18
+ run({ input, controller }: TaskHandler.RunParams<IAiImageEnrichmentTaskInput>): Promise<TaskDefinition.Result<IAiImageEnrichmentTaskInput>>;
19
+ }
20
+ declare class AiImageEnrichmentTaskImpl implements TaskDefinition.Interface {
17
21
  id: string;
18
22
  title: string;
19
23
  description: string;
@@ -21,8 +25,9 @@ declare class AiImageEnrichmentTaskImpl implements TaskDefinition.Interface<IAiI
21
25
  isPrivate: boolean;
22
26
  databaseLogs: boolean;
23
27
  readonly selfCleanup: ("onAbort" | "onSuccess")[];
24
- constructor(prepare: PrepareImageEnrichmentUseCase.Interface, apply: ApplyImageEnrichmentUseCase.Interface, ai: Ai.Interface);
25
- run({ input, controller }: TaskDefinition.RunParams<IAiImageEnrichmentTaskInput>): Promise<TaskDefinition.Result<IAiImageEnrichmentTaskInput>>;
28
+ handler: typeof AiImageEnrichmentTaskHandlerImpl & {
29
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskHandler<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskOutput>>;
30
+ };
26
31
  }
27
32
  export declare const AiImageEnrichmentTask: typeof AiImageEnrichmentTaskImpl & {
28
33
  __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions.js").ITaskOutput>>;
@@ -1,24 +1,14 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  import { Ai } from "@webiny/api-core/features/ai/index.js";
3
3
  import { ApplyImageEnrichmentUseCase, PrepareImageEnrichmentUseCase } from "./abstractions.js";
4
4
  import { buildEnrichmentAiRequest } from "./buildEnrichmentAiRequest.js";
5
5
  import { EnrichmentNotAnImageError } from "./errors.js";
6
6
  const AI_IMAGE_ENRICHMENT_TASK_ID = "fmAiImageEnrichment";
7
- class AiImageEnrichmentTaskImpl {
7
+ class AiImageEnrichmentTaskHandlerImpl {
8
8
  constructor(prepare, apply, ai){
9
9
  this.prepare = prepare;
10
10
  this.apply = apply;
11
11
  this.ai = ai;
12
- this.id = AI_IMAGE_ENRICHMENT_TASK_ID;
13
- this.title = "File Manager - AI Image Enrichment";
14
- this.description = "Automatically enriches uploaded images with AI-generated tags and description.";
15
- this.maxIterations = 1;
16
- this.isPrivate = true;
17
- this.databaseLogs = false;
18
- this.selfCleanup = [
19
- "onSuccess",
20
- "onAbort"
21
- ];
22
12
  }
23
13
  async run({ input, controller }) {
24
14
  if (controller.runtime.isAborted()) return controller.response.aborted();
@@ -54,14 +44,33 @@ class AiImageEnrichmentTaskImpl {
54
44
  return controller.response.done("AI image enrichment completed successfully.");
55
45
  }
56
46
  }
57
- const AiImageEnrichmentTask = TaskDefinition.createImplementation({
58
- implementation: AiImageEnrichmentTaskImpl,
47
+ const AiImageEnrichmentTaskHandler = TaskHandler.createImplementation({
48
+ implementation: AiImageEnrichmentTaskHandlerImpl,
59
49
  dependencies: [
60
50
  PrepareImageEnrichmentUseCase,
61
51
  ApplyImageEnrichmentUseCase,
62
52
  Ai
63
53
  ]
64
54
  });
55
+ class AiImageEnrichmentTaskImpl {
56
+ constructor(){
57
+ this.id = AI_IMAGE_ENRICHMENT_TASK_ID;
58
+ this.title = "File Manager - AI Image Enrichment";
59
+ this.description = "Automatically enriches uploaded images with AI-generated tags and description.";
60
+ this.maxIterations = 1;
61
+ this.isPrivate = true;
62
+ this.databaseLogs = false;
63
+ this.selfCleanup = [
64
+ "onSuccess",
65
+ "onAbort"
66
+ ];
67
+ this.handler = AiImageEnrichmentTaskHandler;
68
+ }
69
+ }
70
+ const AiImageEnrichmentTask = TaskDefinition.createImplementation({
71
+ implementation: AiImageEnrichmentTaskImpl,
72
+ dependencies: []
73
+ });
65
74
  export { AI_IMAGE_ENRICHMENT_TASK_ID, AiImageEnrichmentTask };
66
75
 
67
76
  //# sourceMappingURL=AiImageEnrichmentTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/AiImageEnrichment/AiImageEnrichmentTask.js","sources":["../../../../src/api/features/AiImageEnrichment/AiImageEnrichmentTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { ApplyImageEnrichmentUseCase, PrepareImageEnrichmentUseCase } from \"./abstractions.js\";\nimport { buildEnrichmentAiRequest } from \"./buildEnrichmentAiRequest.js\";\nimport { EnrichmentNotAnImageError } from \"./errors.js\";\n\nexport const AI_IMAGE_ENRICHMENT_TASK_ID = \"fmAiImageEnrichment\";\n\nexport interface IAiImageEnrichmentTaskInput {\n fileId: string;\n}\n\n/**\n * Background enrichment, triggered after a file is created. Shares its preparation and persistence\n * with the streaming HTTP route (`AiImageEnrichmentStreamRoute`); the only difference is that this\n * one waits for the whole AI response, because a background task has no one to stream to.\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 prepare: PrepareImageEnrichmentUseCase.Interface,\n private apply: ApplyImageEnrichmentUseCase.Interface,\n private ai: Ai.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 preparedResult = await this.prepare.execute(input.fileId);\n if (preparedResult.isFail()) {\n const error = preparedResult.error;\n // A non-image isn't a failure — nothing to enrich, so the task is simply done.\n if (error instanceof EnrichmentNotAnImageError) {\n return controller.response.done(error.message);\n }\n return controller.response.error({ message: error.message });\n }\n\n const prepared = preparedResult.value;\n\n let tags: string[];\n let description: string;\n try {\n const request = buildEnrichmentAiRequest(prepared);\n const aiResult = await this.ai.generateText(request);\n\n tags = aiResult.output.tags;\n description = aiResult.output.description;\n } catch (error) {\n return controller.response.error({\n message: `AI enrichment failed: ${error instanceof Error ? error.message : String(error)}`\n });\n }\n\n const appliedResult = await this.apply.execute({\n fileId: prepared.fileId,\n tags,\n description\n });\n\n if (appliedResult.isFail()) {\n return controller.response.error({ message: appliedResult.error.message });\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: [PrepareImageEnrichmentUseCase, ApplyImageEnrichmentUseCase, Ai]\n});\n"],"names":["AI_IMAGE_ENRICHMENT_TASK_ID","AiImageEnrichmentTaskImpl","prepare","apply","ai","input","controller","preparedResult","error","EnrichmentNotAnImageError","prepared","tags","description","request","buildEnrichmentAiRequest","aiResult","Error","String","appliedResult","AiImageEnrichmentTask","TaskDefinition","PrepareImageEnrichmentUseCase","ApplyImageEnrichmentUseCase","Ai"],"mappings":";;;;;AAMO,MAAMA,8BAA8B;AAW3C,MAAMC;IAUF,YACYC,OAAgD,EAChDC,KAA4C,EAC5CC,EAAgB,CAC1B;aAHUF,OAAO,GAAPA;aACAC,KAAK,GAALA;aACAC,EAAE,GAAFA;aAZZ,EAAE,GAAGJ;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;aAEC,WAAW,GAAG;YAAC;YAAsB;SAAmB;IAMrE;IAEH,MAAM,IAAI,EACNK,KAAK,EACLC,UAAU,EAC0C,EAEtD;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,iBAAiB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACF,MAAM,MAAM;QAC9D,IAAIE,eAAe,MAAM,IAAI;YACzB,MAAMC,QAAQD,eAAe,KAAK;YAElC,IAAIC,iBAAiBC,2BACjB,OAAOH,WAAW,QAAQ,CAAC,IAAI,CAACE,MAAM,OAAO;YAEjD,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAASE,MAAM,OAAO;YAAC;QAC9D;QAEA,MAAME,WAAWH,eAAe,KAAK;QAErC,IAAII;QACJ,IAAIC;QACJ,IAAI;YACA,MAAMC,UAAUC,yBAAyBJ;YACzC,MAAMK,WAAW,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAACF;YAE5CF,OAAOI,SAAS,MAAM,CAAC,IAAI;YAC3BH,cAAcG,SAAS,MAAM,CAAC,WAAW;QAC7C,EAAE,OAAOP,OAAO;YACZ,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAAS,CAAC,sBAAsB,EAAEE,iBAAiBQ,QAAQR,MAAM,OAAO,GAAGS,OAAOT,QAAQ;YAC9F;QACJ;QAEA,MAAMU,gBAAgB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3C,QAAQR,SAAS,MAAM;YACvBC;YACAC;QACJ;QAEA,IAAIM,cAAc,MAAM,IACpB,OAAOZ,WAAW,QAAQ,CAAC,KAAK,CAAC;YAAE,SAASY,cAAc,KAAK,CAAC,OAAO;QAAC;QAG5E,OAAOZ,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;AACJ;AAEO,MAAMa,wBAAwBC,eAAe,oBAAoB,CAAC;IACrE,gBAAgBnB;IAChB,cAAc;QAACoB;QAA+BC;QAA6BC;KAAG;AAClF"}
1
+ {"version":3,"file":"api/features/AiImageEnrichment/AiImageEnrichmentTask.js","sources":["../../../../src/api/features/AiImageEnrichment/AiImageEnrichmentTask.ts"],"sourcesContent":["import {\n TaskDefinition,\n TaskHandler\n} from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { ApplyImageEnrichmentUseCase, PrepareImageEnrichmentUseCase } from \"./abstractions.js\";\nimport { buildEnrichmentAiRequest } from \"./buildEnrichmentAiRequest.js\";\nimport { EnrichmentNotAnImageError } from \"./errors.js\";\n\nexport const AI_IMAGE_ENRICHMENT_TASK_ID = \"fmAiImageEnrichment\";\n\nexport interface IAiImageEnrichmentTaskInput {\n fileId: string;\n}\n\n/**\n * Background enrichment, triggered after a file is created. Shares its preparation and persistence\n * with the streaming HTTP route (`AiImageEnrichmentStreamRoute`); the only difference is that this\n * one waits for the whole AI response, because a background task has no one to stream to.\n */\nclass AiImageEnrichmentTaskHandlerImpl implements TaskHandler.Interface<IAiImageEnrichmentTaskInput> {\n constructor(\n private prepare: PrepareImageEnrichmentUseCase.Interface,\n private apply: ApplyImageEnrichmentUseCase.Interface,\n private ai: Ai.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskHandler.RunParams<IAiImageEnrichmentTaskInput>): Promise<\n TaskDefinition.Result<IAiImageEnrichmentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const preparedResult = await this.prepare.execute(input.fileId);\n if (preparedResult.isFail()) {\n const error = preparedResult.error;\n // A non-image isn't a failure — nothing to enrich, so the task is simply done.\n if (error instanceof EnrichmentNotAnImageError) {\n return controller.response.done(error.message);\n }\n return controller.response.error({ message: error.message });\n }\n\n const prepared = preparedResult.value;\n\n let tags: string[];\n let description: string;\n try {\n const request = buildEnrichmentAiRequest(prepared);\n const aiResult = await this.ai.generateText(request);\n\n tags = aiResult.output.tags;\n description = aiResult.output.description;\n } catch (error) {\n return controller.response.error({\n message: `AI enrichment failed: ${error instanceof Error ? error.message : String(error)}`\n });\n }\n\n const appliedResult = await this.apply.execute({\n fileId: prepared.fileId,\n tags,\n description\n });\n\n if (appliedResult.isFail()) {\n return controller.response.error({ message: appliedResult.error.message });\n }\n\n return controller.response.done(\"AI image enrichment completed successfully.\");\n }\n}\n\nconst AiImageEnrichmentTaskHandler = TaskHandler.createImplementation({\n implementation: AiImageEnrichmentTaskHandlerImpl,\n dependencies: [PrepareImageEnrichmentUseCase, ApplyImageEnrichmentUseCase, Ai]\n});\n\nclass AiImageEnrichmentTaskImpl implements TaskDefinition.Interface {\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 public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n handler = AiImageEnrichmentTaskHandler;\n}\n\nexport const AiImageEnrichmentTask = TaskDefinition.createImplementation({\n implementation: AiImageEnrichmentTaskImpl,\n dependencies: []\n});\n"],"names":["AI_IMAGE_ENRICHMENT_TASK_ID","AiImageEnrichmentTaskHandlerImpl","prepare","apply","ai","input","controller","preparedResult","error","EnrichmentNotAnImageError","prepared","tags","description","request","buildEnrichmentAiRequest","aiResult","Error","String","appliedResult","AiImageEnrichmentTaskHandler","TaskHandler","PrepareImageEnrichmentUseCase","ApplyImageEnrichmentUseCase","Ai","AiImageEnrichmentTaskImpl","AiImageEnrichmentTask","TaskDefinition"],"mappings":";;;;;AASO,MAAMA,8BAA8B;AAW3C,MAAMC;IACF,YACYC,OAAgD,EAChDC,KAA4C,EAC5CC,EAAgB,CAC1B;aAHUF,OAAO,GAAPA;aACAC,KAAK,GAALA;aACAC,EAAE,GAAFA;IACT;IAEH,MAAM,IAAI,EACNC,KAAK,EACLC,UAAU,EACuC,EAEnD;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,iBAAiB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACF,MAAM,MAAM;QAC9D,IAAIE,eAAe,MAAM,IAAI;YACzB,MAAMC,QAAQD,eAAe,KAAK;YAElC,IAAIC,iBAAiBC,2BACjB,OAAOH,WAAW,QAAQ,CAAC,IAAI,CAACE,MAAM,OAAO;YAEjD,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAASE,MAAM,OAAO;YAAC;QAC9D;QAEA,MAAME,WAAWH,eAAe,KAAK;QAErC,IAAII;QACJ,IAAIC;QACJ,IAAI;YACA,MAAMC,UAAUC,yBAAyBJ;YACzC,MAAMK,WAAW,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAACF;YAE5CF,OAAOI,SAAS,MAAM,CAAC,IAAI;YAC3BH,cAAcG,SAAS,MAAM,CAAC,WAAW;QAC7C,EAAE,OAAOP,OAAO;YACZ,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAAS,CAAC,sBAAsB,EAAEE,iBAAiBQ,QAAQR,MAAM,OAAO,GAAGS,OAAOT,QAAQ;YAC9F;QACJ;QAEA,MAAMU,gBAAgB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC3C,QAAQR,SAAS,MAAM;YACvBC;YACAC;QACJ;QAEA,IAAIM,cAAc,MAAM,IACpB,OAAOZ,WAAW,QAAQ,CAAC,KAAK,CAAC;YAAE,SAASY,cAAc,KAAK,CAAC,OAAO;QAAC;QAG5E,OAAOZ,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;AACJ;AAEA,MAAMa,+BAA+BC,YAAY,oBAAoB,CAAC;IAClE,gBAAgBnB;IAChB,cAAc;QAACoB;QAA+BC;QAA6BC;KAAG;AAClF;AAEA,MAAMC;;aACF,EAAE,GAAGxB;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;aACC,WAAW,GAAG;YAAC;YAAsB;SAAmB;aAExE,OAAO,GAAGmB;;AACd;AAEO,MAAMM,wBAAwBC,eAAe,oBAAoB,CAAC;IACrE,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
@@ -1,4 +1,4 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  import { WebsocketsSendToIdentityUseCase } from "@webiny/api-websockets/features/SendToIdentity/abstractions.js";
3
3
  import { CmsGenerateEntryContentUseCase } from "../../../api/features/CmsGenerateEntryContent/index.js";
4
4
  import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
@@ -12,20 +12,25 @@ export interface ICmsGenerateEntryContentTaskInput {
12
12
  writerPersonaId?: string | null;
13
13
  additionalFileIds?: string[] | null;
14
14
  }
15
- declare class CmsGenerateEntryContentTaskImpl implements TaskDefinition.Interface<ICmsGenerateEntryContentTaskInput> {
15
+ declare class CmsGenerateEntryContentTaskHandlerImpl implements TaskHandler.Interface<ICmsGenerateEntryContentTaskInput> {
16
16
  private identityContext;
17
17
  private generateEntryContent;
18
18
  private sendToIdentity;
19
+ constructor(identityContext: IdentityContext.Interface, generateEntryContent: CmsGenerateEntryContentUseCase.Interface, sendToIdentity: WebsocketsSendToIdentityUseCase.Interface);
20
+ run({ input, controller }: TaskHandler.RunParams<ICmsGenerateEntryContentTaskInput>): Promise<TaskDefinition.Result<ICmsGenerateEntryContentTaskInput>>;
21
+ private sendContentToUser;
22
+ private sendErrorToUser;
23
+ }
24
+ declare class CmsGenerateEntryContentTaskImpl implements TaskDefinition.Interface {
19
25
  id: string;
20
26
  title: string;
21
27
  description: string;
22
28
  maxIterations: number;
23
29
  isPrivate: boolean;
24
30
  databaseLogs: boolean;
25
- constructor(identityContext: IdentityContext.Interface, generateEntryContent: CmsGenerateEntryContentUseCase.Interface, sendToIdentity: WebsocketsSendToIdentityUseCase.Interface);
26
- run({ input, controller }: TaskDefinition.RunParams<ICmsGenerateEntryContentTaskInput>): Promise<TaskDefinition.Result<ICmsGenerateEntryContentTaskInput>>;
27
- private sendContentToUser;
28
- private sendErrorToUser;
31
+ handler: typeof CmsGenerateEntryContentTaskHandlerImpl & {
32
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskHandler<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
33
+ };
29
34
  }
30
35
  export declare const CmsGenerateEntryContentTask: typeof CmsGenerateEntryContentTaskImpl & {
31
36
  __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>>;
@@ -1,20 +1,14 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  import { WebsocketsSendToIdentityUseCase } from "@webiny/api-websockets/features/SendToIdentity/abstractions.js";
3
3
  import { compressJson } from "@webiny/utils/features/compression/legacy/gzip.js";
4
4
  import { CmsGenerateEntryContentUseCase } from "./index.js";
5
5
  import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
6
6
  const CMS_GENERATE_ENTRY_CONTENT_TASK_ID = "aiPowerUpsGenerateEntryContent";
7
- class CmsGenerateEntryContentTaskImpl {
7
+ class CmsGenerateEntryContentTaskHandlerImpl {
8
8
  constructor(identityContext, generateEntryContent, sendToIdentity){
9
9
  this.identityContext = identityContext;
10
10
  this.generateEntryContent = generateEntryContent;
11
11
  this.sendToIdentity = sendToIdentity;
12
- this.id = CMS_GENERATE_ENTRY_CONTENT_TASK_ID;
13
- this.title = "AI Power-Ups - Generate Entry Content";
14
- this.description = "Generates CMS entry content using AI based on a user prompt.";
15
- this.maxIterations = 1;
16
- this.isPrivate = true;
17
- this.databaseLogs = false;
18
12
  }
19
13
  async run({ input, controller }) {
20
14
  if (controller.runtime.isAborted()) return controller.response.aborted();
@@ -71,14 +65,29 @@ class CmsGenerateEntryContentTaskImpl {
71
65
  });
72
66
  }
73
67
  }
74
- const CmsGenerateEntryContentTask = TaskDefinition.createImplementation({
75
- implementation: CmsGenerateEntryContentTaskImpl,
68
+ const CmsGenerateEntryContentTaskHandler = TaskHandler.createImplementation({
69
+ implementation: CmsGenerateEntryContentTaskHandlerImpl,
76
70
  dependencies: [
77
71
  IdentityContext,
78
72
  CmsGenerateEntryContentUseCase,
79
73
  WebsocketsSendToIdentityUseCase
80
74
  ]
81
75
  });
76
+ class CmsGenerateEntryContentTaskImpl {
77
+ constructor(){
78
+ this.id = CMS_GENERATE_ENTRY_CONTENT_TASK_ID;
79
+ this.title = "AI Power-Ups - Generate Entry Content";
80
+ this.description = "Generates CMS entry content using AI based on a user prompt.";
81
+ this.maxIterations = 1;
82
+ this.isPrivate = true;
83
+ this.databaseLogs = false;
84
+ this.handler = CmsGenerateEntryContentTaskHandler;
85
+ }
86
+ }
87
+ const CmsGenerateEntryContentTask = TaskDefinition.createImplementation({
88
+ implementation: CmsGenerateEntryContentTaskImpl,
89
+ dependencies: []
90
+ });
82
91
  export { CMS_GENERATE_ENTRY_CONTENT_TASK_ID, CmsGenerateEntryContentTask };
83
92
 
84
93
  //# sourceMappingURL=CmsGenerateEntryContentTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js","sources":["../../../../src/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { WebsocketsSendToIdentityUseCase } from \"@webiny/api-websockets/features/SendToIdentity/abstractions.js\";\nimport { compressJson } from \"@webiny/utils/features/compression/legacy/gzip.js\";\nimport { CmsGenerateEntryContentUseCase } from \"~/api/features/CmsGenerateEntryContent/index.js\";\nimport type { GenerateEntryContentTelemetry } from \"~/api/features/CmsGenerateEntryContent/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const CMS_GENERATE_ENTRY_CONTENT_TASK_ID = \"aiPowerUpsGenerateEntryContent\";\n\nexport interface ICmsGenerateEntryContentTaskInput {\n prompt: string;\n modelId: string;\n projectId?: string | null;\n excludedFileIds?: string[] | null;\n readerPersonaId?: string | null;\n writerPersonaId?: string | null;\n additionalFileIds?: string[] | null;\n}\n\nclass CmsGenerateEntryContentTaskImpl implements TaskDefinition.Interface<ICmsGenerateEntryContentTaskInput> {\n id = CMS_GENERATE_ENTRY_CONTENT_TASK_ID;\n title = \"AI Power-Ups - Generate Entry Content\";\n description = \"Generates CMS entry content using AI based on a user prompt.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n constructor(\n private identityContext: IdentityContext.Interface,\n private generateEntryContent: CmsGenerateEntryContentUseCase.Interface,\n private sendToIdentity: WebsocketsSendToIdentityUseCase.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<ICmsGenerateEntryContentTaskInput>): Promise<\n TaskDefinition.Result<ICmsGenerateEntryContentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const identity = this.identityContext.getIdentity();\n\n let result;\n try {\n result = await this.generateEntryContent.execute({\n prompt: input.prompt,\n modelId: input.modelId,\n projectId: input.projectId,\n excludedFileIds: input.excludedFileIds,\n readerPersonaId: input.readerPersonaId,\n writerPersonaId: input.writerPersonaId,\n additionalFileIds: input.additionalFileIds\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await this.sendErrorToUser(identity.id, message);\n return controller.response.error({ message });\n }\n\n if (result.isFail()) {\n await this.sendErrorToUser(identity.id, result.error.message);\n\n return controller.response.error({\n message: result.error.message\n });\n }\n\n // Serialize at the transport edge: the use case returns structured values; the\n // websocket stream carries a gzip+base64 JSON string that the Admin app decodes.\n const compressed = await compressJson(result.value.values);\n const payload = compressed.toString(\"base64\");\n\n await this.sendContentToUser(identity.id, payload, result.value.telemetry);\n\n return controller.response.done(\"Entry content generated successfully.\");\n }\n\n private async sendContentToUser(\n identityId: string,\n payload: string,\n telemetry: GenerateEntryContentTelemetry\n ) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generateEntryContent.content\",\n data: {\n compression: \"gzip\",\n value: payload,\n telemetry\n }\n }\n );\n }\n\n private async sendErrorToUser(identityId: string, message: string) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generateEntryContent.error\",\n data: {\n message\n }\n }\n );\n }\n}\n\nexport const CmsGenerateEntryContentTask = TaskDefinition.createImplementation({\n implementation: CmsGenerateEntryContentTaskImpl,\n dependencies: [IdentityContext, CmsGenerateEntryContentUseCase, WebsocketsSendToIdentityUseCase]\n});\n"],"names":["CMS_GENERATE_ENTRY_CONTENT_TASK_ID","CmsGenerateEntryContentTaskImpl","identityContext","generateEntryContent","sendToIdentity","input","controller","identity","result","err","message","Error","String","compressed","compressJson","payload","identityId","telemetry","CmsGenerateEntryContentTask","TaskDefinition","IdentityContext","CmsGenerateEntryContentUseCase","WebsocketsSendToIdentityUseCase"],"mappings":";;;;;AAOO,MAAMA,qCAAqC;AAYlD,MAAMC;IAQF,YACYC,eAA0C,EAC1CC,oBAA8D,EAC9DC,cAAyD,CACnE;aAHUF,eAAe,GAAfA;aACAC,oBAAoB,GAApBA;aACAC,cAAc,GAAdA;aAVZ,EAAE,GAAGJ;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;IAMZ;IAEH,MAAM,IAAI,EACNK,KAAK,EACLC,UAAU,EACgD,EAE5D;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,IAAIC;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBAC7C,QAAQH,MAAM,MAAM;gBACpB,SAASA,MAAM,OAAO;gBACtB,WAAWA,MAAM,SAAS;gBAC1B,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,mBAAmBA,MAAM,iBAAiB;YAC9C;QACJ,EAAE,OAAOI,KAAK;YACV,MAAMC,UAAUD,eAAeE,QAAQF,IAAI,OAAO,GAAGG,OAAOH;YAC5D,MAAM,IAAI,CAAC,eAAe,CAACF,SAAS,EAAE,EAAEG;YACxC,OAAOJ,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAAEI;YAAQ;QAC/C;QAEA,IAAIF,OAAO,MAAM,IAAI;YACjB,MAAM,IAAI,CAAC,eAAe,CAACD,SAAS,EAAE,EAAEC,OAAO,KAAK,CAAC,OAAO;YAE5D,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAASE,OAAO,KAAK,CAAC,OAAO;YACjC;QACJ;QAIA,MAAMK,aAAa,MAAMC,aAAaN,OAAO,KAAK,CAAC,MAAM;QACzD,MAAMO,UAAUF,WAAW,QAAQ,CAAC;QAEpC,MAAM,IAAI,CAAC,iBAAiB,CAACN,SAAS,EAAE,EAAEQ,SAASP,OAAO,KAAK,CAAC,SAAS;QAEzE,OAAOF,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;IAEA,MAAc,kBACVU,UAAkB,EAClBD,OAAe,EACfE,SAAwC,EAC1C;QACE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAID;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACF,aAAa;gBACb,OAAOD;gBACPE;YACJ;QACJ;IAER;IAEA,MAAc,gBAAgBD,UAAkB,EAAEN,OAAe,EAAE;QAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAIM;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACFN;YACJ;QACJ;IAER;AACJ;AAEO,MAAMQ,8BAA8BC,eAAe,oBAAoB,CAAC;IAC3E,gBAAgBlB;IAChB,cAAc;QAACmB;QAAiBC;QAAgCC;KAAgC;AACpG"}
1
+ {"version":3,"file":"api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js","sources":["../../../../src/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.ts"],"sourcesContent":["import {\n TaskDefinition,\n TaskHandler\n} from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { WebsocketsSendToIdentityUseCase } from \"@webiny/api-websockets/features/SendToIdentity/abstractions.js\";\nimport { compressJson } from \"@webiny/utils/features/compression/legacy/gzip.js\";\nimport { CmsGenerateEntryContentUseCase } from \"~/api/features/CmsGenerateEntryContent/index.js\";\nimport type { GenerateEntryContentTelemetry } from \"~/api/features/CmsGenerateEntryContent/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const CMS_GENERATE_ENTRY_CONTENT_TASK_ID = \"aiPowerUpsGenerateEntryContent\";\n\nexport interface ICmsGenerateEntryContentTaskInput {\n prompt: string;\n modelId: string;\n projectId?: string | null;\n excludedFileIds?: string[] | null;\n readerPersonaId?: string | null;\n writerPersonaId?: string | null;\n additionalFileIds?: string[] | null;\n}\n\nclass CmsGenerateEntryContentTaskHandlerImpl implements TaskHandler.Interface<ICmsGenerateEntryContentTaskInput> {\n constructor(\n private identityContext: IdentityContext.Interface,\n private generateEntryContent: CmsGenerateEntryContentUseCase.Interface,\n private sendToIdentity: WebsocketsSendToIdentityUseCase.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskHandler.RunParams<ICmsGenerateEntryContentTaskInput>): Promise<\n TaskDefinition.Result<ICmsGenerateEntryContentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const identity = this.identityContext.getIdentity();\n\n let result;\n try {\n result = await this.generateEntryContent.execute({\n prompt: input.prompt,\n modelId: input.modelId,\n projectId: input.projectId,\n excludedFileIds: input.excludedFileIds,\n readerPersonaId: input.readerPersonaId,\n writerPersonaId: input.writerPersonaId,\n additionalFileIds: input.additionalFileIds\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await this.sendErrorToUser(identity.id, message);\n return controller.response.error({ message });\n }\n\n if (result.isFail()) {\n await this.sendErrorToUser(identity.id, result.error.message);\n\n return controller.response.error({\n message: result.error.message\n });\n }\n\n // Serialize at the transport edge: the use case returns structured values; the\n // websocket stream carries a gzip+base64 JSON string that the Admin app decodes.\n const compressed = await compressJson(result.value.values);\n const payload = compressed.toString(\"base64\");\n\n await this.sendContentToUser(identity.id, payload, result.value.telemetry);\n\n return controller.response.done(\"Entry content generated successfully.\");\n }\n\n private async sendContentToUser(\n identityId: string,\n payload: string,\n telemetry: GenerateEntryContentTelemetry\n ) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generateEntryContent.content\",\n data: {\n compression: \"gzip\",\n value: payload,\n telemetry\n }\n }\n );\n }\n\n private async sendErrorToUser(identityId: string, message: string) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generateEntryContent.error\",\n data: {\n message\n }\n }\n );\n }\n}\n\nconst CmsGenerateEntryContentTaskHandler = TaskHandler.createImplementation({\n implementation: CmsGenerateEntryContentTaskHandlerImpl,\n dependencies: [IdentityContext, CmsGenerateEntryContentUseCase, WebsocketsSendToIdentityUseCase]\n});\n\nclass CmsGenerateEntryContentTaskImpl implements TaskDefinition.Interface {\n id = CMS_GENERATE_ENTRY_CONTENT_TASK_ID;\n title = \"AI Power-Ups - Generate Entry Content\";\n description = \"Generates CMS entry content using AI based on a user prompt.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n handler = CmsGenerateEntryContentTaskHandler;\n}\n\nexport const CmsGenerateEntryContentTask = TaskDefinition.createImplementation({\n implementation: CmsGenerateEntryContentTaskImpl,\n dependencies: []\n});\n"],"names":["CMS_GENERATE_ENTRY_CONTENT_TASK_ID","CmsGenerateEntryContentTaskHandlerImpl","identityContext","generateEntryContent","sendToIdentity","input","controller","identity","result","err","message","Error","String","compressed","compressJson","payload","identityId","telemetry","CmsGenerateEntryContentTaskHandler","TaskHandler","IdentityContext","CmsGenerateEntryContentUseCase","WebsocketsSendToIdentityUseCase","CmsGenerateEntryContentTaskImpl","CmsGenerateEntryContentTask","TaskDefinition"],"mappings":";;;;;AAUO,MAAMA,qCAAqC;AAYlD,MAAMC;IACF,YACYC,eAA0C,EAC1CC,oBAA8D,EAC9DC,cAAyD,CACnE;aAHUF,eAAe,GAAfA;aACAC,oBAAoB,GAApBA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,IAAI,EACNC,KAAK,EACLC,UAAU,EAC6C,EAEzD;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,IAAIC;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBAC7C,QAAQH,MAAM,MAAM;gBACpB,SAASA,MAAM,OAAO;gBACtB,WAAWA,MAAM,SAAS;gBAC1B,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,mBAAmBA,MAAM,iBAAiB;YAC9C;QACJ,EAAE,OAAOI,KAAK;YACV,MAAMC,UAAUD,eAAeE,QAAQF,IAAI,OAAO,GAAGG,OAAOH;YAC5D,MAAM,IAAI,CAAC,eAAe,CAACF,SAAS,EAAE,EAAEG;YACxC,OAAOJ,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAAEI;YAAQ;QAC/C;QAEA,IAAIF,OAAO,MAAM,IAAI;YACjB,MAAM,IAAI,CAAC,eAAe,CAACD,SAAS,EAAE,EAAEC,OAAO,KAAK,CAAC,OAAO;YAE5D,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAASE,OAAO,KAAK,CAAC,OAAO;YACjC;QACJ;QAIA,MAAMK,aAAa,MAAMC,aAAaN,OAAO,KAAK,CAAC,MAAM;QACzD,MAAMO,UAAUF,WAAW,QAAQ,CAAC;QAEpC,MAAM,IAAI,CAAC,iBAAiB,CAACN,SAAS,EAAE,EAAEQ,SAASP,OAAO,KAAK,CAAC,SAAS;QAEzE,OAAOF,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;IAEA,MAAc,kBACVU,UAAkB,EAClBD,OAAe,EACfE,SAAwC,EAC1C;QACE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAID;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACF,aAAa;gBACb,OAAOD;gBACPE;YACJ;QACJ;IAER;IAEA,MAAc,gBAAgBD,UAAkB,EAAEN,OAAe,EAAE;QAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAIM;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACFN;YACJ;QACJ;IAER;AACJ;AAEA,MAAMQ,qCAAqCC,YAAY,oBAAoB,CAAC;IACxE,gBAAgBlB;IAChB,cAAc;QAACmB;QAAiBC;QAAgCC;KAAgC;AACpG;AAEA,MAAMC;;aACF,EAAE,GAAGvB;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;aAEf,OAAO,GAAGkB;;AACd;AAEO,MAAMM,8BAA8BC,eAAe,oBAAoB,CAAC;IAC3E,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
@@ -1,4 +1,4 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  import { WebsocketsSendToIdentityUseCase } from "@webiny/api-websockets/features/SendToIdentity/abstractions.js";
3
3
  import { WbGeneratePageContentUseCase } from "../../../api/features/WbGeneratePageContent/index.js";
4
4
  import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
@@ -13,20 +13,25 @@ export interface IWbGeneratePageContentTaskInput {
13
13
  writerPersonaId?: string | null;
14
14
  additionalFileIds?: string[] | null;
15
15
  }
16
- declare class WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {
16
+ declare class WbGeneratePageContentTaskHandlerImpl implements TaskHandler.Interface<IWbGeneratePageContentTaskInput> {
17
17
  private identityContext;
18
18
  private generatePageContent;
19
19
  private sendToIdentity;
20
+ constructor(identityContext: IdentityContext.Interface, generatePageContent: WbGeneratePageContentUseCase.Interface, sendToIdentity: WebsocketsSendToIdentityUseCase.Interface);
21
+ run({ input, controller }: TaskHandler.RunParams<IWbGeneratePageContentTaskInput>): Promise<TaskDefinition.Result<IWbGeneratePageContentTaskInput>>;
22
+ private sendContentToUser;
23
+ private sendErrorToUser;
24
+ }
25
+ declare class WbGeneratePageContentTaskImpl implements TaskDefinition.Interface {
20
26
  id: string;
21
27
  title: string;
22
28
  description: string;
23
29
  maxIterations: number;
24
30
  isPrivate: boolean;
25
31
  databaseLogs: boolean;
26
- constructor(identityContext: IdentityContext.Interface, generatePageContent: WbGeneratePageContentUseCase.Interface, sendToIdentity: WebsocketsSendToIdentityUseCase.Interface);
27
- run({ input, controller }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<TaskDefinition.Result<IWbGeneratePageContentTaskInput>>;
28
- private sendContentToUser;
29
- private sendErrorToUser;
32
+ handler: typeof WbGeneratePageContentTaskHandlerImpl & {
33
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskHandler<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
34
+ };
30
35
  }
31
36
  export declare const WbGeneratePageContentTask: typeof WbGeneratePageContentTaskImpl & {
32
37
  __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>>;
@@ -1,20 +1,14 @@
1
- import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
1
+ import { TaskDefinition, TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
2
  import { WebsocketsSendToIdentityUseCase } from "@webiny/api-websockets/features/SendToIdentity/abstractions.js";
3
3
  import { compress } from "@webiny/utils/features/compression/legacy/gzip.js";
4
4
  import { WbGeneratePageContentUseCase } from "./index.js";
5
5
  import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
6
6
  const WB_GENERATE_PAGE_CONTENT_TASK_ID = "aiPowerUpsGeneratePageContent";
7
- class WbGeneratePageContentTaskImpl {
7
+ class WbGeneratePageContentTaskHandlerImpl {
8
8
  constructor(identityContext, generatePageContent, sendToIdentity){
9
9
  this.identityContext = identityContext;
10
10
  this.generatePageContent = generatePageContent;
11
11
  this.sendToIdentity = sendToIdentity;
12
- this.id = WB_GENERATE_PAGE_CONTENT_TASK_ID;
13
- this.title = "AI Power-Ups - Generate Page Content";
14
- this.description = "Generates page content using AI based on a user prompt.";
15
- this.maxIterations = 1;
16
- this.isPrivate = true;
17
- this.databaseLogs = false;
18
12
  }
19
13
  async run({ input, controller }) {
20
14
  if (controller.runtime.isAborted()) return controller.response.aborted();
@@ -72,14 +66,29 @@ class WbGeneratePageContentTaskImpl {
72
66
  });
73
67
  }
74
68
  }
75
- const WbGeneratePageContentTask = TaskDefinition.createImplementation({
76
- implementation: WbGeneratePageContentTaskImpl,
69
+ const WbGeneratePageContentTaskHandler = TaskHandler.createImplementation({
70
+ implementation: WbGeneratePageContentTaskHandlerImpl,
77
71
  dependencies: [
78
72
  IdentityContext,
79
73
  WbGeneratePageContentUseCase,
80
74
  WebsocketsSendToIdentityUseCase
81
75
  ]
82
76
  });
77
+ class WbGeneratePageContentTaskImpl {
78
+ constructor(){
79
+ this.id = WB_GENERATE_PAGE_CONTENT_TASK_ID;
80
+ this.title = "AI Power-Ups - Generate Page Content";
81
+ this.description = "Generates page content using AI based on a user prompt.";
82
+ this.maxIterations = 1;
83
+ this.isPrivate = true;
84
+ this.databaseLogs = false;
85
+ this.handler = WbGeneratePageContentTaskHandler;
86
+ }
87
+ }
88
+ const WbGeneratePageContentTask = TaskDefinition.createImplementation({
89
+ implementation: WbGeneratePageContentTaskImpl,
90
+ dependencies: []
91
+ });
83
92
  export { WB_GENERATE_PAGE_CONTENT_TASK_ID, WbGeneratePageContentTask };
84
93
 
85
94
  //# sourceMappingURL=WbGeneratePageContentTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/WbGeneratePageContent/WbGeneratePageContentTask.js","sources":["../../../../src/api/features/WbGeneratePageContent/WbGeneratePageContentTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { WebsocketsSendToIdentityUseCase } from \"@webiny/api-websockets/features/SendToIdentity/abstractions.js\";\nimport { compress } from \"@webiny/utils/features/compression/legacy/gzip.js\";\nimport { WbGeneratePageContentUseCase } from \"~/api/features/WbGeneratePageContent/index.js\";\nimport type { GenerationTelemetry } from \"~/api/features/WbGeneratePageContent/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const WB_GENERATE_PAGE_CONTENT_TASK_ID = \"aiPowerUpsGeneratePageContent\";\n\nexport interface IWbGeneratePageContentTaskInput {\n prompt: string;\n components: unknown;\n tools: unknown;\n projectId?: string | null;\n excludedFileIds?: string[] | null;\n readerPersonaId?: string | null;\n writerPersonaId?: string | null;\n additionalFileIds?: string[] | null;\n}\n\nclass WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {\n id = WB_GENERATE_PAGE_CONTENT_TASK_ID;\n title = \"AI Power-Ups - Generate Page Content\";\n description = \"Generates page content using AI based on a user prompt.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n constructor(\n private identityContext: IdentityContext.Interface,\n private generatePageContent: WbGeneratePageContentUseCase.Interface,\n private sendToIdentity: WebsocketsSendToIdentityUseCase.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<\n TaskDefinition.Result<IWbGeneratePageContentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const identity = this.identityContext.getIdentity();\n\n let result;\n try {\n result = await this.generatePageContent.execute({\n prompt: input.prompt,\n components: input.components,\n tools: input.tools,\n projectId: input.projectId,\n excludedFileIds: input.excludedFileIds,\n readerPersonaId: input.readerPersonaId,\n writerPersonaId: input.writerPersonaId,\n additionalFileIds: input.additionalFileIds\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await this.sendErrorToUser(identity.id, message);\n return controller.response.error({ message });\n }\n\n if (result.isFail()) {\n await this.sendErrorToUser(identity.id, result.error.message);\n\n return controller.response.error({\n message: result.error.message\n });\n }\n\n const compressed = await compress(result.value.output);\n const payload = compressed.toString(\"base64\");\n\n await this.sendContentToUser(identity.id, payload, result.value.telemetry);\n\n return controller.response.done(\"Page content generated successfully.\");\n }\n\n private async sendContentToUser(\n identityId: string,\n payload: string,\n telemetry: GenerationTelemetry\n ) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.content\",\n data: {\n compression: \"gzip\",\n value: payload,\n telemetry\n }\n }\n );\n }\n\n private async sendErrorToUser(identityId: string, message: string) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.error\",\n data: {\n message\n }\n }\n );\n }\n}\n\nexport const WbGeneratePageContentTask = TaskDefinition.createImplementation({\n implementation: WbGeneratePageContentTaskImpl,\n dependencies: [IdentityContext, WbGeneratePageContentUseCase, WebsocketsSendToIdentityUseCase]\n});\n"],"names":["WB_GENERATE_PAGE_CONTENT_TASK_ID","WbGeneratePageContentTaskImpl","identityContext","generatePageContent","sendToIdentity","input","controller","identity","result","err","message","Error","String","compressed","compress","payload","identityId","telemetry","WbGeneratePageContentTask","TaskDefinition","IdentityContext","WbGeneratePageContentUseCase","WebsocketsSendToIdentityUseCase"],"mappings":";;;;;AAOO,MAAMA,mCAAmC;AAahD,MAAMC;IAQF,YACYC,eAA0C,EAC1CC,mBAA2D,EAC3DC,cAAyD,CACnE;aAHUF,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;aACAC,cAAc,GAAdA;aAVZ,EAAE,GAAGJ;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;IAMZ;IAEH,MAAM,IAAI,EACNK,KAAK,EACLC,UAAU,EAC8C,EAE1D;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,IAAIC;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;gBAC5C,QAAQH,MAAM,MAAM;gBACpB,YAAYA,MAAM,UAAU;gBAC5B,OAAOA,MAAM,KAAK;gBAClB,WAAWA,MAAM,SAAS;gBAC1B,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,mBAAmBA,MAAM,iBAAiB;YAC9C;QACJ,EAAE,OAAOI,KAAK;YACV,MAAMC,UAAUD,eAAeE,QAAQF,IAAI,OAAO,GAAGG,OAAOH;YAC5D,MAAM,IAAI,CAAC,eAAe,CAACF,SAAS,EAAE,EAAEG;YACxC,OAAOJ,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAAEI;YAAQ;QAC/C;QAEA,IAAIF,OAAO,MAAM,IAAI;YACjB,MAAM,IAAI,CAAC,eAAe,CAACD,SAAS,EAAE,EAAEC,OAAO,KAAK,CAAC,OAAO;YAE5D,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAASE,OAAO,KAAK,CAAC,OAAO;YACjC;QACJ;QAEA,MAAMK,aAAa,MAAMC,SAASN,OAAO,KAAK,CAAC,MAAM;QACrD,MAAMO,UAAUF,WAAW,QAAQ,CAAC;QAEpC,MAAM,IAAI,CAAC,iBAAiB,CAACN,SAAS,EAAE,EAAEQ,SAASP,OAAO,KAAK,CAAC,SAAS;QAEzE,OAAOF,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;IAEA,MAAc,kBACVU,UAAkB,EAClBD,OAAe,EACfE,SAA8B,EAChC;QACE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAID;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACF,aAAa;gBACb,OAAOD;gBACPE;YACJ;QACJ;IAER;IAEA,MAAc,gBAAgBD,UAAkB,EAAEN,OAAe,EAAE;QAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAIM;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACFN;YACJ;QACJ;IAER;AACJ;AAEO,MAAMQ,4BAA4BC,eAAe,oBAAoB,CAAC;IACzE,gBAAgBlB;IAChB,cAAc;QAACmB;QAAiBC;QAA8BC;KAAgC;AAClG"}
1
+ {"version":3,"file":"api/features/WbGeneratePageContent/WbGeneratePageContentTask.js","sources":["../../../../src/api/features/WbGeneratePageContent/WbGeneratePageContentTask.ts"],"sourcesContent":["import {\n TaskDefinition,\n TaskHandler\n} from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { WebsocketsSendToIdentityUseCase } from \"@webiny/api-websockets/features/SendToIdentity/abstractions.js\";\nimport { compress } from \"@webiny/utils/features/compression/legacy/gzip.js\";\nimport { WbGeneratePageContentUseCase } from \"~/api/features/WbGeneratePageContent/index.js\";\nimport type { GenerationTelemetry } from \"~/api/features/WbGeneratePageContent/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const WB_GENERATE_PAGE_CONTENT_TASK_ID = \"aiPowerUpsGeneratePageContent\";\n\nexport interface IWbGeneratePageContentTaskInput {\n prompt: string;\n components: unknown;\n tools: unknown;\n projectId?: string | null;\n excludedFileIds?: string[] | null;\n readerPersonaId?: string | null;\n writerPersonaId?: string | null;\n additionalFileIds?: string[] | null;\n}\n\nclass WbGeneratePageContentTaskHandlerImpl implements TaskHandler.Interface<IWbGeneratePageContentTaskInput> {\n constructor(\n private identityContext: IdentityContext.Interface,\n private generatePageContent: WbGeneratePageContentUseCase.Interface,\n private sendToIdentity: WebsocketsSendToIdentityUseCase.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskHandler.RunParams<IWbGeneratePageContentTaskInput>): Promise<\n TaskDefinition.Result<IWbGeneratePageContentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const identity = this.identityContext.getIdentity();\n\n let result;\n try {\n result = await this.generatePageContent.execute({\n prompt: input.prompt,\n components: input.components,\n tools: input.tools,\n projectId: input.projectId,\n excludedFileIds: input.excludedFileIds,\n readerPersonaId: input.readerPersonaId,\n writerPersonaId: input.writerPersonaId,\n additionalFileIds: input.additionalFileIds\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await this.sendErrorToUser(identity.id, message);\n return controller.response.error({ message });\n }\n\n if (result.isFail()) {\n await this.sendErrorToUser(identity.id, result.error.message);\n\n return controller.response.error({\n message: result.error.message\n });\n }\n\n const compressed = await compress(result.value.output);\n const payload = compressed.toString(\"base64\");\n\n await this.sendContentToUser(identity.id, payload, result.value.telemetry);\n\n return controller.response.done(\"Page content generated successfully.\");\n }\n\n private async sendContentToUser(\n identityId: string,\n payload: string,\n telemetry: GenerationTelemetry\n ) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.content\",\n data: {\n compression: \"gzip\",\n value: payload,\n telemetry\n }\n }\n );\n }\n\n private async sendErrorToUser(identityId: string, message: string) {\n await this.sendToIdentity.execute(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.error\",\n data: {\n message\n }\n }\n );\n }\n}\n\nconst WbGeneratePageContentTaskHandler = TaskHandler.createImplementation({\n implementation: WbGeneratePageContentTaskHandlerImpl,\n dependencies: [IdentityContext, WbGeneratePageContentUseCase, WebsocketsSendToIdentityUseCase]\n});\n\nclass WbGeneratePageContentTaskImpl implements TaskDefinition.Interface {\n id = WB_GENERATE_PAGE_CONTENT_TASK_ID;\n title = \"AI Power-Ups - Generate Page Content\";\n description = \"Generates page content using AI based on a user prompt.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n handler = WbGeneratePageContentTaskHandler;\n}\n\nexport const WbGeneratePageContentTask = TaskDefinition.createImplementation({\n implementation: WbGeneratePageContentTaskImpl,\n dependencies: []\n});\n"],"names":["WB_GENERATE_PAGE_CONTENT_TASK_ID","WbGeneratePageContentTaskHandlerImpl","identityContext","generatePageContent","sendToIdentity","input","controller","identity","result","err","message","Error","String","compressed","compress","payload","identityId","telemetry","WbGeneratePageContentTaskHandler","TaskHandler","IdentityContext","WbGeneratePageContentUseCase","WebsocketsSendToIdentityUseCase","WbGeneratePageContentTaskImpl","WbGeneratePageContentTask","TaskDefinition"],"mappings":";;;;;AAUO,MAAMA,mCAAmC;AAahD,MAAMC;IACF,YACYC,eAA0C,EAC1CC,mBAA2D,EAC3DC,cAAyD,CACnE;aAHUF,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,IAAI,EACNC,KAAK,EACLC,UAAU,EAC2C,EAEvD;QACE,IAAIA,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAGtC,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,IAAIC;QACJ,IAAI;YACAA,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;gBAC5C,QAAQH,MAAM,MAAM;gBACpB,YAAYA,MAAM,UAAU;gBAC5B,OAAOA,MAAM,KAAK;gBAClB,WAAWA,MAAM,SAAS;gBAC1B,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,iBAAiBA,MAAM,eAAe;gBACtC,mBAAmBA,MAAM,iBAAiB;YAC9C;QACJ,EAAE,OAAOI,KAAK;YACV,MAAMC,UAAUD,eAAeE,QAAQF,IAAI,OAAO,GAAGG,OAAOH;YAC5D,MAAM,IAAI,CAAC,eAAe,CAACF,SAAS,EAAE,EAAEG;YACxC,OAAOJ,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAAEI;YAAQ;QAC/C;QAEA,IAAIF,OAAO,MAAM,IAAI;YACjB,MAAM,IAAI,CAAC,eAAe,CAACD,SAAS,EAAE,EAAEC,OAAO,KAAK,CAAC,OAAO;YAE5D,OAAOF,WAAW,QAAQ,CAAC,KAAK,CAAC;gBAC7B,SAASE,OAAO,KAAK,CAAC,OAAO;YACjC;QACJ;QAEA,MAAMK,aAAa,MAAMC,SAASN,OAAO,KAAK,CAAC,MAAM;QACrD,MAAMO,UAAUF,WAAW,QAAQ,CAAC;QAEpC,MAAM,IAAI,CAAC,iBAAiB,CAACN,SAAS,EAAE,EAAEQ,SAASP,OAAO,KAAK,CAAC,SAAS;QAEzE,OAAOF,WAAW,QAAQ,CAAC,IAAI,CAAC;IACpC;IAEA,MAAc,kBACVU,UAAkB,EAClBD,OAAe,EACfE,SAA8B,EAChC;QACE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAID;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACF,aAAa;gBACb,OAAOD;gBACPE;YACJ;QACJ;IAER;IAEA,MAAc,gBAAgBD,UAAkB,EAAEN,OAAe,EAAE;QAC/D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B;YAAE,IAAIM;QAAW,GACjB;YACI,QAAQ;YACR,MAAM;gBACFN;YACJ;QACJ;IAER;AACJ;AAEA,MAAMQ,mCAAmCC,YAAY,oBAAoB,CAAC;IACtE,gBAAgBlB;IAChB,cAAc;QAACmB;QAAiBC;QAA8BC;KAAgC;AAClG;AAEA,MAAMC;;aACF,EAAE,GAAGvB;aACL,KAAK,GAAG;aACR,WAAW,GAAG;aACd,aAAa,GAAG;aAChB,SAAS,GAAG;aACZ,YAAY,GAAG;aAEf,OAAO,GAAGkB;;AACd;AAEO,MAAMM,4BAA4BC,eAAe,oBAAoB,CAAC;IACzE,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/ai-powerups",
3
- "version": "6.6.0-alpha.2",
3
+ "version": "6.6.0-alpha.4",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -18,28 +18,28 @@
18
18
  "author": "Webiny Ltd.",
19
19
  "license": "Webiny Enterprise",
20
20
  "dependencies": {
21
- "@webiny/admin-ui": "6.6.0-alpha.2",
22
- "@webiny/ai-chat": "6.6.0-alpha.2",
23
- "@webiny/api-core": "6.6.0-alpha.2",
24
- "@webiny/api-file-manager": "6.6.0-alpha.2",
25
- "@webiny/api-headless-cms": "6.6.0-alpha.2",
26
- "@webiny/api-website-builder": "6.6.0-alpha.2",
27
- "@webiny/api-websockets": "6.6.0-alpha.2",
28
- "@webiny/app": "6.6.0-alpha.2",
29
- "@webiny/app-admin": "6.6.0-alpha.2",
30
- "@webiny/app-headless-cms": "6.6.0-alpha.2",
31
- "@webiny/app-website-builder": "6.6.0-alpha.2",
32
- "@webiny/app-websockets": "6.6.0-alpha.2",
33
- "@webiny/background-tasks": "6.6.0-alpha.2",
21
+ "@webiny/admin-ui": "6.6.0-alpha.4",
22
+ "@webiny/ai-chat": "6.6.0-alpha.4",
23
+ "@webiny/api-core": "6.6.0-alpha.4",
24
+ "@webiny/api-file-manager": "6.6.0-alpha.4",
25
+ "@webiny/api-headless-cms": "6.6.0-alpha.4",
26
+ "@webiny/api-website-builder": "6.6.0-alpha.4",
27
+ "@webiny/api-websockets": "6.6.0-alpha.4",
28
+ "@webiny/app": "6.6.0-alpha.4",
29
+ "@webiny/app-admin": "6.6.0-alpha.4",
30
+ "@webiny/app-headless-cms": "6.6.0-alpha.4",
31
+ "@webiny/app-website-builder": "6.6.0-alpha.4",
32
+ "@webiny/app-websockets": "6.6.0-alpha.4",
33
+ "@webiny/background-tasks": "6.6.0-alpha.4",
34
34
  "@webiny/di": "1.1.0",
35
- "@webiny/event-handler-core": "6.6.0-alpha.2",
36
- "@webiny/feature": "6.6.0-alpha.2",
37
- "@webiny/icons": "6.6.0-alpha.2",
38
- "@webiny/languages": "6.6.0-alpha.2",
39
- "@webiny/lexical-converter": "6.6.0-alpha.2",
40
- "@webiny/project": "6.6.0-alpha.2",
41
- "@webiny/project-aws": "6.6.0-alpha.2",
42
- "@webiny/utils": "6.6.0-alpha.2",
35
+ "@webiny/event-handler-core": "6.6.0-alpha.4",
36
+ "@webiny/feature": "6.6.0-alpha.4",
37
+ "@webiny/icons": "6.6.0-alpha.4",
38
+ "@webiny/languages": "6.6.0-alpha.4",
39
+ "@webiny/lexical-converter": "6.6.0-alpha.4",
40
+ "@webiny/project": "6.6.0-alpha.4",
41
+ "@webiny/project-aws": "6.6.0-alpha.4",
42
+ "@webiny/utils": "6.6.0-alpha.4",
43
43
  "ai": "7.0.73",
44
44
  "front-matter": "4.0.2",
45
45
  "happy-dom": "20.11.6",
@@ -51,10 +51,10 @@
51
51
  "zod": "4.4.3"
52
52
  },
53
53
  "devDependencies": {
54
- "@webiny/api-graphql": "6.6.0-alpha.2",
55
- "@webiny/build-tools": "6.6.0-alpha.2",
56
- "@webiny/feature-flags": "6.6.0-alpha.2",
57
- "@webiny/wcp": "6.6.0-alpha.2",
54
+ "@webiny/api-graphql": "6.6.0-alpha.4",
55
+ "@webiny/build-tools": "6.6.0-alpha.4",
56
+ "@webiny/feature-flags": "6.6.0-alpha.4",
57
+ "@webiny/wcp": "6.6.0-alpha.4",
58
58
  "rimraf": "6.1.3",
59
59
  "typescript": "7.0.2",
60
60
  "vitest": "4.1.11"