@webiny/ai-powerups 6.6.0-alpha.0 → 6.6.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AiPowerups.js +2 -2
- package/AiPowerups.js.map +1 -1
- package/admin/Extension.js +10 -2
- package/admin/Extension.js.map +1 -1
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.d.ts +12 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js +46 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsGateway.js.map +1 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.d.ts +11 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js +18 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsRepository.js.map +1 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.d.ts +11 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js +18 -0
- package/admin/features/compareEntryRevisions/CompareEntryRevisionsUseCase.js.map +1 -0
- package/admin/features/compareEntryRevisions/abstractions.d.ts +32 -0
- package/admin/features/compareEntryRevisions/abstractions.js +7 -0
- package/admin/features/compareEntryRevisions/abstractions.js.map +1 -0
- package/admin/features/compareEntryRevisions/feature.d.ts +1 -0
- package/admin/features/compareEntryRevisions/feature.js +15 -0
- package/admin/features/compareEntryRevisions/feature.js.map +1 -0
- package/admin/features/compareEntryRevisions/index.d.ts +2 -0
- package/admin/features/compareEntryRevisions/index.js +2 -0
- package/admin/features/feature.js +2 -0
- package/admin/features/feature.js.map +1 -1
- package/admin/features/generateEntryContent/GenerateEntryContentGateway.js +2 -0
- package/admin/features/generateEntryContent/GenerateEntryContentGateway.js.map +1 -1
- package/admin/features/generateEntryContent/abstractions.d.ts +1 -0
- package/admin/features/generateEntryContent/abstractions.js.map +1 -1
- package/admin/features/generatePageContent/GeneratePageContentGateway.js +2 -0
- package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -1
- package/admin/features/generatePageContent/abstractions.d.ts +1 -0
- package/admin/features/generatePageContent/abstractions.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +2 -2
- package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.d.ts +20 -0
- package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js +108 -0
- package/admin/presentation/AiPromptFormFactory/AiPromptFormFactory.js.map +1 -0
- package/admin/presentation/AiPromptFormFactory/abstractions.d.ts +14 -0
- package/admin/presentation/AiPromptFormFactory/abstractions.js +5 -0
- package/admin/presentation/AiPromptFormFactory/abstractions.js.map +1 -0
- package/admin/presentation/AiPromptFormFactory/feature.d.ts +1 -0
- package/admin/presentation/AiPromptFormFactory/feature.js +11 -0
- package/admin/presentation/AiPromptFormFactory/feature.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.d.ts +9 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js +118 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDialog.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.d.ts +9 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js +72 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsDrawer.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.d.ts +4 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js +21 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsMenuItem.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.d.ts +2 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js +17 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsOverlays.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.d.ts +25 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js +90 -0
- package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/Extension.d.ts +2 -0
- package/admin/presentation/CmsCompareEntryRevisions/Extension.js +16 -0
- package/admin/presentation/CmsCompareEntryRevisions/Extension.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/abstractions.d.ts +29 -0
- package/admin/presentation/CmsCompareEntryRevisions/abstractions.js +5 -0
- package/admin/presentation/CmsCompareEntryRevisions/abstractions.js.map +1 -0
- package/admin/presentation/CmsCompareEntryRevisions/feature.d.ts +3 -0
- package/admin/presentation/CmsCompareEntryRevisions/feature.js +17 -0
- package/admin/presentation/CmsCompareEntryRevisions/feature.js.map +1 -0
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentButton.d.ts +2 -2
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentDialog.d.ts +2 -2
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.d.ts +4 -12
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js +12 -94
- package/admin/presentation/CmsContentGeneration/CmsGenerateContentPresenter.js.map +1 -1
- package/admin/presentation/CmsContentGeneration/Extension.d.ts +1 -1
- package/admin/presentation/CmsContentGeneration/Extension.js +9 -5
- package/admin/presentation/CmsContentGeneration/Extension.js.map +1 -1
- package/admin/presentation/CmsEntryWizard/CmsEntryWizard.d.ts +4 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js +113 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizard.js.map +1 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.d.ts +4 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js +19 -0
- package/admin/presentation/CmsEntryWizard/CmsEntryWizardGate.js.map +1 -0
- package/admin/presentation/CmsEntryWizard/Extension.d.ts +2 -0
- package/admin/presentation/CmsEntryWizard/Extension.js +10 -0
- package/admin/presentation/CmsEntryWizard/Extension.js.map +1 -0
- package/admin/presentation/ProvidersSettings.js +1 -1
- package/admin/presentation/ProvidersSettings.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +2 -2
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +2 -2
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +4 -12
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +12 -94
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -1
- package/api/Extension.js +8 -0
- package/api/Extension.js.map +1 -1
- package/api/features/AiChatProvider/PowerUpsAiChatProvider.d.ts +24 -0
- package/api/features/AiChatProvider/PowerUpsAiChatProvider.js +31 -0
- package/api/features/AiChatProvider/PowerUpsAiChatProvider.js.map +1 -0
- package/api/features/AiChatProvider/feature.d.ts +9 -0
- package/api/features/AiChatProvider/feature.js +11 -0
- package/api/features/AiChatProvider/feature.js.map +1 -0
- package/api/features/AiChatProvider/index.d.ts +2 -0
- package/api/features/AiChatProvider/index.js +2 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.d.ts +1 -3
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js +2 -6
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js.map +1 -1
- package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.d.ts +36 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.js +85 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentStreamRoute.js.map +1 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +10 -16
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +27 -102
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -1
- package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.d.ts +18 -0
- package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.js +50 -0
- package/api/features/AiImageEnrichment/ApplyImageEnrichmentUseCase.js.map +1 -0
- package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.d.ts +19 -0
- package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.js +49 -0
- package/api/features/AiImageEnrichment/PrepareImageEnrichmentUseCase.js.map +1 -0
- package/api/features/AiImageEnrichment/abstractions.d.ts +60 -0
- package/api/features/AiImageEnrichment/abstractions.js +12 -0
- package/api/features/AiImageEnrichment/abstractions.js.map +1 -0
- package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.d.ts +12 -0
- package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.js +30 -0
- package/api/features/AiImageEnrichment/buildEnrichmentAiRequest.js.map +1 -0
- package/api/features/AiImageEnrichment/errors.d.ts +26 -0
- package/api/features/AiImageEnrichment/errors.js +28 -0
- package/api/features/AiImageEnrichment/errors.js.map +1 -0
- package/api/features/AiImageEnrichment/feature.js +9 -0
- package/api/features/AiImageEnrichment/feature.js.map +1 -1
- package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.d.ts +6 -0
- package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.js +9 -0
- package/api/features/AiImageEnrichment/imageEnrichmentErrorStatusCode.js.map +1 -0
- package/api/features/AiImageEnrichment/readEnrichmentPartial.d.ts +8 -0
- package/api/features/AiImageEnrichment/readEnrichmentPartial.js +16 -0
- package/api/features/AiImageEnrichment/readEnrichmentPartial.js.map +1 -0
- package/api/features/AiImageEnrichment/streamEvents.d.ts +36 -0
- package/api/features/AiImageEnrichment/streamEvents.js +0 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +8 -1
- package/api/features/AiPromptContext/AiPromptContextBuilder.js +46 -2
- package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -1
- package/api/features/AiPromptContext/abstractions.d.ts +3 -0
- package/api/features/AiPromptContext/abstractions.js +9 -1
- package/api/features/AiPromptContext/abstractions.js.map +1 -1
- package/api/features/AiPromptContext/index.d.ts +1 -1
- package/api/features/AiPromptContext/index.js +1 -1
- package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.d.ts +22 -0
- package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js +136 -0
- package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/abstractions.d.ts +18 -0
- package/api/features/CmsCompareEntryRevisions/abstractions.js +5 -0
- package/api/features/CmsCompareEntryRevisions/abstractions.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/feature.d.ts +4 -0
- package/api/features/CmsCompareEntryRevisions/feature.js +11 -0
- package/api/features/CmsCompareEntryRevisions/feature.js.map +1 -0
- package/api/features/CmsCompareEntryRevisions/index.d.ts +2 -0
- package/api/features/CmsCompareEntryRevisions/index.js +2 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.d.ts +1 -0
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js +20 -10
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentTask.js.map +1 -1
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.d.ts +1 -1
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js +5 -5
- package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js.map +1 -1
- package/api/features/CmsGenerateEntryContent/abstractions.d.ts +10 -3
- package/api/features/CmsGenerateEntryContent/abstractions.js.map +1 -1
- package/api/features/GetSettings/index.d.ts +1 -0
- package/api/features/GetSettings/index.js +1 -0
- package/api/features/Providers/types.d.ts +2 -2
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +1 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +19 -9
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -1
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +4 -3
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -1
- package/api/features/WbGeneratePageContent/abstractions.d.ts +1 -0
- package/api/features/WbGeneratePageContent/abstractions.js.map +1 -1
- package/api/features/WbTranslatePage/LexicalParser.d.ts +10 -0
- package/api/features/WbTranslatePage/LexicalParser.js +37 -0
- package/api/features/WbTranslatePage/LexicalParser.js.map +1 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.d.ts +27 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.js +134 -0
- package/api/features/WbTranslatePage/WbTranslatePageDecorator.js.map +1 -0
- package/api/features/WbTranslatePage/abstractions/LexicalParser.d.ts +7 -0
- package/api/features/WbTranslatePage/abstractions/LexicalParser.js +5 -0
- package/api/features/WbTranslatePage/abstractions/LexicalParser.js.map +1 -0
- package/api/features/WbTranslatePage/feature.d.ts +4 -0
- package/api/features/WbTranslatePage/feature.js +13 -0
- package/api/features/WbTranslatePage/feature.js.map +1 -0
- package/api/features/WbTranslatePage/index.d.ts +2 -0
- package/api/features/WbTranslatePage/index.js +2 -0
- package/api/graphql/BaseGraphQLSchema.js +11 -4
- package/api/graphql/BaseGraphQLSchema.js.map +1 -1
- package/api/graphql/CmsCompareEntryRevisionsSchema.d.ts +8 -0
- package/api/graphql/CmsCompareEntryRevisionsSchema.js +68 -0
- package/api/graphql/CmsCompareEntryRevisionsSchema.js.map +1 -0
- package/exports/admin/ai-powerups.d.ts +1 -0
- package/exports/admin/ai-powerups.js +1 -0
- package/exports/api/ai-powerups.d.ts +2 -0
- package/exports/api/ai-powerups.js +2 -0
- 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 @@
|
|
|
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,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"}
|
|
@@ -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";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/ai-powerups",
|
|
3
|
-
"version": "6.6.0-alpha.
|
|
3
|
+
"version": "6.6.0-alpha.1",
|
|
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.
|
|
22
|
-
"@webiny/
|
|
23
|
-
"@webiny/api-
|
|
24
|
-
"@webiny/api-
|
|
25
|
-
"@webiny/api-
|
|
26
|
-
"@webiny/
|
|
27
|
-
"@webiny/
|
|
28
|
-
"@webiny/app
|
|
29
|
-
"@webiny/app-
|
|
30
|
-
"@webiny/app-
|
|
31
|
-
"@webiny/
|
|
32
|
-
"@webiny/
|
|
33
|
-
"@webiny/
|
|
34
|
-
"@webiny/
|
|
35
|
-
"@webiny/
|
|
36
|
-
"@webiny/
|
|
37
|
-
"
|
|
21
|
+
"@webiny/admin-ui": "6.6.0-alpha.1",
|
|
22
|
+
"@webiny/ai-chat": "6.6.0-alpha.1",
|
|
23
|
+
"@webiny/api-core": "6.6.0-alpha.1",
|
|
24
|
+
"@webiny/api-file-manager": "6.6.0-alpha.1",
|
|
25
|
+
"@webiny/api-headless-cms": "6.6.0-alpha.1",
|
|
26
|
+
"@webiny/api-website-builder": "6.6.0-alpha.1",
|
|
27
|
+
"@webiny/api-websockets": "6.6.0-alpha.1",
|
|
28
|
+
"@webiny/app": "6.6.0-alpha.1",
|
|
29
|
+
"@webiny/app-admin": "6.6.0-alpha.1",
|
|
30
|
+
"@webiny/app-headless-cms": "6.6.0-alpha.1",
|
|
31
|
+
"@webiny/app-website-builder": "6.6.0-alpha.1",
|
|
32
|
+
"@webiny/app-websockets": "6.6.0-alpha.1",
|
|
33
|
+
"@webiny/background-tasks": "6.6.0-alpha.1",
|
|
34
|
+
"@webiny/di": "1.1.0",
|
|
35
|
+
"@webiny/event-handler-core": "6.6.0-alpha.1",
|
|
36
|
+
"@webiny/feature": "6.6.0-alpha.1",
|
|
37
|
+
"@webiny/icons": "6.6.0-alpha.1",
|
|
38
|
+
"@webiny/languages": "6.6.0-alpha.1",
|
|
39
|
+
"@webiny/lexical-converter": "6.6.0-alpha.1",
|
|
40
|
+
"@webiny/project": "6.6.0-alpha.1",
|
|
41
|
+
"@webiny/project-aws": "6.6.0-alpha.1",
|
|
42
|
+
"@webiny/utils": "6.6.0-alpha.1",
|
|
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": "
|
|
41
|
-
"mobx-react-lite": "
|
|
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.
|
|
48
|
-
"@webiny/build-tools": "6.6.0-alpha.
|
|
49
|
-
"@webiny/
|
|
50
|
-
"@webiny/wcp": "6.6.0-alpha.
|
|
54
|
+
"@webiny/api-graphql": "6.6.0-alpha.1",
|
|
55
|
+
"@webiny/build-tools": "6.6.0-alpha.1",
|
|
56
|
+
"@webiny/feature-flags": "6.6.0-alpha.1",
|
|
57
|
+
"@webiny/wcp": "6.6.0-alpha.1",
|
|
51
58
|
"rimraf": "6.1.3",
|
|
52
59
|
"typescript": "7.0.2",
|
|
53
|
-
"vitest": "4.1.
|
|
60
|
+
"vitest": "4.1.11"
|
|
54
61
|
},
|
|
55
62
|
"publishConfig": {
|
|
56
63
|
"access": "public"
|