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

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 (195) hide show
  1. package/AiPowerups.js +2 -2
  2. package/AiPowerups.js.map +1 -1
  3. package/admin/Extension.js +10 -2
  4. package/admin/Extension.js.map +1 -1
  5. package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.d.ts +12 -0
  6. package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js +46 -0
  7. package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js.map +1 -0
  8. package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.d.ts +11 -0
  9. package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js +18 -0
  10. package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js.map +1 -0
  11. package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.d.ts +11 -0
  12. package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js +18 -0
  13. package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js.map +1 -0
  14. package/admin/features/compareEntryRevisions/abstractions.d.ts +32 -0
  15. package/admin/features/compareEntryRevisions/abstractions.js +7 -0
  16. package/admin/features/compareEntryRevisions/abstractions.js.map +1 -0
  17. package/admin/features/compareEntryRevisions/feature.d.ts +1 -0
  18. package/admin/features/compareEntryRevisions/feature.js +15 -0
  19. package/admin/features/compareEntryRevisions/feature.js.map +1 -0
  20. package/admin/features/compareEntryRevisions/index.d.ts +2 -0
  21. package/admin/features/compareEntryRevisions/index.js +2 -0
  22. package/admin/features/feature.js +2 -0
  23. package/admin/features/feature.js.map +1 -1
  24. package/admin/features/generateEntryContent/GenerateEntryContentGateway.js +2 -0
  25. package/admin/features/generateEntryContent/GenerateEntryContentGateway.js.map +1 -1
  26. package/admin/features/generateEntryContent/abstractions.d.ts +1 -0
  27. package/admin/features/generateEntryContent/abstractions.js.map +1 -1
  28. package/admin/features/generatePageContent/GeneratePageContentGateway.js +2 -0
  29. package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -1
  30. package/admin/features/generatePageContent/abstractions.d.ts +1 -0
  31. package/admin/features/generatePageContent/abstractions.js.map +1 -1
  32. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +2 -2
  33. package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.d.ts +20 -0
  34. package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js +108 -0
  35. package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js.map +1 -0
  36. package/admin/presentation/AiPromptFormFactory/abstractions.d.ts +14 -0
  37. package/admin/presentation/AiPromptFormFactory/abstractions.js +5 -0
  38. package/admin/presentation/AiPromptFormFactory/abstractions.js.map +1 -0
  39. package/admin/presentation/AiPromptFormFactory/feature.d.ts +1 -0
  40. package/admin/presentation/AiPromptFormFactory/feature.js +11 -0
  41. package/admin/presentation/AiPromptFormFactory/feature.js.map +1 -0
  42. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.d.ts +9 -0
  43. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js +118 -0
  44. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js.map +1 -0
  45. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.d.ts +9 -0
  46. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js +72 -0
  47. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js.map +1 -0
  48. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.d.ts +4 -0
  49. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js +21 -0
  50. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js.map +1 -0
  51. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.d.ts +2 -0
  52. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js +17 -0
  53. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js.map +1 -0
  54. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.d.ts +25 -0
  55. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js +90 -0
  56. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js.map +1 -0
  57. package/admin/presentation/CmsCompareEntryRevisions/Extension.d.ts +2 -0
  58. package/admin/presentation/CmsCompareEntryRevisions/Extension.js +16 -0
  59. package/admin/presentation/CmsCompareEntryRevisions/Extension.js.map +1 -0
  60. package/admin/presentation/CmsCompareEntryRevisions/abstractions.d.ts +29 -0
  61. package/admin/presentation/CmsCompareEntryRevisions/abstractions.js +5 -0
  62. package/admin/presentation/CmsCompareEntryRevisions/abstractions.js.map +1 -0
  63. package/admin/presentation/CmsCompareEntryRevisions/feature.d.ts +3 -0
  64. package/admin/presentation/CmsCompareEntryRevisions/feature.js +17 -0
  65. package/admin/presentation/CmsCompareEntryRevisions/feature.js.map +1 -0
  66. package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.d.ts +2 -2
  67. package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.d.ts +2 -2
  68. package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.d.ts +4 -12
  69. package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js +12 -94
  70. package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js.map +1 -1
  71. package/admin/presentation/CmsContentGeneration/Extension.d.ts +1 -1
  72. package/admin/presentation/CmsContentGeneration/Extension.js +9 -5
  73. package/admin/presentation/CmsContentGeneration/Extension.js.map +1 -1
  74. package/admin/presentation/CmsEntryWizard/CmsEntryWizard.d.ts +4 -0
  75. package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js +113 -0
  76. package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js.map +1 -0
  77. package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.d.ts +4 -0
  78. package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js +19 -0
  79. package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js.map +1 -0
  80. package/admin/presentation/CmsEntryWizard/Extension.d.ts +2 -0
  81. package/admin/presentation/CmsEntryWizard/Extension.js +10 -0
  82. package/admin/presentation/CmsEntryWizard/Extension.js.map +1 -0
  83. package/admin/presentation/ProvidersSettings.js +1 -1
  84. package/admin/presentation/ProvidersSettings.js.map +1 -1
  85. package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +2 -2
  86. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +2 -2
  87. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -1
  88. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +4 -12
  89. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +12 -94
  90. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -1
  91. package/api/Extension.js +8 -0
  92. package/api/Extension.js.map +1 -1
  93. package/api/features/AiChatProvider/PowerUpsAiChatProvider.d.ts +24 -0
  94. package/api/features/AiChatProvider/PowerUpsAiChatProvider.js +31 -0
  95. package/api/features/AiChatProvider/PowerUpsAiChatProvider.js.map +1 -0
  96. package/api/features/AiChatProvider/feature.d.ts +9 -0
  97. package/api/features/AiChatProvider/feature.js +11 -0
  98. package/api/features/AiChatProvider/feature.js.map +1 -0
  99. package/api/features/AiChatProvider/index.d.ts +2 -0
  100. package/api/features/AiChatProvider/index.js +2 -0
  101. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.d.ts +1 -3
  102. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js +2 -6
  103. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js.map +1 -1
  104. package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.d.ts +36 -0
  105. package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.js +85 -0
  106. package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.js.map +1 -0
  107. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +10 -16
  108. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +27 -102
  109. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -1
  110. package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.d.ts +18 -0
  111. package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.js +50 -0
  112. package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.js.map +1 -0
  113. package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.d.ts +19 -0
  114. package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.js +49 -0
  115. package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.js.map +1 -0
  116. package/api/features/AiImageEnrichment/abstractions.d.ts +60 -0
  117. package/api/features/AiImageEnrichment/abstractions.js +12 -0
  118. package/api/features/AiImageEnrichment/abstractions.js.map +1 -0
  119. package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.d.ts +12 -0
  120. package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.js +30 -0
  121. package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.js.map +1 -0
  122. package/api/features/AiImageEnrichment/errors.d.ts +26 -0
  123. package/api/features/AiImageEnrichment/errors.js +28 -0
  124. package/api/features/AiImageEnrichment/errors.js.map +1 -0
  125. package/api/features/AiImageEnrichment/feature.js +9 -0
  126. package/api/features/AiImageEnrichment/feature.js.map +1 -1
  127. package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.d.ts +6 -0
  128. package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.js +9 -0
  129. package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.js.map +1 -0
  130. package/api/features/AiImageEnrichment/readEnrichmentPartial.d.ts +8 -0
  131. package/api/features/AiImageEnrichment/readEnrichmentPartial.js +16 -0
  132. package/api/features/AiImageEnrichment/readEnrichmentPartial.js.map +1 -0
  133. package/api/features/AiImageEnrichment/streamEvents.d.ts +36 -0
  134. package/api/features/AiImageEnrichment/streamEvents.js +0 -0
  135. package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +8 -1
  136. package/api/features/AiPromptContext/AiPromptContextBuilder.js +46 -2
  137. package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -1
  138. package/api/features/AiPromptContext/abstractions.d.ts +3 -0
  139. package/api/features/AiPromptContext/abstractions.js +9 -1
  140. package/api/features/AiPromptContext/abstractions.js.map +1 -1
  141. package/api/features/AiPromptContext/index.d.ts +1 -1
  142. package/api/features/AiPromptContext/index.js +1 -1
  143. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.d.ts +22 -0
  144. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js +136 -0
  145. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js.map +1 -0
  146. package/api/features/CmsCompareEntryRevisions/abstractions.d.ts +18 -0
  147. package/api/features/CmsCompareEntryRevisions/abstractions.js +5 -0
  148. package/api/features/CmsCompareEntryRevisions/abstractions.js.map +1 -0
  149. package/api/features/CmsCompareEntryRevisions/feature.d.ts +4 -0
  150. package/api/features/CmsCompareEntryRevisions/feature.js +11 -0
  151. package/api/features/CmsCompareEntryRevisions/feature.js.map +1 -0
  152. package/api/features/CmsCompareEntryRevisions/index.d.ts +2 -0
  153. package/api/features/CmsCompareEntryRevisions/index.js +2 -0
  154. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.d.ts +1 -0
  155. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js +20 -10
  156. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js.map +1 -1
  157. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.d.ts +1 -1
  158. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js +5 -5
  159. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js.map +1 -1
  160. package/api/features/CmsGenerateEntryContent/abstractions.d.ts +10 -3
  161. package/api/features/CmsGenerateEntryContent/abstractions.js.map +1 -1
  162. package/api/features/GetSettings/index.d.ts +1 -0
  163. package/api/features/GetSettings/index.js +1 -0
  164. package/api/features/Providers/types.d.ts +2 -2
  165. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +1 -0
  166. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +19 -9
  167. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -1
  168. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +4 -3
  169. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -1
  170. package/api/features/WbGeneratePageContent/abstractions.d.ts +1 -0
  171. package/api/features/WbGeneratePageContent/abstractions.js.map +1 -1
  172. package/api/features/WbTranslatePage/LexicalParser.d.ts +10 -0
  173. package/api/features/WbTranslatePage/LexicalParser.js +37 -0
  174. package/api/features/WbTranslatePage/LexicalParser.js.map +1 -0
  175. package/api/features/WbTranslatePage/WbTranslatePageDecorator.d.ts +27 -0
  176. package/api/features/WbTranslatePage/WbTranslatePageDecorator.js +134 -0
  177. package/api/features/WbTranslatePage/WbTranslatePageDecorator.js.map +1 -0
  178. package/api/features/WbTranslatePage/abstractions/LexicalParser.d.ts +7 -0
  179. package/api/features/WbTranslatePage/abstractions/LexicalParser.js +5 -0
  180. package/api/features/WbTranslatePage/abstractions/LexicalParser.js.map +1 -0
  181. package/api/features/WbTranslatePage/feature.d.ts +4 -0
  182. package/api/features/WbTranslatePage/feature.js +13 -0
  183. package/api/features/WbTranslatePage/feature.js.map +1 -0
  184. package/api/features/WbTranslatePage/index.d.ts +2 -0
  185. package/api/features/WbTranslatePage/index.js +2 -0
  186. package/api/graphql/BaseGraphQLSchema.js +11 -4
  187. package/api/graphql/BaseGraphQLSchema.js.map +1 -1
  188. package/api/graphql/CmsCompareEntryRevisionsSchema.d.ts +8 -0
  189. package/api/graphql/CmsCompareEntryRevisionsSchema.js +68 -0
  190. package/api/graphql/CmsCompareEntryRevisionsSchema.js.map +1 -0
  191. package/exports/admin/ai-powerups.d.ts +1 -0
  192. package/exports/admin/ai-powerups.js +1 -0
  193. package/exports/api/ai-powerups.d.ts +2 -0
  194. package/exports/api/ai-powerups.js +2 -0
  195. package/package.json +32 -25
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/WbTranslatePage/LexicalParser.js","sources":["../../../../src/api/features/WbTranslatePage/LexicalParser.ts"],"sourcesContent":["import { createHtmlToLexicalParser } from \"@webiny/lexical-converter\";\nimport { LexicalParser as Abstraction } from \"./abstractions/LexicalParser.js\";\n\nconst parser = createHtmlToLexicalParser();\n\nclass LexicalParserImpl implements Abstraction.Interface {\n private WindowClass: typeof import(\"happy-dom\").Window | null = null;\n\n async parse(html: string): Promise<Record<string, unknown> | null> {\n try {\n const Window = await this.loadWindow();\n const window = new Window();\n const document = window.document;\n document.body.innerHTML = html;\n const result = parser(document as unknown as Document);\n await window.happyDOM.close();\n return result;\n } catch (error) {\n console.error(\"[LexicalParser] Failed to parse HTML to Lexical state:\", error);\n console.error(\"[LexicalParser] Input HTML:\", html);\n return null;\n }\n }\n\n private async loadWindow() {\n if (!this.WindowClass) {\n const { Window } = await import(\"happy-dom\");\n this.WindowClass = Window;\n }\n return this.WindowClass;\n }\n}\n\nexport const LexicalParser = Abstraction.createImplementation({\n implementation: LexicalParserImpl,\n dependencies: []\n});\n"],"names":["parser","createHtmlToLexicalParser","LexicalParserImpl","html","Window","window","document","result","error","console","LexicalParser","Abstraction"],"mappings":";;AAGA,MAAMA,SAASC;AAEf,MAAMC;IAGF,MAAM,MAAMC,IAAY,EAA2C;QAC/D,IAAI;YACA,MAAMC,SAAS,MAAM,IAAI,CAAC,UAAU;YACpC,MAAMC,SAAS,IAAID;YACnB,MAAME,WAAWD,OAAO,QAAQ;YAChCC,SAAS,IAAI,CAAC,SAAS,GAAGH;YAC1B,MAAMI,SAASP,OAAOM;YACtB,MAAMD,OAAO,QAAQ,CAAC,KAAK;YAC3B,OAAOE;QACX,EAAE,OAAOC,OAAO;YACZC,QAAQ,KAAK,CAAC,0DAA0DD;YACxEC,QAAQ,KAAK,CAAC,+BAA+BN;YAC7C,OAAO;QACX;IACJ;IAEA,MAAc,aAAa;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;YAChC,IAAI,CAAC,WAAW,GAAGA;QACvB;QACA,OAAO,IAAI,CAAC,WAAW;IAC3B;;aAxBQ,WAAW,GAA6C;;AAyBpE;AAEO,MAAMM,8BAAgBC,cAAAA,oBAAgC,CAAC;IAC1D,gBAAgBT;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,27 @@
1
+ import { Ai } from "@webiny/api-core/features/ai/index.js";
2
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
3
+ import { GetDefaultLanguageUseCase } from "@webiny/languages/exports/api/languages.js";
4
+ import { TranslatePageUseCase } from "@webiny/api-website-builder/features/pages/TranslatePage/index.js";
5
+ import { UpdatePageRepository } from "@webiny/api-website-builder/features/pages/UpdatePage/abstractions.js";
6
+ import { GetSettingsUseCase } from "../../../api/features/GetSettings/index.js";
7
+ import { LexicalParser } from "./abstractions/LexicalParser.js";
8
+ declare class WbTranslatePageDecoratorImpl implements TranslatePageUseCase.Interface {
9
+ private getDefaultLanguage;
10
+ private getSettings;
11
+ private ai;
12
+ private encryption;
13
+ private lexicalParser;
14
+ private updatePageRepository;
15
+ private decoratee;
16
+ constructor(getDefaultLanguage: GetDefaultLanguageUseCase.Interface, getSettings: GetSettingsUseCase.Interface, ai: Ai.Interface, encryption: Encryption.Interface, lexicalParser: LexicalParser.Interface, updatePageRepository: UpdatePageRepository.Interface, decoratee: TranslatePageUseCase.Interface);
17
+ execute(params: TranslatePageUseCase.Params): TranslatePageUseCase.Return;
18
+ private resolveSourceLanguage;
19
+ private translate;
20
+ private extractBindings;
21
+ private slugify;
22
+ private buildUpdateData;
23
+ }
24
+ export declare const WbTranslatePageDecorator: typeof WbTranslatePageDecoratorImpl & {
25
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-website-builder/features/pages/TranslatePage/abstractions.js").ITranslatePageUseCase>;
26
+ };
27
+ export {};
@@ -0,0 +1,134 @@
1
+ import set from "lodash/set";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { Ai } from "@webiny/api-core/features/ai/index.js";
4
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
5
+ import { GetDefaultLanguageUseCase } from "@webiny/languages/exports/api/languages.js";
6
+ import { TranslatePageUseCase } from "@webiny/api-website-builder/features/pages/TranslatePage/index.js";
7
+ import { UpdatePageRepository } from "@webiny/api-website-builder/features/pages/UpdatePage/abstractions.js";
8
+ import { GetSettingsUseCase } from "../GetSettings/index.js";
9
+ import { LexicalParser } from "./abstractions/LexicalParser.js";
10
+ class WbTranslatePageDecoratorImpl {
11
+ constructor(getDefaultLanguage, getSettings, ai, encryption, lexicalParser, updatePageRepository, decoratee){
12
+ this.getDefaultLanguage = getDefaultLanguage;
13
+ this.getSettings = getSettings;
14
+ this.ai = ai;
15
+ this.encryption = encryption;
16
+ this.lexicalParser = lexicalParser;
17
+ this.updatePageRepository = updatePageRepository;
18
+ this.decoratee = decoratee;
19
+ }
20
+ async execute(params) {
21
+ const result = await this.decoratee.execute(params);
22
+ if (result.isFail()) return result;
23
+ const page = result.value;
24
+ const sourceLanguage = await this.resolveSourceLanguage(page);
25
+ const translations = await this.translate(page, sourceLanguage, params.languageCode);
26
+ if (!translations) return Result.ok(page);
27
+ const updateData = await this.buildUpdateData(page, translations);
28
+ const updateResult = await this.updatePageRepository.execute(page.id, updateData);
29
+ if (updateResult.isFail()) return Result.ok(page);
30
+ return Result.ok(updateResult.value);
31
+ }
32
+ async resolveSourceLanguage(page) {
33
+ if (page.properties["sourcePage"]) return page.properties["language"] ?? "en";
34
+ const result = await this.getDefaultLanguage.execute();
35
+ if (result.isOk()) return result.value.code;
36
+ return "en";
37
+ }
38
+ async translate(page, sourceLanguage, targetLanguage) {
39
+ const settingsResult = await this.getSettings.execute();
40
+ if (settingsResult.isFail()) return null;
41
+ const settings = settingsResult.value;
42
+ const firstProvider = settings.providers.presets[0];
43
+ if (!firstProvider) return null;
44
+ const apiKey = await this.encryption.decrypt(firstProvider.apiKeyEncrypted);
45
+ const properties = {
46
+ title: page.properties["title"],
47
+ snippet: page.properties["snippet"],
48
+ pathSlug: page.properties["title"]
49
+ };
50
+ const bindings = this.extractBindings(page.bindings);
51
+ const input = JSON.stringify({
52
+ properties,
53
+ bindings
54
+ });
55
+ const result = await this.ai.generateText({
56
+ model: firstProvider.model,
57
+ connection: {
58
+ sdkName: firstProvider.model.split("/")[0],
59
+ apiKey
60
+ },
61
+ system: `You are a professional translator. Translate all user-provided text to language code "${targetLanguage}", preserving placeholders and formatting. Return a JSON object with the same keys, only changing the values.`,
62
+ prompt: `Translate given key-value pairs from "${sourceLanguage}" to language code "${targetLanguage}". Do not modify the keys. "properties" is a simple key-value pair. "bindings" values are located in the "value" key. ${input}`,
63
+ temperature: 0.3
64
+ });
65
+ try {
66
+ return JSON.parse(result.text);
67
+ } catch {
68
+ return null;
69
+ }
70
+ }
71
+ extractBindings(bindings) {
72
+ const result = {};
73
+ for(const elementId in bindings){
74
+ const element = bindings[elementId];
75
+ const inputs = element.inputs;
76
+ if (inputs) for(const inputName in inputs){
77
+ const input = inputs[inputName];
78
+ if ("text" === input.type || "longText" === input.type) result[`${elementId}.inputs.${inputName}`] = {
79
+ type: input.type,
80
+ value: input.static
81
+ };
82
+ else if ("lexical" === input.type && input.static?.html) result[`${elementId}.inputs.${inputName}`] = {
83
+ type: input.type,
84
+ value: input.static.html
85
+ };
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+ slugify(text) {
91
+ return text.toLowerCase().normalize("NFKD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
92
+ }
93
+ async buildUpdateData(page, translations) {
94
+ const properties = {
95
+ ...page.properties
96
+ };
97
+ const bindings = structuredClone(page.bindings);
98
+ const translatedPathSlug = translations.properties["pathSlug"];
99
+ delete translations.properties["pathSlug"];
100
+ for (const [key, value] of Object.entries(translations.properties))properties[key] = value;
101
+ if (translatedPathSlug) {
102
+ const slug = this.slugify(translatedPathSlug);
103
+ if (slug) {
104
+ const languageCode = page.properties["language"];
105
+ properties["path"] = `/${languageCode}/${slug}`;
106
+ }
107
+ }
108
+ for (const [key, binding] of Object.entries(translations.bindings))if ("lexical" === binding.type) {
109
+ const state = await this.lexicalParser.parse(binding.value);
110
+ if (state) {
111
+ set(bindings, `${key}.static.state`, JSON.stringify(state));
112
+ set(bindings, `${key}.static.html`, binding.value);
113
+ }
114
+ } else set(bindings, `${key}.static`, binding.value);
115
+ return {
116
+ properties,
117
+ bindings
118
+ };
119
+ }
120
+ }
121
+ const WbTranslatePageDecorator = TranslatePageUseCase.createDecorator({
122
+ decorator: WbTranslatePageDecoratorImpl,
123
+ dependencies: [
124
+ GetDefaultLanguageUseCase,
125
+ GetSettingsUseCase,
126
+ Ai,
127
+ Encryption,
128
+ LexicalParser,
129
+ UpdatePageRepository
130
+ ]
131
+ });
132
+ export { WbTranslatePageDecorator };
133
+
134
+ //# sourceMappingURL=WbTranslatePageDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/WbTranslatePage/WbTranslatePageDecorator.js","sources":["../../../../src/api/features/WbTranslatePage/WbTranslatePageDecorator.ts"],"sourcesContent":["import set from \"lodash/set\";\nimport { Result } from \"@webiny/feature/api\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { GetDefaultLanguageUseCase } from \"@webiny/languages/exports/api/languages.js\";\nimport { TranslatePageUseCase } from \"@webiny/api-website-builder/features/pages/TranslatePage/index.js\";\nimport { UpdatePageRepository } from \"@webiny/api-website-builder/features/pages/UpdatePage/abstractions.js\";\nimport type { WbPage } from \"@webiny/api-website-builder/domain/page/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/api/features/GetSettings/index.js\";\nimport { LexicalParser } from \"./abstractions/LexicalParser.js\";\n\ntype InputType = \"text\" | \"longText\" | \"lexical\";\n\ninterface TranslatableBinding {\n type: InputType;\n value: string;\n}\n\ntype TranslatableBindings = Record<string, TranslatableBinding>;\n\ninterface TranslatedBindings {\n [key: string]: { type: InputType; value: string };\n}\n\ninterface TranslatedData {\n properties: Record<string, string>;\n bindings: TranslatedBindings;\n}\n\nclass WbTranslatePageDecoratorImpl implements TranslatePageUseCase.Interface {\n constructor(\n private getDefaultLanguage: GetDefaultLanguageUseCase.Interface,\n private getSettings: GetSettingsUseCase.Interface,\n private ai: Ai.Interface,\n private encryption: Encryption.Interface,\n private lexicalParser: LexicalParser.Interface,\n private updatePageRepository: UpdatePageRepository.Interface,\n private decoratee: TranslatePageUseCase.Interface\n ) {}\n\n async execute(params: TranslatePageUseCase.Params): TranslatePageUseCase.Return {\n const result = await this.decoratee.execute(params);\n if (result.isFail()) {\n return result;\n }\n\n const page = result.value;\n const sourceLanguage = await this.resolveSourceLanguage(page);\n\n const translations = await this.translate(page, sourceLanguage, params.languageCode);\n if (!translations) {\n return Result.ok(page);\n }\n\n const updateData = await this.buildUpdateData(page, translations);\n const updateResult = await this.updatePageRepository.execute(page.id, updateData);\n if (updateResult.isFail()) {\n return Result.ok(page);\n }\n\n return Result.ok(updateResult.value);\n }\n\n private async resolveSourceLanguage(page: WbPage): Promise<string> {\n if (page.properties[\"sourcePage\"]) {\n return page.properties[\"language\"] ?? \"en\";\n }\n\n const result = await this.getDefaultLanguage.execute();\n if (result.isOk()) {\n return result.value.code;\n }\n\n return \"en\";\n }\n\n private async translate(\n page: WbPage,\n sourceLanguage: string,\n targetLanguage: string\n ): Promise<TranslatedData | null> {\n const settingsResult = await this.getSettings.execute();\n if (settingsResult.isFail()) {\n return null;\n }\n\n const settings = settingsResult.value;\n const firstProvider = settings.providers.presets[0];\n\n if (!firstProvider) {\n return null;\n }\n\n const apiKey = await this.encryption.decrypt(firstProvider.apiKeyEncrypted);\n\n const properties = {\n title: page.properties[\"title\"],\n snippet: page.properties[\"snippet\"],\n pathSlug: page.properties[\"title\"]\n };\n const bindings = this.extractBindings(page.bindings);\n const input = JSON.stringify({ properties, bindings });\n\n const result = await this.ai.generateText({\n model: firstProvider.model,\n connection: {\n sdkName: firstProvider.model.split(\"/\")[0],\n apiKey\n },\n system: `You are a professional translator. Translate all user-provided text to language code \"${targetLanguage}\", preserving placeholders and formatting. Return a JSON object with the same keys, only changing the values.`,\n prompt: `Translate given key-value pairs from \"${sourceLanguage}\" to language code \"${targetLanguage}\". Do not modify the keys. \"properties\" is a simple key-value pair. \"bindings\" values are located in the \"value\" key. ${input}`,\n temperature: 0.3\n });\n\n try {\n return JSON.parse(result.text);\n } catch {\n return null;\n }\n }\n\n private extractBindings(bindings: Record<string, any>): TranslatableBindings {\n const result: TranslatableBindings = {};\n\n for (const elementId in bindings) {\n const element = bindings[elementId];\n const inputs = element.inputs;\n if (!inputs) {\n continue;\n }\n\n for (const inputName in inputs) {\n const input = inputs[inputName];\n if (input.type === \"text\" || input.type === \"longText\") {\n result[`${elementId}.inputs.${inputName}`] = {\n type: input.type,\n value: input.static\n };\n } else if (input.type === \"lexical\" && input.static?.html) {\n result[`${elementId}.inputs.${inputName}`] = {\n type: input.type,\n value: input.static.html\n };\n }\n }\n }\n\n return result;\n }\n\n private slugify(text: string): string {\n return text\n .toLowerCase()\n .normalize(\"NFKD\")\n .replace(/[̀-ͯ]/g, \"\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n }\n\n private async buildUpdateData(\n page: WbPage,\n translations: TranslatedData\n ): Promise<{ properties: Record<string, any>; bindings: Record<string, any> }> {\n const properties: Record<string, any> = { ...page.properties };\n const bindings: Record<string, any> = structuredClone(page.bindings);\n\n const translatedPathSlug = translations.properties[\"pathSlug\"];\n delete translations.properties[\"pathSlug\"];\n\n for (const [key, value] of Object.entries(translations.properties)) {\n properties[key] = value;\n }\n\n if (translatedPathSlug) {\n const slug = this.slugify(translatedPathSlug);\n if (slug) {\n const languageCode = page.properties[\"language\"];\n properties[\"path\"] = `/${languageCode}/${slug}`;\n }\n }\n\n for (const [key, binding] of Object.entries(translations.bindings)) {\n if (binding.type === \"lexical\") {\n const state = await this.lexicalParser.parse(binding.value);\n if (state) {\n set(bindings, `${key}.static.state`, JSON.stringify(state));\n set(bindings, `${key}.static.html`, binding.value);\n }\n } else {\n set(bindings, `${key}.static`, binding.value);\n }\n }\n\n return { properties, bindings };\n }\n}\n\nexport const WbTranslatePageDecorator = TranslatePageUseCase.createDecorator({\n decorator: WbTranslatePageDecoratorImpl,\n dependencies: [\n GetDefaultLanguageUseCase,\n GetSettingsUseCase,\n Ai,\n Encryption,\n LexicalParser,\n UpdatePageRepository\n ]\n});\n"],"names":["WbTranslatePageDecoratorImpl","getDefaultLanguage","getSettings","ai","encryption","lexicalParser","updatePageRepository","decoratee","params","result","page","sourceLanguage","translations","Result","updateData","updateResult","targetLanguage","settingsResult","settings","firstProvider","apiKey","properties","bindings","input","JSON","elementId","element","inputs","inputName","text","structuredClone","translatedPathSlug","key","value","Object","slug","languageCode","binding","state","set","WbTranslatePageDecorator","TranslatePageUseCase","GetDefaultLanguageUseCase","GetSettingsUseCase","Ai","Encryption","LexicalParser","UpdatePageRepository"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface ILexicalParser {
2
+ parse(html: string): Promise<Record<string, unknown> | null>;
3
+ }
4
+ export declare const LexicalParser: import("@webiny/di").Abstraction<ILexicalParser>;
5
+ export declare namespace LexicalParser {
6
+ type Interface = ILexicalParser;
7
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const LexicalParser = createAbstraction("AiPowerUps/WbTranslatePage/LexicalParser");
3
+ export { LexicalParser };
4
+
5
+ //# sourceMappingURL=LexicalParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/WbTranslatePage/abstractions/LexicalParser.js","sources":["../../../../../src/api/features/WbTranslatePage/abstractions/LexicalParser.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\nexport interface ILexicalParser {\n parse(html: string): Promise<Record<string, unknown> | null>;\n}\n\nexport const LexicalParser = createAbstraction<ILexicalParser>(\n \"AiPowerUps/WbTranslatePage/LexicalParser\"\n);\n\nexport namespace LexicalParser {\n export type Interface = ILexicalParser;\n}\n"],"names":["LexicalParser","createAbstraction"],"mappings":";AAMO,MAAMA,gBAAgBC,kBACzB"}
@@ -0,0 +1,4 @@
1
+ export declare const WbTranslatePageFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,13 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { WbTranslatePageDecorator } from "./WbTranslatePageDecorator.js";
3
+ import { LexicalParser } from "./LexicalParser.js";
4
+ const WbTranslatePageFeature = createFeature({
5
+ name: "AiPowerUps/WbTranslatePage",
6
+ register (container) {
7
+ container.register(LexicalParser).inSingletonScope();
8
+ container.registerDecorator(WbTranslatePageDecorator);
9
+ }
10
+ });
11
+ export { WbTranslatePageFeature };
12
+
13
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/WbTranslatePage/feature.js","sources":["../../../../src/api/features/WbTranslatePage/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { WbTranslatePageDecorator } from \"./WbTranslatePageDecorator.js\";\nimport { LexicalParser } from \"./LexicalParser.js\";\n\nexport const WbTranslatePageFeature = createFeature({\n name: \"AiPowerUps/WbTranslatePage\",\n register(container) {\n container.register(LexicalParser).inSingletonScope();\n container.registerDecorator(WbTranslatePageDecorator);\n }\n});\n"],"names":["WbTranslatePageFeature","createFeature","container","LexicalParser","WbTranslatePageDecorator"],"mappings":";;;AAIO,MAAMA,yBAAyBC,cAAc;IAChD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,eAAe,gBAAgB;QAClDD,UAAU,iBAAiB,CAACE;IAChC;AACJ"}
@@ -0,0 +1,2 @@
1
+ export { LexicalParser } from "./abstractions/LexicalParser.js";
2
+ export { WbTranslatePageFeature } from "./feature.js";
@@ -0,0 +1,2 @@
1
+ export { LexicalParser } from "./abstractions/LexicalParser.js";
2
+ export { WbTranslatePageFeature } from "./feature.js";
@@ -2,6 +2,7 @@ import { CoreGraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractio
2
2
  import { ErrorResponse, Response } from "@webiny/api-graphql/responses.js";
3
3
  import { Ai } from "@webiny/api-core/features/ai/index.js";
4
4
  import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
5
+ import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
5
6
  import { GetSettingsUseCase } from "../features/GetSettings/index.js";
6
7
  import { UpdateSettingsUseCase } from "../features/UpdateSettings/index.js";
7
8
  import { AiPowerUpsSettingsGraphQLMapper } from "./abstractions.js";
@@ -44,6 +45,7 @@ class BaseGraphQLSchemaImpl {
44
45
  excludedFileIds: [String!]
45
46
  readerPersonaId: String
46
47
  writerPersonaId: String
48
+ additionalFileIds: [String!]
47
49
  ): JSON!
48
50
  generateEntryContent(
49
51
  prompt: String!
@@ -52,6 +54,7 @@ class BaseGraphQLSchemaImpl {
52
54
  excludedFileIds: [String!]
53
55
  readerPersonaId: String
54
56
  writerPersonaId: String
57
+ additionalFileIds: [String!]
55
58
  ): JSON!
56
59
  }
57
60
 
@@ -105,7 +108,8 @@ class BaseGraphQLSchemaImpl {
105
108
  projectId: args.projectId ?? null,
106
109
  excludedFileIds: args.excludedFileIds ?? null,
107
110
  readerPersonaId: args.readerPersonaId ?? null,
108
- writerPersonaId: args.writerPersonaId ?? null
111
+ writerPersonaId: args.writerPersonaId ?? null,
112
+ additionalFileIds: args.additionalFileIds ?? null
109
113
  }
110
114
  });
111
115
  if (result.isFail()) throw result.error;
@@ -117,9 +121,11 @@ class BaseGraphQLSchemaImpl {
117
121
  builder.addResolver({
118
122
  path: "AiPowerUpsMutation.generateEntryContent",
119
123
  dependencies: [
120
- TaskService
124
+ TaskService,
125
+ FeatureFlags
121
126
  ],
122
- resolver: (taskService)=>async ({ args })=>{
127
+ resolver: (taskService, featureFlags)=>async ({ args })=>{
128
+ if (!featureFlags.get().isEnabled("aiPowerups.cms.entryGeneration")) throw new Error("AI entry generation cannot be used because your project license does not permit it.");
123
129
  const result = await taskService.trigger({
124
130
  definition: CMS_GENERATE_ENTRY_CONTENT_TASK_ID,
125
131
  input: {
@@ -128,7 +134,8 @@ class BaseGraphQLSchemaImpl {
128
134
  projectId: args.projectId ?? null,
129
135
  excludedFileIds: args.excludedFileIds ?? null,
130
136
  readerPersonaId: args.readerPersonaId ?? null,
131
- writerPersonaId: args.writerPersonaId ?? null
137
+ writerPersonaId: args.writerPersonaId ?? null,
138
+ additionalFileIds: args.additionalFileIds ?? null
132
139
  }
133
140
  });
134
141
  if (result.isFail()) throw result.error;
@@ -1 +1 @@
1
- {"version":3,"file":"api/graphql/BaseGraphQLSchema.js","sources":["../../../src/api/graphql/BaseGraphQLSchema.ts"],"sourcesContent":["import { CoreGraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.core.js\";\nimport { Response, ErrorResponse } from \"@webiny/api-graphql/responses.js\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { GetSettingsUseCase } from \"~/api/features/GetSettings/index.js\";\nimport { UpdateSettingsUseCase } from \"~/api/features/UpdateSettings/index.js\";\nimport { AiPowerUpsSettingsGraphQLMapper } from \"./abstractions.js\";\nimport {\n WB_GENERATE_PAGE_CONTENT_TASK_ID,\n type IWbGeneratePageContentTaskInput\n} from \"~/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js\";\nimport {\n CMS_GENERATE_ENTRY_CONTENT_TASK_ID,\n type ICmsGenerateEntryContentTaskInput\n} from \"~/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js\";\n\nclass BaseGraphQLSchemaImpl implements CoreGraphQLSchemaFactory.Interface {\n async execute(\n builder: CoreGraphQLSchemaFactory.SchemaBuilder\n ): Promise<CoreGraphQLSchemaFactory.SchemaBuilder> {\n builder.addTypeDefs(/* GraphQL */ `\n type AiModel {\n providerId: String!\n providerName: String!\n modelId: String!\n modelName: String!\n }\n\n type AiPowerUpsQuery {\n listModels: [AiModel!]!\n getSettings: JSON\n }\n\n type AiPowerUpsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type AiPowerUpsSettingsResponse {\n data: JSON\n error: AiPowerUpsError\n }\n\n type AiPowerUpsMutation {\n updateSettings(input: JSON!): AiPowerUpsSettingsResponse!\n generatePageContent(\n prompt: String!\n components: JSON!\n tools: JSON!\n projectId: String\n excludedFileIds: [String!]\n readerPersonaId: String\n writerPersonaId: String\n ): JSON!\n generateEntryContent(\n prompt: String!\n modelId: String!\n projectId: String\n excludedFileIds: [String!]\n readerPersonaId: String\n writerPersonaId: String\n ): JSON!\n }\n\n extend type Query {\n aiPowerUps: AiPowerUpsQuery\n }\n\n extend type Mutation {\n aiPowerUps: AiPowerUpsMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"Mutation.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.listModels\",\n dependencies: [Ai],\n resolver: (ai: Ai.Interface) => {\n return async () => ai.listModels();\n }\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.getSettings\",\n dependencies: [GetSettingsUseCase, AiPowerUpsSettingsGraphQLMapper],\n resolver: (\n useCase: GetSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async () => {\n const result = await useCase.execute();\n if (result.isFail()) {\n throw result.error;\n }\n\n return mapper.toApi(result.value);\n };\n }\n });\n\n builder.addResolver<IWbGeneratePageContentTaskInput>({\n path: \"AiPowerUpsMutation.generatePageContent\",\n dependencies: [TaskService],\n resolver: (taskService: TaskService.Interface) => {\n return async ({ args }) => {\n const result = await taskService.trigger<IWbGeneratePageContentTaskInput>({\n definition: WB_GENERATE_PAGE_CONTENT_TASK_ID,\n input: {\n prompt: args.prompt,\n components: args.components,\n tools: args.tools,\n projectId: args.projectId ?? null,\n excludedFileIds: args.excludedFileIds ?? null,\n readerPersonaId: args.readerPersonaId ?? null,\n writerPersonaId: args.writerPersonaId ?? null\n }\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return { id: result.value.id };\n };\n }\n });\n\n builder.addResolver<ICmsGenerateEntryContentTaskInput>({\n path: \"AiPowerUpsMutation.generateEntryContent\",\n dependencies: [TaskService],\n resolver: (taskService: TaskService.Interface) => {\n return async ({ args }) => {\n const result = await taskService.trigger<ICmsGenerateEntryContentTaskInput>({\n definition: CMS_GENERATE_ENTRY_CONTENT_TASK_ID,\n input: {\n prompt: args.prompt,\n modelId: args.modelId,\n projectId: args.projectId ?? null,\n excludedFileIds: args.excludedFileIds ?? null,\n readerPersonaId: args.readerPersonaId ?? null,\n writerPersonaId: args.writerPersonaId ?? null\n }\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return { id: result.value.id };\n };\n }\n });\n\n builder.addResolver<{ input: Record<string, unknown> }>({\n path: \"AiPowerUpsMutation.updateSettings\",\n dependencies: [\n GetSettingsUseCase,\n UpdateSettingsUseCase,\n AiPowerUpsSettingsGraphQLMapper\n ],\n resolver: (\n getSettings: GetSettingsUseCase.Interface,\n updateSettings: UpdateSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async ({ args }) => {\n const currentResult = await getSettings.execute();\n if (currentResult.isFail()) {\n return new ErrorResponse(currentResult.error);\n }\n\n const assembled = await mapper.fromApi(args.input, currentResult.value);\n const result = await updateSettings.execute(assembled);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(await mapper.toApi(result.value));\n };\n }\n });\n\n return builder;\n }\n}\n\nexport const BaseGraphQLSchema = CoreGraphQLSchemaFactory.createImplementation({\n implementation: BaseGraphQLSchemaImpl,\n dependencies: []\n});\n"],"names":["BaseGraphQLSchemaImpl","builder","Ai","ai","GetSettingsUseCase","AiPowerUpsSettingsGraphQLMapper","useCase","mapper","result","TaskService","taskService","args","WB_GENERATE_PAGE_CONTENT_TASK_ID","CMS_GENERATE_ENTRY_CONTENT_TASK_ID","UpdateSettingsUseCase","getSettings","updateSettings","currentResult","ErrorResponse","assembled","Response","BaseGraphQLSchema","CoreGraphQLSchemaFactory"],"mappings":"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"}
1
+ {"version":3,"file":"api/graphql/BaseGraphQLSchema.js","sources":["../../../src/api/graphql/BaseGraphQLSchema.ts"],"sourcesContent":["import { CoreGraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.core.js\";\nimport { Response, ErrorResponse } from \"@webiny/api-graphql/responses.js\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { FeatureFlags } from \"@webiny/api-core/features/featureFlags/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/api/features/GetSettings/index.js\";\nimport { UpdateSettingsUseCase } from \"~/api/features/UpdateSettings/index.js\";\nimport { AiPowerUpsSettingsGraphQLMapper } from \"./abstractions.js\";\nimport {\n WB_GENERATE_PAGE_CONTENT_TASK_ID,\n type IWbGeneratePageContentTaskInput\n} from \"~/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js\";\nimport {\n CMS_GENERATE_ENTRY_CONTENT_TASK_ID,\n type ICmsGenerateEntryContentTaskInput\n} from \"~/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js\";\n\nclass BaseGraphQLSchemaImpl implements CoreGraphQLSchemaFactory.Interface {\n async execute(\n builder: CoreGraphQLSchemaFactory.SchemaBuilder\n ): Promise<CoreGraphQLSchemaFactory.SchemaBuilder> {\n builder.addTypeDefs(/* GraphQL */ `\n type AiModel {\n providerId: String!\n providerName: String!\n modelId: String!\n modelName: String!\n }\n\n type AiPowerUpsQuery {\n listModels: [AiModel!]!\n getSettings: JSON\n }\n\n type AiPowerUpsError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type AiPowerUpsSettingsResponse {\n data: JSON\n error: AiPowerUpsError\n }\n\n type AiPowerUpsMutation {\n updateSettings(input: JSON!): AiPowerUpsSettingsResponse!\n generatePageContent(\n prompt: String!\n components: JSON!\n tools: JSON!\n projectId: String\n excludedFileIds: [String!]\n readerPersonaId: String\n writerPersonaId: String\n additionalFileIds: [String!]\n ): JSON!\n generateEntryContent(\n prompt: String!\n modelId: String!\n projectId: String\n excludedFileIds: [String!]\n readerPersonaId: String\n writerPersonaId: String\n additionalFileIds: [String!]\n ): JSON!\n }\n\n extend type Query {\n aiPowerUps: AiPowerUpsQuery\n }\n\n extend type Mutation {\n aiPowerUps: AiPowerUpsMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"Mutation.aiPowerUps\",\n resolver: () => () => ({})\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.listModels\",\n dependencies: [Ai],\n resolver: (ai: Ai.Interface) => {\n return async () => ai.listModels();\n }\n });\n\n builder.addResolver({\n path: \"AiPowerUpsQuery.getSettings\",\n dependencies: [GetSettingsUseCase, AiPowerUpsSettingsGraphQLMapper],\n resolver: (\n useCase: GetSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async () => {\n const result = await useCase.execute();\n if (result.isFail()) {\n throw result.error;\n }\n\n return mapper.toApi(result.value);\n };\n }\n });\n\n builder.addResolver<IWbGeneratePageContentTaskInput>({\n path: \"AiPowerUpsMutation.generatePageContent\",\n dependencies: [TaskService],\n resolver: (taskService: TaskService.Interface) => {\n return async ({ args }) => {\n const result = await taskService.trigger<IWbGeneratePageContentTaskInput>({\n definition: WB_GENERATE_PAGE_CONTENT_TASK_ID,\n input: {\n prompt: args.prompt,\n components: args.components,\n tools: args.tools,\n projectId: args.projectId ?? null,\n excludedFileIds: args.excludedFileIds ?? null,\n readerPersonaId: args.readerPersonaId ?? null,\n writerPersonaId: args.writerPersonaId ?? null,\n additionalFileIds: args.additionalFileIds ?? null\n }\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return { id: result.value.id };\n };\n }\n });\n\n builder.addResolver<ICmsGenerateEntryContentTaskInput>({\n path: \"AiPowerUpsMutation.generateEntryContent\",\n dependencies: [TaskService, FeatureFlags],\n resolver: (\n taskService: TaskService.Interface,\n featureFlags: FeatureFlags.Interface\n ) => {\n return async ({ args }) => {\n if (!featureFlags.get().isEnabled(\"aiPowerups.cms.entryGeneration\")) {\n throw new Error(\n \"AI entry generation cannot be used because your project license does not permit it.\"\n );\n }\n\n const result = await taskService.trigger<ICmsGenerateEntryContentTaskInput>({\n definition: CMS_GENERATE_ENTRY_CONTENT_TASK_ID,\n input: {\n prompt: args.prompt,\n modelId: args.modelId,\n projectId: args.projectId ?? null,\n excludedFileIds: args.excludedFileIds ?? null,\n readerPersonaId: args.readerPersonaId ?? null,\n writerPersonaId: args.writerPersonaId ?? null,\n additionalFileIds: args.additionalFileIds ?? null\n }\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return { id: result.value.id };\n };\n }\n });\n\n builder.addResolver<{ input: Record<string, unknown> }>({\n path: \"AiPowerUpsMutation.updateSettings\",\n dependencies: [\n GetSettingsUseCase,\n UpdateSettingsUseCase,\n AiPowerUpsSettingsGraphQLMapper\n ],\n resolver: (\n getSettings: GetSettingsUseCase.Interface,\n updateSettings: UpdateSettingsUseCase.Interface,\n mapper: AiPowerUpsSettingsGraphQLMapper.Interface\n ) => {\n return async ({ args }) => {\n const currentResult = await getSettings.execute();\n if (currentResult.isFail()) {\n return new ErrorResponse(currentResult.error);\n }\n\n const assembled = await mapper.fromApi(args.input, currentResult.value);\n const result = await updateSettings.execute(assembled);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(await mapper.toApi(result.value));\n };\n }\n });\n\n return builder;\n }\n}\n\nexport const BaseGraphQLSchema = CoreGraphQLSchemaFactory.createImplementation({\n implementation: BaseGraphQLSchemaImpl,\n dependencies: []\n});\n"],"names":["BaseGraphQLSchemaImpl","builder","Ai","ai","GetSettingsUseCase","AiPowerUpsSettingsGraphQLMapper","useCase","mapper","result","TaskService","taskService","args","WB_GENERATE_PAGE_CONTENT_TASK_ID","FeatureFlags","featureFlags","Error","CMS_GENERATE_ENTRY_CONTENT_TASK_ID","UpdateSettingsUseCase","getSettings","updateSettings","currentResult","ErrorResponse","assembled","Response","BaseGraphQLSchema","CoreGraphQLSchemaFactory"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { CoreGraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.core.js";
2
+ declare class CmsCompareEntryRevisionsSchemaImpl implements CoreGraphQLSchemaFactory.Interface {
3
+ execute(builder: CoreGraphQLSchemaFactory.SchemaBuilder): Promise<CoreGraphQLSchemaFactory.SchemaBuilder>;
4
+ }
5
+ export declare const CmsCompareEntryRevisionsSchema: typeof CmsCompareEntryRevisionsSchemaImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-graphql/graphql/abstractions.core.js").ICoreGraphQLSchemaFactory>;
7
+ };
8
+ export {};
@@ -0,0 +1,68 @@
1
+ import { CoreGraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.core.js";
2
+ import { CmsCompareEntryRevisionsUseCase } from "../features/CmsCompareEntryRevisions/abstractions.js";
3
+ class CmsCompareEntryRevisionsSchemaImpl {
4
+ async execute(builder) {
5
+ builder.addTypeDefs(`
6
+ type CompareRevisionsResult {
7
+ html: String
8
+ summary: String
9
+ }
10
+
11
+ type CompareRevisionsError {
12
+ message: String
13
+ code: String
14
+ data: JSON
15
+ }
16
+
17
+ type CompareRevisionsResponse {
18
+ data: CompareRevisionsResult
19
+ error: CompareRevisionsError
20
+ }
21
+
22
+ extend type CmsQuery {
23
+ compareEntryRevisions(
24
+ modelId: String!
25
+ revisionId1: String!
26
+ revisionId2: String!
27
+ ): CompareRevisionsResponse!
28
+ }
29
+ `);
30
+ builder.addResolver({
31
+ path: "CmsQuery.compareEntryRevisions",
32
+ dependencies: [
33
+ CmsCompareEntryRevisionsUseCase
34
+ ],
35
+ resolver: (useCase)=>async ({ args })=>{
36
+ try {
37
+ const result = await useCase.execute({
38
+ modelId: args.modelId,
39
+ revisionId1: args.revisionId1,
40
+ revisionId2: args.revisionId2
41
+ });
42
+ return {
43
+ data: result,
44
+ error: null
45
+ };
46
+ } catch (e) {
47
+ const message = e instanceof Error ? e.message : "Unknown error";
48
+ return {
49
+ data: null,
50
+ error: {
51
+ message,
52
+ code: "COMPARE_REVISIONS_ERROR",
53
+ data: null
54
+ }
55
+ };
56
+ }
57
+ }
58
+ });
59
+ return builder;
60
+ }
61
+ }
62
+ const CmsCompareEntryRevisionsSchema = CoreGraphQLSchemaFactory.createImplementation({
63
+ implementation: CmsCompareEntryRevisionsSchemaImpl,
64
+ dependencies: []
65
+ });
66
+ export { CmsCompareEntryRevisionsSchema };
67
+
68
+ //# sourceMappingURL=CmsCompareEntryRevisionsSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/graphql/CmsCompareEntryRevisionsSchema.js","sources":["../../../src/api/graphql/CmsCompareEntryRevisionsSchema.ts"],"sourcesContent":["import { CoreGraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.core.js\";\nimport { CmsCompareEntryRevisionsUseCase } from \"~/api/features/CmsCompareEntryRevisions/abstractions.js\";\n\nclass CmsCompareEntryRevisionsSchemaImpl implements CoreGraphQLSchemaFactory.Interface {\n async execute(\n builder: CoreGraphQLSchemaFactory.SchemaBuilder\n ): Promise<CoreGraphQLSchemaFactory.SchemaBuilder> {\n builder.addTypeDefs(/* GraphQL */ `\n type CompareRevisionsResult {\n html: String\n summary: String\n }\n\n type CompareRevisionsError {\n message: String\n code: String\n data: JSON\n }\n\n type CompareRevisionsResponse {\n data: CompareRevisionsResult\n error: CompareRevisionsError\n }\n\n extend type CmsQuery {\n compareEntryRevisions(\n modelId: String!\n revisionId1: String!\n revisionId2: String!\n ): CompareRevisionsResponse!\n }\n `);\n\n builder.addResolver({\n path: \"CmsQuery.compareEntryRevisions\",\n dependencies: [CmsCompareEntryRevisionsUseCase],\n resolver: (useCase: CmsCompareEntryRevisionsUseCase.Interface) => {\n return async ({\n args\n }: {\n args: {\n modelId: string;\n revisionId1: string;\n revisionId2: string;\n };\n }) => {\n try {\n const result = await useCase.execute({\n modelId: args.modelId,\n revisionId1: args.revisionId1,\n revisionId2: args.revisionId2\n });\n return { data: result, error: null };\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : \"Unknown error\";\n return {\n data: null,\n error: {\n message,\n code: \"COMPARE_REVISIONS_ERROR\",\n data: null\n }\n };\n }\n };\n }\n });\n\n return builder;\n }\n}\n\nexport const CmsCompareEntryRevisionsSchema = CoreGraphQLSchemaFactory.createImplementation({\n implementation: CmsCompareEntryRevisionsSchemaImpl,\n dependencies: []\n});\n"],"names":["CmsCompareEntryRevisionsSchemaImpl","builder","CmsCompareEntryRevisionsUseCase","useCase","args","result","e","message","Error","CmsCompareEntryRevisionsSchema","CoreGraphQLSchemaFactory"],"mappings":";;AAGA,MAAMA;IACF,MAAM,QACFC,OAA+C,EACA;QAC/CA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;QAwBnC,CAAC;QAEDA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,cAAc;gBAACC;aAAgC;YAC/C,UAAU,CAACC,UACA,OAAO,EACVC,IAAI,EAOP;oBACG,IAAI;wBACA,MAAMC,SAAS,MAAMF,QAAQ,OAAO,CAAC;4BACjC,SAASC,KAAK,OAAO;4BACrB,aAAaA,KAAK,WAAW;4BAC7B,aAAaA,KAAK,WAAW;wBACjC;wBACA,OAAO;4BAAE,MAAMC;4BAAQ,OAAO;wBAAK;oBACvC,EAAE,OAAOC,GAAY;wBACjB,MAAMC,UAAUD,aAAaE,QAAQF,EAAE,OAAO,GAAG;wBACjD,OAAO;4BACH,MAAM;4BACN,OAAO;gCACHC;gCACA,MAAM;gCACN,MAAM;4BACV;wBACJ;oBACJ;gBACJ;QAER;QAEA,OAAON;IACX;AACJ;AAEO,MAAMQ,iCAAiCC,yBAAyB,oBAAoB,CAAC;IACxF,gBAAgBV;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1 @@
1
+ export { GetSettingsFeature } from "../../admin/features/settings/getSettings/feature.js";
@@ -0,0 +1 @@
1
+ export { GetSettingsFeature } from "../../admin/features/settings/getSettings/feature.js";
@@ -0,0 +1,2 @@
1
+ export { CmsGenerateEntryContentUseCase } from "../../api/features/CmsGenerateEntryContent/abstractions.js";
2
+ export { GetSettingsUseCase } from "../../api/features/GetSettings/abstractions.js";
@@ -0,0 +1,2 @@
1
+ export { CmsGenerateEntryContentUseCase } from "../../api/features/CmsGenerateEntryContent/abstractions.js";
2
+ export { GetSettingsUseCase } from "../../api/features/GetSettings/abstractions.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/ai-powerups",
3
- "version": "6.6.0-alpha.0",
3
+ "version": "6.6.0-alpha.2",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -18,39 +18,46 @@
18
18
  "author": "Webiny Ltd.",
19
19
  "license": "Webiny Enterprise",
20
20
  "dependencies": {
21
- "@webiny/admin-ui": "6.6.0-alpha.0",
22
- "@webiny/api-core": "6.6.0-alpha.0",
23
- "@webiny/api-file-manager": "6.6.0-alpha.0",
24
- "@webiny/api-headless-cms": "6.6.0-alpha.0",
25
- "@webiny/api-websockets": "6.6.0-alpha.0",
26
- "@webiny/app": "6.6.0-alpha.0",
27
- "@webiny/app-admin": "6.6.0-alpha.0",
28
- "@webiny/app-headless-cms": "6.6.0-alpha.0",
29
- "@webiny/app-website-builder": "6.6.0-alpha.0",
30
- "@webiny/app-websockets": "6.6.0-alpha.0",
31
- "@webiny/background-tasks": "6.6.0-alpha.0",
32
- "@webiny/feature": "6.6.0-alpha.0",
33
- "@webiny/icons": "6.6.0-alpha.0",
34
- "@webiny/project": "6.6.0-alpha.0",
35
- "@webiny/project-aws": "6.6.0-alpha.0",
36
- "@webiny/utils": "6.6.0-alpha.0",
37
- "ai": "7.0.40",
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",
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",
43
+ "ai": "7.0.73",
38
44
  "front-matter": "4.0.2",
45
+ "happy-dom": "20.11.6",
39
46
  "lodash": "4.18.1",
40
- "mobx": "6.16.1",
41
- "mobx-react-lite": "4.1.1",
47
+ "mobx": "7.0.3",
48
+ "mobx-react-lite": "5.0.3",
42
49
  "react": "18.3.1",
43
50
  "react-dom": "18.3.1",
44
51
  "zod": "4.4.3"
45
52
  },
46
53
  "devDependencies": {
47
- "@webiny/api-graphql": "6.6.0-alpha.0",
48
- "@webiny/build-tools": "6.6.0-alpha.0",
49
- "@webiny/project-utils": "6.6.0-alpha.0",
50
- "@webiny/wcp": "6.6.0-alpha.0",
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",
51
58
  "rimraf": "6.1.3",
52
59
  "typescript": "7.0.2",
53
- "vitest": "4.1.10"
60
+ "vitest": "4.1.11"
54
61
  },
55
62
  "publishConfig": {
56
63
  "access": "public"