@webiny/ai-powerups 6.3.0 → 6.4.0-beta.0
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 +8 -9
- package/AiPowerups.js.map +1 -1
- package/admin/Extension.js +28 -26
- package/admin/Extension.js.map +1 -1
- package/admin/domain/errors.d.ts +12 -0
- package/admin/domain/errors.js +21 -0
- package/admin/domain/errors.js.map +1 -0
- package/admin/features/feature.js +13 -12
- package/admin/features/feature.js.map +1 -1
- package/admin/features/generatePageContent/GeneratePageContentGateway.js +35 -16
- package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -1
- package/admin/features/generatePageContent/GeneratePageContentUseCase.js +13 -10
- package/admin/features/generatePageContent/GeneratePageContentUseCase.js.map +1 -1
- package/admin/features/generatePageContent/abstractions.d.ts +4 -0
- package/admin/features/generatePageContent/abstractions.js +3 -2
- package/admin/features/generatePageContent/abstractions.js.map +1 -1
- package/admin/features/generatePageContent/feature.js +7 -6
- package/admin/features/generatePageContent/feature.js.map +1 -1
- package/admin/features/generatePageContent/index.js +1 -3
- package/admin/features/listModels/ListModelsGateway.js +17 -14
- package/admin/features/listModels/ListModelsGateway.js.map +1 -1
- package/admin/features/listModels/ListModelsRepository.js +21 -18
- package/admin/features/listModels/ListModelsRepository.js.map +1 -1
- package/admin/features/listModels/ListModelsUseCase.js +13 -10
- package/admin/features/listModels/ListModelsUseCase.js.map +1 -1
- package/admin/features/listModels/abstractions.js +4 -3
- package/admin/features/listModels/abstractions.js.map +1 -1
- package/admin/features/listModels/feature.js +15 -14
- package/admin/features/listModels/feature.js.map +1 -1
- package/admin/features/listModels/index.js +1 -3
- package/admin/features/settings/getSettings/GetSettingsGateway.js +17 -14
- package/admin/features/settings/getSettings/GetSettingsGateway.js.map +1 -1
- package/admin/features/settings/getSettings/GetSettingsRepository.js +23 -23
- package/admin/features/settings/getSettings/GetSettingsRepository.js.map +1 -1
- package/admin/features/settings/getSettings/GetSettingsUseCase.js +13 -10
- package/admin/features/settings/getSettings/GetSettingsUseCase.js.map +1 -1
- package/admin/features/settings/getSettings/abstractions.js +4 -3
- package/admin/features/settings/getSettings/abstractions.js.map +1 -1
- package/admin/features/settings/getSettings/feature.js +15 -14
- package/admin/features/settings/getSettings/feature.js.map +1 -1
- package/admin/features/settings/getSettings/index.js +1 -3
- package/admin/features/settings/shared/SettingsCache.js +14 -13
- package/admin/features/settings/shared/SettingsCache.js.map +1 -1
- package/admin/features/settings/shared/abstractions.d.ts +32 -0
- package/admin/features/settings/shared/abstractions.js +2 -18
- package/admin/features/settings/shared/abstractions.js.map +1 -1
- package/admin/features/settings/shared/feature.js +11 -10
- package/admin/features/settings/shared/feature.js.map +1 -1
- package/admin/features/settings/shared/index.js +0 -2
- package/admin/features/settings/updateSettings/UpdateSettingsGateway.js +34 -18
- package/admin/features/settings/updateSettings/UpdateSettingsGateway.js.map +1 -1
- package/admin/features/settings/updateSettings/UpdateSettingsRepository.js +17 -13
- package/admin/features/settings/updateSettings/UpdateSettingsRepository.js.map +1 -1
- package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js +13 -10
- package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js.map +1 -1
- package/admin/features/settings/updateSettings/abstractions.js +4 -3
- package/admin/features/settings/updateSettings/abstractions.js.map +1 -1
- package/admin/features/settings/updateSettings/feature.js +15 -14
- package/admin/features/settings/updateSettings/feature.js.map +1 -1
- package/admin/features/settings/updateSettings/index.js +1 -3
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +4 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js +50 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js.map +1 -0
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.d.ts +2 -1
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +133 -129
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/abstractions.d.ts +2 -1
- package/admin/presentation/AiPowerUpsSettings/abstractions.js +2 -1
- package/admin/presentation/AiPowerUpsSettings/abstractions.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/feature.js +20 -16
- package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/index.d.ts +0 -3
- package/admin/presentation/AiPowerUpsSettings/index.js +0 -5
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.js +2 -1
- package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -1
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js +19 -20
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js.map +1 -1
- package/admin/presentation/{PersonasSettings.d.ts → ProjectsSettings.d.ts} +2 -2
- package/admin/presentation/ProjectsSettings.js +56 -0
- package/admin/presentation/ProjectsSettings.js.map +1 -0
- package/admin/presentation/ProvidersSettings.js +39 -33
- package/admin/presentation/ProvidersSettings.js.map +1 -1
- package/admin/presentation/ReaderPersonasSettings.d.ts +11 -0
- package/admin/presentation/ReaderPersonasSettings.js +37 -0
- package/admin/presentation/ReaderPersonasSettings.js.map +1 -0
- package/admin/presentation/WbContentGeneration/Extension.js +15 -16
- package/admin/presentation/WbContentGeneration/Extension.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentButton.js +12 -17
- package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +94 -127
- package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -1
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +19 -5
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +214 -77
- package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -1
- package/admin/presentation/WbContentGeneration/abstractions.d.ts +4 -2
- package/admin/presentation/WbContentGeneration/abstractions.js +2 -1
- package/admin/presentation/WbContentGeneration/abstractions.js.map +1 -1
- package/admin/presentation/WbContentGeneration/decompressGzipBase64.js +10 -11
- package/admin/presentation/WbContentGeneration/decompressGzipBase64.js.map +1 -1
- package/admin/presentation/WbContentGeneration/feature.js +11 -10
- package/admin/presentation/WbContentGeneration/feature.js.map +1 -1
- package/admin/presentation/WriterPersonasSettings.d.ts +11 -0
- package/admin/presentation/WriterPersonasSettings.js +37 -0
- package/admin/presentation/WriterPersonasSettings.js.map +1 -0
- package/admin/routes.d.ts +4 -0
- package/admin/routes.js +10 -0
- package/admin/routes.js.map +1 -0
- package/api/Extension.js +28 -11
- package/api/Extension.js.map +1 -1
- package/api/constants.js +2 -1
- package/api/constants.js.map +1 -1
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.d.ts +11 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js +27 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js.map +1 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +34 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +140 -0
- package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -0
- package/api/features/AiImageEnrichment/feature.d.ts +4 -0
- package/api/features/AiImageEnrichment/feature.js +13 -0
- package/api/features/AiImageEnrichment/feature.js.map +1 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +12 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.js +103 -0
- package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -0
- package/api/features/AiPromptContext/ProjectFileAssembler.d.ts +22 -0
- package/api/features/AiPromptContext/ProjectFileAssembler.js +76 -0
- package/api/features/AiPromptContext/ProjectFileAssembler.js.map +1 -0
- package/api/features/AiPromptContext/ProjectFileCache.d.ts +16 -0
- package/api/features/AiPromptContext/ProjectFileCache.js +61 -0
- package/api/features/AiPromptContext/ProjectFileCache.js.map +1 -0
- package/api/features/AiPromptContext/ProjectSection.d.ts +4 -0
- package/api/features/AiPromptContext/ProjectSection.js +35 -0
- package/api/features/AiPromptContext/ProjectSection.js.map +1 -0
- package/api/features/AiPromptContext/ReadProjectFileTool.d.ts +3 -0
- package/api/features/AiPromptContext/ReadProjectFileTool.js +36 -0
- package/api/features/AiPromptContext/ReadProjectFileTool.js.map +1 -0
- package/api/features/AiPromptContext/ReaderPersonaSection.d.ts +4 -0
- package/api/features/AiPromptContext/ReaderPersonaSection.js +10 -0
- package/api/features/AiPromptContext/ReaderPersonaSection.js.map +1 -0
- package/api/features/AiPromptContext/WriterPersonaSection.d.ts +4 -0
- package/api/features/AiPromptContext/WriterPersonaSection.js +10 -0
- package/api/features/AiPromptContext/WriterPersonaSection.js.map +1 -0
- package/api/features/AiPromptContext/abstractions.d.ts +68 -0
- package/api/features/AiPromptContext/abstractions.js +7 -0
- package/api/features/AiPromptContext/abstractions.js.map +1 -0
- package/api/features/AiPromptContext/feature.d.ts +4 -0
- package/api/features/AiPromptContext/feature.js +15 -0
- package/api/features/AiPromptContext/feature.js.map +1 -0
- package/api/features/AiPromptContext/index.d.ts +1 -0
- package/api/features/AiPromptContext/index.js +1 -0
- package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.d.ts +11 -0
- package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js +34 -0
- package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js.map +1 -0
- package/api/features/ExtractFrontmatter/feature.d.ts +4 -0
- package/api/features/ExtractFrontmatter/feature.js +11 -0
- package/api/features/ExtractFrontmatter/feature.js.map +1 -0
- package/api/features/GetSettings/GetSettingsRepository.d.ts +3 -2
- package/api/features/GetSettings/GetSettingsRepository.js +29 -26
- package/api/features/GetSettings/GetSettingsRepository.js.map +1 -1
- package/api/features/GetSettings/GetSettingsUseCase.js +13 -10
- package/api/features/GetSettings/GetSettingsUseCase.js.map +1 -1
- package/api/features/GetSettings/abstractions.js +3 -2
- package/api/features/GetSettings/abstractions.js.map +1 -1
- package/api/features/GetSettings/feature.js +7 -6
- package/api/features/GetSettings/feature.js.map +1 -1
- package/api/features/GetSettings/index.js +0 -2
- package/api/features/Projects/ProjectsHandler.d.ts +31 -0
- package/api/features/Projects/ProjectsHandler.js +103 -0
- package/api/features/Projects/ProjectsHandler.js.map +1 -0
- package/api/features/Projects/feature.d.ts +4 -0
- package/api/features/Projects/feature.js +11 -0
- package/api/features/Projects/feature.js.map +1 -0
- package/api/features/Projects/types.d.ts +50 -0
- package/api/features/Projects/types.js +0 -0
- package/api/features/Providers/ProvidersGraphQLMapper.js +33 -30
- package/api/features/Providers/ProvidersGraphQLMapper.js.map +1 -1
- package/api/features/Providers/ProvidersHandler.js +67 -64
- package/api/features/Providers/ProvidersHandler.js.map +1 -1
- package/api/features/Providers/feature.js +7 -6
- package/api/features/Providers/feature.js.map +1 -1
- package/api/features/Providers/index.js +0 -3
- package/api/features/Providers/types.js +0 -3
- package/api/features/ReaderPersonas/ReaderPersonasHandler.d.ts +20 -0
- package/api/features/ReaderPersonas/ReaderPersonasHandler.js +43 -0
- package/api/features/ReaderPersonas/ReaderPersonasHandler.js.map +1 -0
- package/api/features/ReaderPersonas/feature.d.ts +4 -0
- package/api/features/ReaderPersonas/feature.js +11 -0
- package/api/features/ReaderPersonas/feature.js.map +1 -0
- package/api/features/ReaderPersonas/index.d.ts +2 -0
- package/api/features/ReaderPersonas/index.js +1 -0
- package/api/features/ReaderPersonas/types.d.ts +24 -0
- package/api/features/ReaderPersonas/types.js +0 -0
- package/api/features/UpdateSettings/UpdateSettingsRepository.d.ts +3 -2
- package/api/features/UpdateSettings/UpdateSettingsRepository.js +59 -62
- package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -1
- package/api/features/UpdateSettings/UpdateSettingsUseCase.js +23 -21
- package/api/features/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
- package/api/features/UpdateSettings/abstractions.js +5 -7
- package/api/features/UpdateSettings/abstractions.js.map +1 -1
- package/api/features/UpdateSettings/errors.d.ts +10 -0
- package/api/features/UpdateSettings/errors.js +14 -0
- package/api/features/UpdateSettings/errors.js.map +1 -0
- package/api/features/UpdateSettings/events.js +16 -11
- package/api/features/UpdateSettings/events.js.map +1 -1
- package/api/features/UpdateSettings/feature.js +7 -6
- package/api/features/UpdateSettings/feature.js.map +1 -1
- package/api/features/UpdateSettings/index.js +1 -3
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +4 -0
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +63 -60
- package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -1
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +5 -3
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +92 -53
- package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -1
- package/api/features/WbGeneratePageContent/abstractions.d.ts +15 -1
- package/api/features/WbGeneratePageContent/abstractions.js +2 -1
- package/api/features/WbGeneratePageContent/abstractions.js.map +1 -1
- package/api/features/WbGeneratePageContent/buildPrompt.d.ts +1 -1
- package/api/features/WbGeneratePageContent/buildPrompt.js +11 -10
- package/api/features/WbGeneratePageContent/buildPrompt.js.map +1 -1
- package/api/features/WbGeneratePageContent/feature.js +7 -6
- package/api/features/WbGeneratePageContent/feature.js.map +1 -1
- package/api/features/WbGeneratePageContent/index.js +0 -2
- package/api/features/WriterPersonas/WriterPersonasHandler.d.ts +20 -0
- package/api/features/WriterPersonas/WriterPersonasHandler.js +43 -0
- package/api/features/WriterPersonas/WriterPersonasHandler.js.map +1 -0
- package/api/features/WriterPersonas/feature.d.ts +4 -0
- package/api/features/WriterPersonas/feature.js +11 -0
- package/api/features/WriterPersonas/feature.js.map +1 -0
- package/api/features/WriterPersonas/index.d.ts +2 -0
- package/api/features/WriterPersonas/index.js +1 -0
- package/api/features/WriterPersonas/types.d.ts +24 -0
- package/api/features/WriterPersonas/types.js +0 -0
- package/api/features/shared/SettingsCache.d.ts +12 -0
- package/api/features/shared/SettingsCache.js +22 -0
- package/api/features/shared/SettingsCache.js.map +1 -0
- package/api/features/shared/abstractions.d.ts +13 -0
- package/api/features/shared/abstractions.js +4 -2
- package/api/features/shared/abstractions.js.map +1 -1
- package/api/features/shared/index.d.ts +3 -1
- package/api/features/shared/index.js +1 -3
- package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js +35 -26
- package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js.map +1 -1
- package/api/graphql/BaseGraphQLSchema.js +98 -81
- package/api/graphql/BaseGraphQLSchema.js.map +1 -1
- package/api/graphql/abstractions.js +2 -1
- package/api/graphql/abstractions.js.map +1 -1
- package/api/types.d.ts +1 -0
- package/api/types.js +1 -4
- package/index.js +0 -2
- package/package.json +26 -24
- package/admin/features/generatePageContent/index.js.map +0 -1
- package/admin/features/listModels/index.js.map +0 -1
- package/admin/features/settings/getSettings/index.js.map +0 -1
- package/admin/features/settings/shared/index.js.map +0 -1
- package/admin/features/settings/updateSettings/index.js.map +0 -1
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.d.ts +0 -2
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.js +0 -11
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.js.map +0 -1
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.d.ts +0 -5
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.js +0 -58
- package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.js.map +0 -1
- package/admin/presentation/AiPowerUpsSettings/index.js.map +0 -1
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.d.ts +0 -1
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.js +0 -12
- package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.js.map +0 -1
- package/admin/presentation/PersonasSettings.js +0 -29
- package/admin/presentation/PersonasSettings.js.map +0 -1
- package/api/features/GetSettings/index.js.map +0 -1
- package/api/features/Providers/index.js.map +0 -1
- package/api/features/Providers/types.js.map +0 -1
- package/api/features/UpdateSettings/index.js.map +0 -1
- package/api/features/WbGeneratePageContent/index.js.map +0 -1
- package/api/features/shared/index.js.map +0 -1
- package/api/types.js.map +0 -1
- package/index.js.map +0 -1
|
@@ -3,74 +3,77 @@ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
|
|
|
3
3
|
import { Masker } from "@webiny/api-core/features/masker/index.js";
|
|
4
4
|
import { AiPowerUpsSettingsGroupHandler } from "../shared/index.js";
|
|
5
5
|
const inputSchema = z.object({
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
presets: z.array(z.object({
|
|
7
|
+
id: z.string().min(1),
|
|
8
|
+
name: z.string().min(1),
|
|
9
|
+
description: z.string().optional(),
|
|
10
|
+
model: z.string().min(1),
|
|
11
|
+
apiKey: z.string().optional()
|
|
12
|
+
}))
|
|
13
13
|
});
|
|
14
14
|
class ProvidersHandlerImpl {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
constructor(encryption, masker){
|
|
16
|
+
this.encryption = encryption;
|
|
17
|
+
this.masker = masker;
|
|
18
|
+
this.name = "providers";
|
|
19
|
+
this.inputSchema = inputSchema;
|
|
20
|
+
}
|
|
21
|
+
mapFromStorage(persisted) {
|
|
22
|
+
if (!persisted || "object" != typeof persisted) return {
|
|
23
|
+
presets: []
|
|
24
|
+
};
|
|
25
|
+
const data = persisted;
|
|
26
|
+
const presets = (data.presets ?? []).map((p)=>({
|
|
27
|
+
id: p.id,
|
|
28
|
+
name: p.name,
|
|
29
|
+
description: p.description,
|
|
30
|
+
model: p.model,
|
|
31
|
+
apiKeyMasked: p.apiKeyMasked ?? "",
|
|
32
|
+
apiKeyEncrypted: p.apiKeyEncrypted ?? ""
|
|
33
|
+
}));
|
|
34
|
+
return {
|
|
35
|
+
presets
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async mapToStorage(internal, existing) {
|
|
39
|
+
const input = internal;
|
|
40
|
+
const existingData = existing;
|
|
41
|
+
const existingPresets = existingData?.presets ?? [];
|
|
42
|
+
const presets = await Promise.all(input.presets.map(async (preset)=>{
|
|
43
|
+
const existingMatch = existingPresets.find((ep)=>ep.id === preset.id);
|
|
44
|
+
let apiKeyEncrypted;
|
|
45
|
+
let apiKeyMasked;
|
|
46
|
+
if (preset.apiKey && preset.apiKey !== existingMatch?.apiKeyMasked) {
|
|
47
|
+
apiKeyEncrypted = this.encryption.encrypt(preset.apiKey);
|
|
48
|
+
apiKeyMasked = this.masker.mask(preset.apiKey, [
|
|
49
|
+
8,
|
|
50
|
+
4
|
|
51
|
+
]);
|
|
52
|
+
} else {
|
|
53
|
+
apiKeyEncrypted = existingMatch?.apiKeyEncrypted ?? "";
|
|
54
|
+
apiKeyMasked = existingMatch?.apiKeyMasked ?? "";
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
id: preset.id,
|
|
58
|
+
name: preset.name,
|
|
59
|
+
description: preset.description,
|
|
60
|
+
model: preset.model,
|
|
61
|
+
apiKeyEncrypted,
|
|
62
|
+
apiKeyMasked
|
|
63
|
+
};
|
|
64
|
+
}));
|
|
65
|
+
return {
|
|
66
|
+
presets
|
|
67
|
+
};
|
|
26
68
|
}
|
|
27
|
-
const data = persisted;
|
|
28
|
-
const presets = (data.presets ?? []).map(p => ({
|
|
29
|
-
id: p.id,
|
|
30
|
-
name: p.name,
|
|
31
|
-
description: p.description,
|
|
32
|
-
model: p.model,
|
|
33
|
-
apiKeyMasked: p.apiKeyMasked ?? "",
|
|
34
|
-
apiKeyEncrypted: p.apiKeyEncrypted ?? ""
|
|
35
|
-
}));
|
|
36
|
-
return {
|
|
37
|
-
presets
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
async mapToStorage(internal, existing) {
|
|
41
|
-
const input = internal;
|
|
42
|
-
const existingData = existing;
|
|
43
|
-
const existingPresets = existingData?.presets ?? [];
|
|
44
|
-
const presets = await Promise.all(input.presets.map(async preset => {
|
|
45
|
-
const existingMatch = existingPresets.find(ep => ep.id === preset.id);
|
|
46
|
-
let apiKeyEncrypted;
|
|
47
|
-
let apiKeyMasked;
|
|
48
|
-
if (!preset.apiKey || preset.apiKey === existingMatch?.apiKeyMasked) {
|
|
49
|
-
// Carry forward existing encrypted key
|
|
50
|
-
apiKeyEncrypted = existingMatch?.apiKeyEncrypted ?? "";
|
|
51
|
-
apiKeyMasked = existingMatch?.apiKeyMasked ?? "";
|
|
52
|
-
} else {
|
|
53
|
-
// New plaintext key — encrypt and mask
|
|
54
|
-
apiKeyEncrypted = this.encryption.encrypt(preset.apiKey);
|
|
55
|
-
apiKeyMasked = this.masker.mask(preset.apiKey, [8, 4]);
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
id: preset.id,
|
|
59
|
-
name: preset.name,
|
|
60
|
-
description: preset.description,
|
|
61
|
-
model: preset.model,
|
|
62
|
-
apiKeyEncrypted,
|
|
63
|
-
apiKeyMasked
|
|
64
|
-
};
|
|
65
|
-
}));
|
|
66
|
-
return {
|
|
67
|
-
presets
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
69
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const ProvidersHandler = AiPowerUpsSettingsGroupHandler.createImplementation({
|
|
71
|
+
implementation: ProvidersHandlerImpl,
|
|
72
|
+
dependencies: [
|
|
73
|
+
Encryption,
|
|
74
|
+
Masker
|
|
75
|
+
]
|
|
74
76
|
});
|
|
77
|
+
export default ProvidersHandler;
|
|
75
78
|
|
|
76
79
|
//# sourceMappingURL=ProvidersHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/Providers/ProvidersHandler.js","sources":["../../../../src/api/features/Providers/ProvidersHandler.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { Masker } from \"@webiny/api-core/features/masker/index.js\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport type { PersistedProviderPreset, PersistedProviders, ProvidersSettings } from \"./types.js\";\n\nconst inputSchema = z.object({\n presets: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().optional(),\n model: z.string().min(1),\n apiKey: z.string().optional()\n })\n )\n});\n\nclass ProvidersHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {\n readonly name = \"providers\";\n readonly inputSchema = inputSchema;\n\n constructor(\n private encryption: Encryption.Interface,\n private masker: Masker.Interface\n ) {}\n\n mapFromStorage(persisted: unknown): ProvidersSettings {\n if (!persisted || typeof persisted !== \"object\") {\n return { presets: [] };\n }\n\n const data = persisted as PersistedProviders;\n const presets = (data.presets ?? []).map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKeyMasked: p.apiKeyMasked ?? \"\",\n apiKeyEncrypted: p.apiKeyEncrypted ?? \"\"\n }));\n\n return { presets };\n }\n\n async mapToStorage(internal: unknown, existing: unknown | null): Promise<PersistedProviders> {\n const input = internal as ProvidersSettings;\n const existingData = existing as ProvidersSettings | null;\n const existingPresets = existingData?.presets ?? [];\n\n const presets: PersistedProviderPreset[] = await Promise.all(\n input.presets.map(async preset => {\n const existingMatch = existingPresets.find(ep => ep.id === preset.id);\n\n let apiKeyEncrypted: string;\n let apiKeyMasked: string;\n\n if (!preset.apiKey || preset.apiKey === existingMatch?.apiKeyMasked) {\n // Carry forward existing encrypted key\n apiKeyEncrypted = existingMatch?.apiKeyEncrypted ?? \"\";\n apiKeyMasked = existingMatch?.apiKeyMasked ?? \"\";\n } else {\n // New plaintext key — encrypt and mask\n apiKeyEncrypted = this.encryption.encrypt(preset.apiKey);\n apiKeyMasked = this.masker.mask(preset.apiKey, [8, 4]);\n }\n\n return {\n id: preset.id,\n name: preset.name,\n description: preset.description,\n model: preset.model,\n apiKeyEncrypted,\n apiKeyMasked\n };\n })\n );\n\n return { presets };\n }\n}\n\nexport default AiPowerUpsSettingsGroupHandler.createImplementation({\n implementation: ProvidersHandlerImpl,\n dependencies: [Encryption, Masker]\n});\n"],"names":["inputSchema","z","ProvidersHandlerImpl","encryption","masker","persisted","data","presets","p","internal","existing","input","existingData","existingPresets","Promise","preset","existingMatch","ep","apiKeyEncrypted","apiKeyMasked","AiPowerUpsSettingsGroupHandler","Encryption","Masker"],"mappings":";;;;AAMA,MAAMA,cAAcC,EAAE,MAAM,CAAC;IACzB,SAASA,EAAE,KAAK,CACZA,EAAE,MAAM,CAAC;QACL,IAAIA,EAAE,MAAM,GAAG,GAAG,CAAC;QACnB,MAAMA,EAAE,MAAM,GAAG,GAAG,CAAC;QACrB,aAAaA,EAAE,MAAM,GAAG,QAAQ;QAChC,OAAOA,EAAE,MAAM,GAAG,GAAG,CAAC;QACtB,QAAQA,EAAE,MAAM,GAAG,QAAQ;IAC/B;AAER;AAEA,MAAMC;IAIF,YACYC,UAAgC,EAChCC,MAAwB,CAClC;aAFUD,UAAU,GAAVA;aACAC,MAAM,GAANA;aALH,IAAI,GAAG;aACP,WAAW,GAAGJ;IAKpB;IAEH,eAAeK,SAAkB,EAAqB;QAClD,IAAI,CAACA,aAAa,AAAqB,YAArB,OAAOA,WACrB,OAAO;YAAE,SAAS,EAAE;QAAC;QAGzB,MAAMC,OAAOD;QACb,MAAME,UAAWD,AAAAA,CAAAA,KAAK,OAAO,IAAI,EAAC,EAAG,GAAG,CAACE,CAAAA,IAAM;gBAC3C,IAAIA,EAAE,EAAE;gBACR,MAAMA,EAAE,IAAI;gBACZ,aAAaA,EAAE,WAAW;gBAC1B,OAAOA,EAAE,KAAK;gBACd,cAAcA,EAAE,YAAY,IAAI;gBAChC,iBAAiBA,EAAE,eAAe,IAAI;YAC1C;QAEA,OAAO;YAAED;QAAQ;IACrB;IAEA,MAAM,aAAaE,QAAiB,EAAEC,QAAwB,EAA+B;QACzF,MAAMC,QAAQF;QACd,MAAMG,eAAeF;QACrB,MAAMG,kBAAkBD,cAAc,WAAW,EAAE;QAEnD,MAAML,UAAqC,MAAMO,QAAQ,GAAG,CACxDH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAMI;YACpB,MAAMC,gBAAgBH,gBAAgB,IAAI,CAACI,CAAAA,KAAMA,GAAG,EAAE,KAAKF,OAAO,EAAE;YAEpE,IAAIG;YACJ,IAAIC;YAEJ,IAAI,AAACJ,OAAO,MAAM,IAAIA,OAAO,MAAM,KAAKC,eAAe,cAIhD;gBAEHE,kBAAkB,IAAI,CAAC,UAAU,CAAC,OAAO,CAACH,OAAO,MAAM;gBACvDI,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,CAACJ,OAAO,MAAM,EAAE;oBAAC;oBAAG;iBAAE;YACzD,OARqE;gBAEjEG,kBAAkBF,eAAe,mBAAmB;gBACpDG,eAAeH,eAAe,gBAAgB;YAClD;YAMA,OAAO;gBACH,IAAID,OAAO,EAAE;gBACb,MAAMA,OAAO,IAAI;gBACjB,aAAaA,OAAO,WAAW;gBAC/B,OAAOA,OAAO,KAAK;gBACnBG;gBACAC;YACJ;QACJ;QAGJ,OAAO;YAAEZ;QAAQ;IACrB;AACJ;AAEA,yBAAea,+BAA+B,oBAAoB,CAAC;IAC/D,gBAAgBlB;IAChB,cAAc;QAACmB;QAAYC;KAAO;AACtC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import ProvidersHandler from "./ProvidersHandler.js";
|
|
3
3
|
import ProvidersGraphQLMapper from "./ProvidersGraphQLMapper.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
const ProvidersFeature = createFeature({
|
|
5
|
+
name: "AiPowerUpsProviders",
|
|
6
|
+
register (container) {
|
|
7
|
+
container.register(ProvidersHandler);
|
|
8
|
+
container.register(ProvidersGraphQLMapper);
|
|
9
|
+
}
|
|
10
10
|
});
|
|
11
|
+
export { ProvidersFeature };
|
|
11
12
|
|
|
12
13
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/Providers/feature.js","sources":["../../../../src/api/features/Providers/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport ProvidersHandler from \"./ProvidersHandler.js\";\nimport ProvidersGraphQLMapper from \"./ProvidersGraphQLMapper.js\";\n\nexport const ProvidersFeature = createFeature({\n name: \"AiPowerUpsProviders\",\n register(container) {\n container.register(ProvidersHandler);\n container.register(ProvidersGraphQLMapper);\n }\n});\n"],"names":["ProvidersFeature","createFeature","container","ProvidersHandler","ProvidersGraphQLMapper"],"mappings":";;;AAIO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;IACvB;AACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { AiPowerUpsSettingsGroupHandler } from "../../../api/features/shared/index.js";
|
|
3
|
+
import type { PersistedReaderPersonas, ReaderPersonasSettings } from "./types.js";
|
|
4
|
+
declare class ReaderPersonasHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {
|
|
5
|
+
readonly name = "readerPersonas";
|
|
6
|
+
readonly inputSchema: z.ZodObject<{
|
|
7
|
+
presets: z.ZodArray<z.ZodObject<{
|
|
8
|
+
id: z.ZodString;
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
description: z.ZodString;
|
|
11
|
+
style: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
mapFromStorage(persisted: unknown): ReaderPersonasSettings;
|
|
15
|
+
mapToStorage(internal: unknown): Promise<PersistedReaderPersonas>;
|
|
16
|
+
}
|
|
17
|
+
declare const _default: typeof ReaderPersonasHandlerImpl & {
|
|
18
|
+
__abstraction: import("@webiny/di").Abstraction<import("../shared/abstractions.js").IAiPowerUpsSettingsGroupHandler>;
|
|
19
|
+
};
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { AiPowerUpsSettingsGroupHandler } from "../shared/index.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
presets: z.array(z.object({
|
|
5
|
+
id: z.string().min(1),
|
|
6
|
+
name: z.string().min(1),
|
|
7
|
+
description: z.string().min(1),
|
|
8
|
+
style: z.string().nullish().optional()
|
|
9
|
+
}))
|
|
10
|
+
});
|
|
11
|
+
class ReaderPersonasHandlerImpl {
|
|
12
|
+
mapFromStorage(persisted) {
|
|
13
|
+
if (!persisted || "object" != typeof persisted) return {
|
|
14
|
+
presets: []
|
|
15
|
+
};
|
|
16
|
+
const data = persisted;
|
|
17
|
+
return {
|
|
18
|
+
presets: data.presets ?? []
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async mapToStorage(internal) {
|
|
22
|
+
const input = internal;
|
|
23
|
+
return {
|
|
24
|
+
presets: input.presets.map((p)=>({
|
|
25
|
+
id: p.id,
|
|
26
|
+
name: p.name,
|
|
27
|
+
description: p.description,
|
|
28
|
+
style: p.style
|
|
29
|
+
}))
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
constructor(){
|
|
33
|
+
this.name = "readerPersonas";
|
|
34
|
+
this.inputSchema = inputSchema;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const ReaderPersonasHandler = AiPowerUpsSettingsGroupHandler.createImplementation({
|
|
38
|
+
implementation: ReaderPersonasHandlerImpl,
|
|
39
|
+
dependencies: []
|
|
40
|
+
});
|
|
41
|
+
export default ReaderPersonasHandler;
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=ReaderPersonasHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/ReaderPersonas/ReaderPersonasHandler.js","sources":["../../../../src/api/features/ReaderPersonas/ReaderPersonasHandler.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport type { PersistedReaderPersonas, ReaderPersonasSettings } from \"./types.js\";\n\nconst inputSchema = z.object({\n presets: z.array(\n z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n description: z.string().min(1),\n style: z.string().nullish().optional()\n })\n )\n});\n\nclass ReaderPersonasHandlerImpl implements AiPowerUpsSettingsGroupHandler.Interface {\n readonly name = \"readerPersonas\";\n readonly inputSchema = inputSchema;\n\n mapFromStorage(persisted: unknown): ReaderPersonasSettings {\n if (!persisted || typeof persisted !== \"object\") {\n return { presets: [] };\n }\n\n const data = persisted as PersistedReaderPersonas;\n return { presets: data.presets ?? [] };\n }\n\n async mapToStorage(internal: unknown): Promise<PersistedReaderPersonas> {\n const input = internal as ReaderPersonasSettings;\n return {\n presets: input.presets.map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n style: p.style\n }))\n };\n }\n}\n\nexport default AiPowerUpsSettingsGroupHandler.createImplementation({\n implementation: ReaderPersonasHandlerImpl,\n dependencies: []\n});\n"],"names":["inputSchema","z","ReaderPersonasHandlerImpl","persisted","data","internal","input","p","AiPowerUpsSettingsGroupHandler"],"mappings":";;AAIA,MAAMA,cAAcC,EAAE,MAAM,CAAC;IACzB,SAASA,EAAE,KAAK,CACZA,EAAE,MAAM,CAAC;QACL,IAAIA,EAAE,MAAM,GAAG,GAAG,CAAC;QACnB,MAAMA,EAAE,MAAM,GAAG,GAAG,CAAC;QACrB,aAAaA,EAAE,MAAM,GAAG,GAAG,CAAC;QAC5B,OAAOA,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ;IACxC;AAER;AAEA,MAAMC;IAIF,eAAeC,SAAkB,EAA0B;QACvD,IAAI,CAACA,aAAa,AAAqB,YAArB,OAAOA,WACrB,OAAO;YAAE,SAAS,EAAE;QAAC;QAGzB,MAAMC,OAAOD;QACb,OAAO;YAAE,SAASC,KAAK,OAAO,IAAI,EAAE;QAAC;IACzC;IAEA,MAAM,aAAaC,QAAiB,EAAoC;QACpE,MAAMC,QAAQD;QACd,OAAO;YACH,SAASC,MAAM,OAAO,CAAC,GAAG,CAACC,CAAAA,IAAM;oBAC7B,IAAIA,EAAE,EAAE;oBACR,MAAMA,EAAE,IAAI;oBACZ,aAAaA,EAAE,WAAW;oBAC1B,OAAOA,EAAE,KAAK;gBAClB;QACJ;IACJ;;aAtBS,IAAI,GAAG;aACP,WAAW,GAAGP;;AAsB3B;AAEA,8BAAeQ,+BAA+B,oBAAoB,CAAC;IAC/D,gBAAgBN;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import ReaderPersonasHandler from "./ReaderPersonasHandler.js";
|
|
3
|
+
const ReaderPersonasFeature = createFeature({
|
|
4
|
+
name: "AiPowerUpsReaderPersonas",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(ReaderPersonasHandler);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export { ReaderPersonasFeature };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/features/ReaderPersonas/feature.js","sources":["../../../../src/api/features/ReaderPersonas/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport ReaderPersonasHandler from \"./ReaderPersonasHandler.js\";\n\nexport const ReaderPersonasFeature = createFeature({\n name: \"AiPowerUpsReaderPersonas\",\n register(container) {\n container.register(ReaderPersonasHandler);\n }\n});\n"],"names":["ReaderPersonasFeature","createFeature","container","ReaderPersonasHandler"],"mappings":";;AAGO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./types.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IAiPowerUpsSettings } from "../../../api/types.js";
|
|
2
|
+
export interface ReaderPersonaPreset {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
style?: string;
|
|
7
|
+
}
|
|
8
|
+
declare module "~/api/types.js" {
|
|
9
|
+
interface IAiPowerUpsSettings {
|
|
10
|
+
readerPersonas: {
|
|
11
|
+
presets: ReaderPersonaPreset[];
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export type ReaderPersonasSettings = IAiPowerUpsSettings["readerPersonas"];
|
|
16
|
+
export interface PersistedReaderPersonaPreset {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
style?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface PersistedReaderPersonas {
|
|
23
|
+
presets: PersistedReaderPersonaPreset[];
|
|
24
|
+
}
|
|
File without changes
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
|
|
3
|
-
import { AiPowerUpsSettingsGroupHandler } from "../../../api/features/shared/index.js";
|
|
3
|
+
import { AiPowerUpsSettingsGroupHandler, AiPowerUpsSettingsCache } from "../../../api/features/shared/index.js";
|
|
4
4
|
import { UpdateSettingsRepository } from "./abstractions.js";
|
|
5
5
|
import type { IAiPowerUpsSettings } from "../../../api/types.js";
|
|
6
6
|
declare class UpdateSettingsRepositoryImpl implements UpdateSettingsRepository.Interface {
|
|
7
7
|
private keyValueStore;
|
|
8
8
|
private handlers;
|
|
9
|
-
|
|
9
|
+
private cache;
|
|
10
|
+
constructor(keyValueStore: KeyValueStore.Interface, handlers: AiPowerUpsSettingsGroupHandler.Interface[], cache: AiPowerUpsSettingsCache.Interface);
|
|
10
11
|
execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>>;
|
|
11
12
|
}
|
|
12
13
|
export declare const UpdateSettingsRepositoryImplementation: typeof UpdateSettingsRepositoryImpl & {
|
|
@@ -1,74 +1,71 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
|
|
3
|
-
import { AiPowerUpsSettingsGroupHandler } from "../shared/index.js";
|
|
3
|
+
import { AiPowerUpsSettingsCache, AiPowerUpsSettingsGroupHandler } from "../shared/index.js";
|
|
4
4
|
import { UpdateSettingsRepository } from "./abstractions.js";
|
|
5
|
+
import { SettingsValidationError } from "./errors.js";
|
|
5
6
|
import { AI_POWER_UPS_SETTINGS } from "../../constants.js";
|
|
6
7
|
class UpdateSettingsRepositoryImpl {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
async execute(input) {
|
|
12
|
-
// Load current raw record.
|
|
13
|
-
const storeResult = await this.keyValueStore.get(AI_POWER_UPS_SETTINGS);
|
|
14
|
-
const raw = storeResult.isOk() && storeResult.value ? storeResult.value : {};
|
|
15
|
-
|
|
16
|
-
// Build current internal shape for the `existing` parameter.
|
|
17
|
-
const existingInternal = {};
|
|
18
|
-
for (const handler of this.handlers) {
|
|
19
|
-
existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name]);
|
|
8
|
+
constructor(keyValueStore, handlers, cache){
|
|
9
|
+
this.keyValueStore = keyValueStore;
|
|
10
|
+
this.handlers = handlers;
|
|
11
|
+
this.cache = cache;
|
|
20
12
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
for (const issue of parseResult.error.issues) {
|
|
29
|
-
const fieldPath = [handler.name, ...issue.path.map(String)].join(".");
|
|
30
|
-
errors.push(`${fieldPath}: ${issue.message}`);
|
|
13
|
+
async execute(input) {
|
|
14
|
+
const cached = this.cache.get();
|
|
15
|
+
let raw;
|
|
16
|
+
if (cached) raw = cached.raw;
|
|
17
|
+
else {
|
|
18
|
+
const storeResult = await this.keyValueStore.get(AI_POWER_UPS_SETTINGS);
|
|
19
|
+
raw = storeResult.isOk() && storeResult.value ? storeResult.value : {};
|
|
31
20
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
result[key] = persisted[key];
|
|
62
|
-
|
|
21
|
+
const existingInternal = {};
|
|
22
|
+
for (const handler of this.handlers)existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name]);
|
|
23
|
+
const newSettings = input;
|
|
24
|
+
const invalidFields = {};
|
|
25
|
+
for (const handler of this.handlers){
|
|
26
|
+
const parseResult = await handler.inputSchema.safeParseAsync(newSettings[handler.name]);
|
|
27
|
+
if (!parseResult.success) for (const issue of parseResult.error.issues){
|
|
28
|
+
const fieldPath = [
|
|
29
|
+
handler.name,
|
|
30
|
+
...issue.path.map(String)
|
|
31
|
+
].join(".");
|
|
32
|
+
invalidFields[fieldPath] = {
|
|
33
|
+
code: issue.code,
|
|
34
|
+
message: issue.message,
|
|
35
|
+
data: {
|
|
36
|
+
path: issue.path
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (Object.keys(invalidFields).length > 0) return Result.fail(new SettingsValidationError(invalidFields));
|
|
42
|
+
const persisted = {
|
|
43
|
+
...raw
|
|
44
|
+
};
|
|
45
|
+
for (const handler of this.handlers)persisted[handler.name] = await handler.mapToStorage(newSettings[handler.name], existingInternal[handler.name]);
|
|
46
|
+
const writeResult = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, persisted);
|
|
47
|
+
if (writeResult.isFail()) return Result.fail(new Error(String(writeResult.error)));
|
|
48
|
+
const result = {};
|
|
49
|
+
for (const handler of this.handlers)result[handler.name] = handler.mapFromStorage(persisted[handler.name]);
|
|
50
|
+
for (const key of Object.keys(persisted))if (!(key in result)) result[key] = persisted[key];
|
|
51
|
+
const mapped = result;
|
|
52
|
+
this.cache.set(persisted, mapped);
|
|
53
|
+
return Result.ok(mapped);
|
|
63
54
|
}
|
|
64
|
-
return Result.ok(result);
|
|
65
|
-
}
|
|
66
55
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
56
|
+
const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation({
|
|
57
|
+
implementation: UpdateSettingsRepositoryImpl,
|
|
58
|
+
dependencies: [
|
|
59
|
+
KeyValueStore,
|
|
60
|
+
[
|
|
61
|
+
AiPowerUpsSettingsGroupHandler,
|
|
62
|
+
{
|
|
63
|
+
multiple: true
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
AiPowerUpsSettingsCache
|
|
67
|
+
]
|
|
72
68
|
});
|
|
69
|
+
export { UpdateSettingsRepositoryImplementation };
|
|
73
70
|
|
|
74
71
|
//# sourceMappingURL=UpdateSettingsRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/UpdateSettings/UpdateSettingsRepository.js","sources":["../../../../src/api/features/UpdateSettings/UpdateSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport type { OutputErrors } from \"@webiny/utils/createZodError.js\";\nimport {\n AiPowerUpsSettingsGroupHandler,\n AiPowerUpsSettingsCache\n} from \"~/api/features/shared/index.js\";\nimport { UpdateSettingsRepository } from \"./abstractions.js\";\nimport { SettingsValidationError } from \"./errors.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport { AI_POWER_UPS_SETTINGS } from \"~/api/constants.js\";\n\nclass UpdateSettingsRepositoryImpl implements UpdateSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private handlers: AiPowerUpsSettingsGroupHandler.Interface[],\n private cache: AiPowerUpsSettingsCache.Interface\n ) {}\n\n async execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>> {\n const cached = this.cache.get();\n let raw: Record<string, unknown>;\n\n if (cached) {\n raw = cached.raw;\n } else {\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n raw = storeResult.isOk() && storeResult.value ? storeResult.value : {};\n }\n\n const existingInternal: Record<string, unknown> = {};\n for (const handler of this.handlers) {\n existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name]);\n }\n\n const newSettings = input as unknown as Record<string, unknown>;\n const invalidFields: OutputErrors = {};\n\n for (const handler of this.handlers) {\n const parseResult = await handler.inputSchema.safeParseAsync(newSettings[handler.name]);\n if (!parseResult.success) {\n for (const issue of parseResult.error.issues) {\n const fieldPath = [handler.name, ...issue.path.map(String)].join(\".\");\n invalidFields[fieldPath] = {\n code: issue.code,\n message: issue.message,\n data: { path: issue.path }\n };\n }\n }\n }\n\n if (Object.keys(invalidFields).length > 0) {\n return Result.fail(new SettingsValidationError(invalidFields));\n }\n\n const persisted: Record<string, unknown> = { ...raw };\n for (const handler of this.handlers) {\n persisted[handler.name] = await handler.mapToStorage(\n newSettings[handler.name],\n existingInternal[handler.name]\n );\n }\n\n const writeResult = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, persisted);\n if (writeResult.isFail()) {\n return Result.fail(new Error(String(writeResult.error)));\n }\n\n const result: Record<string, unknown> = {};\n for (const handler of this.handlers) {\n result[handler.name] = handler.mapFromStorage(persisted[handler.name]);\n }\n\n for (const key of Object.keys(persisted)) {\n if (!(key in result)) {\n result[key] = persisted[key];\n }\n }\n\n const mapped = result as unknown as IAiPowerUpsSettings;\n this.cache.set(persisted, mapped);\n\n return Result.ok(mapped);\n }\n}\n\nexport const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation(\n {\n implementation: UpdateSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\n ]\n }\n);\n"],"names":["UpdateSettingsRepositoryImpl","keyValueStore","handlers","cache","input","cached","raw","storeResult","AI_POWER_UPS_SETTINGS","existingInternal","handler","newSettings","invalidFields","parseResult","issue","fieldPath","String","Object","Result","SettingsValidationError","persisted","writeResult","Error","result","key","mapped","UpdateSettingsRepositoryImplementation","UpdateSettingsRepository","KeyValueStore","AiPowerUpsSettingsGroupHandler","AiPowerUpsSettingsCache"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAoD,EACpDC,KAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,QAAQC,KAA0B,EAA+C;QACnF,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAIC;QAEJ,IAAID,QACAC,MAAMD,OAAO,GAAG;aACb;YACH,MAAME,cACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAA0BC;YAC1DF,MAAMC,YAAY,IAAI,MAAMA,YAAY,KAAK,GAAGA,YAAY,KAAK,GAAG,CAAC;QACzE;QAEA,MAAME,mBAA4C,CAAC;QACnD,KAAK,MAAMC,WAAW,IAAI,CAAC,QAAQ,CAC/BD,gBAAgB,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACJ,GAAG,CAACI,QAAQ,IAAI,CAAC;QAG7E,MAAMC,cAAcP;QACpB,MAAMQ,gBAA8B,CAAC;QAErC,KAAK,MAAMF,WAAW,IAAI,CAAC,QAAQ,CAAE;YACjC,MAAMG,cAAc,MAAMH,QAAQ,WAAW,CAAC,cAAc,CAACC,WAAW,CAACD,QAAQ,IAAI,CAAC;YACtF,IAAI,CAACG,YAAY,OAAO,EACpB,KAAK,MAAMC,SAASD,YAAY,KAAK,CAAC,MAAM,CAAE;gBAC1C,MAAME,YAAY;oBAACL,QAAQ,IAAI;uBAAKI,MAAM,IAAI,CAAC,GAAG,CAACE;iBAAQ,CAAC,IAAI,CAAC;gBACjEJ,aAAa,CAACG,UAAU,GAAG;oBACvB,MAAMD,MAAM,IAAI;oBAChB,SAASA,MAAM,OAAO;oBACtB,MAAM;wBAAE,MAAMA,MAAM,IAAI;oBAAC;gBAC7B;YACJ;QAER;QAEA,IAAIG,OAAO,IAAI,CAACL,eAAe,MAAM,GAAG,GACpC,OAAOM,OAAO,IAAI,CAAC,IAAIC,wBAAwBP;QAGnD,MAAMQ,YAAqC;YAAE,GAAGd,GAAG;QAAC;QACpD,KAAK,MAAMI,WAAW,IAAI,CAAC,QAAQ,CAC/BU,SAAS,CAACV,QAAQ,IAAI,CAAC,GAAG,MAAMA,QAAQ,YAAY,CAChDC,WAAW,CAACD,QAAQ,IAAI,CAAC,EACzBD,gBAAgB,CAACC,QAAQ,IAAI,CAAC;QAItC,MAAMW,cAAc,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAACb,uBAAuBY;QACxE,IAAIC,YAAY,MAAM,IAClB,OAAOH,OAAO,IAAI,CAAC,IAAII,MAAMN,OAAOK,YAAY,KAAK;QAGzD,MAAME,SAAkC,CAAC;QACzC,KAAK,MAAMb,WAAW,IAAI,CAAC,QAAQ,CAC/Ba,MAAM,CAACb,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACU,SAAS,CAACV,QAAQ,IAAI,CAAC;QAGzE,KAAK,MAAMc,OAAOP,OAAO,IAAI,CAACG,WAC1B,IAAI,CAAEI,CAAAA,OAAOD,MAAK,GACdA,MAAM,CAACC,IAAI,GAAGJ,SAAS,CAACI,IAAI;QAIpC,MAAMC,SAASF;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAACH,WAAWK;QAE1B,OAAOP,OAAO,EAAE,CAACO;IACrB;AACJ;AAEO,MAAMC,yCAAyCC,yBAAyB,oBAAoB,CAC/F;IACI,gBAAgB3B;IAChB,cAAc;QACV4B;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
|
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { UpdateSettingsRepository, UpdateSettingsUseCase } from "./abstractions.js";
|
|
3
|
+
import { AiPowerUpsSettingsAfterUpdateEvent, AiPowerUpsSettingsBeforeUpdateEvent } from "./events.js";
|
|
4
4
|
class UpdateSettingsUseCaseImpl {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
5
|
+
constructor(eventPublisher, repository){
|
|
6
|
+
this.eventPublisher = eventPublisher;
|
|
7
|
+
this.repository = repository;
|
|
8
|
+
}
|
|
9
|
+
async execute(input) {
|
|
10
|
+
await this.eventPublisher.publish(new AiPowerUpsSettingsBeforeUpdateEvent({
|
|
11
|
+
input
|
|
12
|
+
}));
|
|
13
|
+
const result = await this.repository.execute(input);
|
|
14
|
+
if (result.isFail()) return result;
|
|
15
|
+
await this.eventPublisher.publish(new AiPowerUpsSettingsAfterUpdateEvent({
|
|
16
|
+
settings: result.value
|
|
17
|
+
}));
|
|
18
|
+
return result;
|
|
16
19
|
}
|
|
17
|
-
await this.eventPublisher.publish(new AiPowerUpsSettingsAfterUpdateEvent({
|
|
18
|
-
settings: result.value
|
|
19
|
-
}));
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
20
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
const UpdateSettingsUseCaseImplementation = UpdateSettingsUseCase.createImplementation({
|
|
22
|
+
implementation: UpdateSettingsUseCaseImpl,
|
|
23
|
+
dependencies: [
|
|
24
|
+
EventPublisher,
|
|
25
|
+
UpdateSettingsRepository
|
|
26
|
+
]
|
|
26
27
|
});
|
|
28
|
+
export { UpdateSettingsUseCaseImplementation };
|
|
27
29
|
|
|
28
30
|
//# sourceMappingURL=UpdateSettingsUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/UpdateSettings/UpdateSettingsUseCase.js","sources":["../../../../src/api/features/UpdateSettings/UpdateSettingsUseCase.ts"],"sourcesContent":["import { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { UpdateSettingsUseCase, UpdateSettingsRepository } from \"./abstractions.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport {\n AiPowerUpsSettingsBeforeUpdateEvent,\n AiPowerUpsSettingsAfterUpdateEvent\n} from \"./events.js\";\n\nclass UpdateSettingsUseCaseImpl implements UpdateSettingsUseCase.Interface {\n constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: UpdateSettingsRepository.Interface\n ) {}\n\n async execute(input: IAiPowerUpsSettings): UpdateSettingsUseCase.Return {\n await this.eventPublisher.publish(new AiPowerUpsSettingsBeforeUpdateEvent({ input }));\n\n const result = await this.repository.execute(input);\n\n if (result.isFail()) {\n return result;\n }\n\n await this.eventPublisher.publish(\n new AiPowerUpsSettingsAfterUpdateEvent({ settings: result.value })\n );\n\n return result;\n }\n}\n\nexport const UpdateSettingsUseCaseImplementation = UpdateSettingsUseCase.createImplementation({\n implementation: UpdateSettingsUseCaseImpl,\n dependencies: [EventPublisher, UpdateSettingsRepository]\n});\n"],"names":["UpdateSettingsUseCaseImpl","eventPublisher","repository","input","AiPowerUpsSettingsBeforeUpdateEvent","result","AiPowerUpsSettingsAfterUpdateEvent","UpdateSettingsUseCaseImplementation","UpdateSettingsUseCase","EventPublisher","UpdateSettingsRepository"],"mappings":";;;AAQA,MAAMA;IACF,YACYC,cAAwC,EACxCC,UAA8C,CACxD;aAFUD,cAAc,GAAdA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QAAQC,KAA0B,EAAgC;QACpE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIC,oCAAoC;YAAED;QAAM;QAElF,MAAME,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACF;QAE7C,IAAIE,OAAO,MAAM,IACb,OAAOA;QAGX,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,mCAAmC;YAAE,UAAUD,OAAO,KAAK;QAAC;QAGpE,OAAOA;IACX;AACJ;AAEO,MAAME,sCAAsCC,sBAAsB,oBAAoB,CAAC;IAC1F,gBAAgBR;IAChB,cAAc;QAACS;QAAgBC;KAAyB;AAC5D"}
|