@webiny/ai-powerups 6.3.0 → 6.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/AiPowerups.js +8 -9
  2. package/AiPowerups.js.map +1 -1
  3. package/admin/Extension.js +28 -26
  4. package/admin/Extension.js.map +1 -1
  5. package/admin/domain/errors.d.ts +12 -0
  6. package/admin/domain/errors.js +21 -0
  7. package/admin/domain/errors.js.map +1 -0
  8. package/admin/features/feature.js +13 -12
  9. package/admin/features/feature.js.map +1 -1
  10. package/admin/features/generatePageContent/GeneratePageContentGateway.js +35 -16
  11. package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -1
  12. package/admin/features/generatePageContent/GeneratePageContentUseCase.js +13 -10
  13. package/admin/features/generatePageContent/GeneratePageContentUseCase.js.map +1 -1
  14. package/admin/features/generatePageContent/abstractions.d.ts +4 -0
  15. package/admin/features/generatePageContent/abstractions.js +3 -2
  16. package/admin/features/generatePageContent/abstractions.js.map +1 -1
  17. package/admin/features/generatePageContent/feature.js +7 -6
  18. package/admin/features/generatePageContent/feature.js.map +1 -1
  19. package/admin/features/generatePageContent/index.js +1 -3
  20. package/admin/features/listModels/ListModelsGateway.js +17 -14
  21. package/admin/features/listModels/ListModelsGateway.js.map +1 -1
  22. package/admin/features/listModels/ListModelsRepository.js +21 -18
  23. package/admin/features/listModels/ListModelsRepository.js.map +1 -1
  24. package/admin/features/listModels/ListModelsUseCase.js +13 -10
  25. package/admin/features/listModels/ListModelsUseCase.js.map +1 -1
  26. package/admin/features/listModels/abstractions.js +4 -3
  27. package/admin/features/listModels/abstractions.js.map +1 -1
  28. package/admin/features/listModels/feature.js +15 -14
  29. package/admin/features/listModels/feature.js.map +1 -1
  30. package/admin/features/listModels/index.js +1 -3
  31. package/admin/features/settings/getSettings/GetSettingsGateway.js +17 -14
  32. package/admin/features/settings/getSettings/GetSettingsGateway.js.map +1 -1
  33. package/admin/features/settings/getSettings/GetSettingsRepository.js +23 -23
  34. package/admin/features/settings/getSettings/GetSettingsRepository.js.map +1 -1
  35. package/admin/features/settings/getSettings/GetSettingsUseCase.js +13 -10
  36. package/admin/features/settings/getSettings/GetSettingsUseCase.js.map +1 -1
  37. package/admin/features/settings/getSettings/abstractions.js +4 -3
  38. package/admin/features/settings/getSettings/abstractions.js.map +1 -1
  39. package/admin/features/settings/getSettings/feature.js +15 -14
  40. package/admin/features/settings/getSettings/feature.js.map +1 -1
  41. package/admin/features/settings/getSettings/index.js +1 -3
  42. package/admin/features/settings/shared/SettingsCache.js +14 -13
  43. package/admin/features/settings/shared/SettingsCache.js.map +1 -1
  44. package/admin/features/settings/shared/abstractions.d.ts +32 -0
  45. package/admin/features/settings/shared/abstractions.js +2 -18
  46. package/admin/features/settings/shared/abstractions.js.map +1 -1
  47. package/admin/features/settings/shared/feature.js +11 -10
  48. package/admin/features/settings/shared/feature.js.map +1 -1
  49. package/admin/features/settings/shared/index.js +0 -2
  50. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js +34 -18
  51. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js.map +1 -1
  52. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js +17 -13
  53. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js.map +1 -1
  54. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js +13 -10
  55. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js.map +1 -1
  56. package/admin/features/settings/updateSettings/abstractions.js +4 -3
  57. package/admin/features/settings/updateSettings/abstractions.js.map +1 -1
  58. package/admin/features/settings/updateSettings/feature.js +15 -14
  59. package/admin/features/settings/updateSettings/feature.js.map +1 -1
  60. package/admin/features/settings/updateSettings/index.js +1 -3
  61. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.d.ts +4 -0
  62. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js +50 -0
  63. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPage.js.map +1 -0
  64. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.d.ts +2 -1
  65. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +133 -129
  66. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -1
  67. package/admin/presentation/AiPowerUpsSettings/abstractions.d.ts +2 -1
  68. package/admin/presentation/AiPowerUpsSettings/abstractions.js +2 -1
  69. package/admin/presentation/AiPowerUpsSettings/abstractions.js.map +1 -1
  70. package/admin/presentation/AiPowerUpsSettings/feature.js +20 -16
  71. package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -1
  72. package/admin/presentation/AiPowerUpsSettings/index.d.ts +0 -3
  73. package/admin/presentation/AiPowerUpsSettings/index.js +0 -5
  74. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js +2 -1
  75. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -1
  76. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js +19 -20
  77. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettings.js.map +1 -1
  78. package/admin/presentation/{PersonasSettings.d.ts → ProjectsSettings.d.ts} +2 -2
  79. package/admin/presentation/ProjectsSettings.js +56 -0
  80. package/admin/presentation/ProjectsSettings.js.map +1 -0
  81. package/admin/presentation/ProvidersSettings.js +39 -33
  82. package/admin/presentation/ProvidersSettings.js.map +1 -1
  83. package/admin/presentation/ReaderPersonasSettings.d.ts +11 -0
  84. package/admin/presentation/ReaderPersonasSettings.js +37 -0
  85. package/admin/presentation/ReaderPersonasSettings.js.map +1 -0
  86. package/admin/presentation/WbContentGeneration/Extension.js +15 -16
  87. package/admin/presentation/WbContentGeneration/Extension.js.map +1 -1
  88. package/admin/presentation/WbContentGeneration/GenerateContentButton.js +12 -17
  89. package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -1
  90. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +94 -127
  91. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -1
  92. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +19 -5
  93. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +214 -77
  94. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -1
  95. package/admin/presentation/WbContentGeneration/abstractions.d.ts +4 -2
  96. package/admin/presentation/WbContentGeneration/abstractions.js +2 -1
  97. package/admin/presentation/WbContentGeneration/abstractions.js.map +1 -1
  98. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js +10 -11
  99. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js.map +1 -1
  100. package/admin/presentation/WbContentGeneration/feature.js +11 -10
  101. package/admin/presentation/WbContentGeneration/feature.js.map +1 -1
  102. package/admin/presentation/WriterPersonasSettings.d.ts +11 -0
  103. package/admin/presentation/WriterPersonasSettings.js +37 -0
  104. package/admin/presentation/WriterPersonasSettings.js.map +1 -0
  105. package/admin/routes.d.ts +4 -0
  106. package/admin/routes.js +10 -0
  107. package/admin/routes.js.map +1 -0
  108. package/api/Extension.js +28 -11
  109. package/api/Extension.js.map +1 -1
  110. package/api/constants.js +2 -1
  111. package/api/constants.js.map +1 -1
  112. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.d.ts +11 -0
  113. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js +27 -0
  114. package/api/features/AiImageEnrichment/AiImageEnrichmentAfterCreateHandler.js.map +1 -0
  115. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.d.ts +34 -0
  116. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js +140 -0
  117. package/api/features/AiImageEnrichment/AiImageEnrichmentTask.js.map +1 -0
  118. package/api/features/AiImageEnrichment/feature.d.ts +4 -0
  119. package/api/features/AiImageEnrichment/feature.js +13 -0
  120. package/api/features/AiImageEnrichment/feature.js.map +1 -0
  121. package/api/features/AiPromptContext/AiPromptContextBuilder.d.ts +12 -0
  122. package/api/features/AiPromptContext/AiPromptContextBuilder.js +103 -0
  123. package/api/features/AiPromptContext/AiPromptContextBuilder.js.map +1 -0
  124. package/api/features/AiPromptContext/ProjectFileAssembler.d.ts +22 -0
  125. package/api/features/AiPromptContext/ProjectFileAssembler.js +76 -0
  126. package/api/features/AiPromptContext/ProjectFileAssembler.js.map +1 -0
  127. package/api/features/AiPromptContext/ProjectFileCache.d.ts +16 -0
  128. package/api/features/AiPromptContext/ProjectFileCache.js +61 -0
  129. package/api/features/AiPromptContext/ProjectFileCache.js.map +1 -0
  130. package/api/features/AiPromptContext/ProjectSection.d.ts +4 -0
  131. package/api/features/AiPromptContext/ProjectSection.js +35 -0
  132. package/api/features/AiPromptContext/ProjectSection.js.map +1 -0
  133. package/api/features/AiPromptContext/ReadProjectFileTool.d.ts +3 -0
  134. package/api/features/AiPromptContext/ReadProjectFileTool.js +36 -0
  135. package/api/features/AiPromptContext/ReadProjectFileTool.js.map +1 -0
  136. package/api/features/AiPromptContext/ReaderPersonaSection.d.ts +4 -0
  137. package/api/features/AiPromptContext/ReaderPersonaSection.js +10 -0
  138. package/api/features/AiPromptContext/ReaderPersonaSection.js.map +1 -0
  139. package/api/features/AiPromptContext/WriterPersonaSection.d.ts +4 -0
  140. package/api/features/AiPromptContext/WriterPersonaSection.js +10 -0
  141. package/api/features/AiPromptContext/WriterPersonaSection.js.map +1 -0
  142. package/api/features/AiPromptContext/abstractions.d.ts +68 -0
  143. package/api/features/AiPromptContext/abstractions.js +7 -0
  144. package/api/features/AiPromptContext/abstractions.js.map +1 -0
  145. package/api/features/AiPromptContext/feature.d.ts +4 -0
  146. package/api/features/AiPromptContext/feature.js +15 -0
  147. package/api/features/AiPromptContext/feature.js.map +1 -0
  148. package/api/features/AiPromptContext/index.d.ts +1 -0
  149. package/api/features/AiPromptContext/index.js +1 -0
  150. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.d.ts +11 -0
  151. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js +34 -0
  152. package/api/features/ExtractFrontmatter/ExtractFrontmatterBeforeCreateHandler.js.map +1 -0
  153. package/api/features/ExtractFrontmatter/feature.d.ts +4 -0
  154. package/api/features/ExtractFrontmatter/feature.js +11 -0
  155. package/api/features/ExtractFrontmatter/feature.js.map +1 -0
  156. package/api/features/GetSettings/GetSettingsRepository.d.ts +3 -2
  157. package/api/features/GetSettings/GetSettingsRepository.js +29 -26
  158. package/api/features/GetSettings/GetSettingsRepository.js.map +1 -1
  159. package/api/features/GetSettings/GetSettingsUseCase.js +13 -10
  160. package/api/features/GetSettings/GetSettingsUseCase.js.map +1 -1
  161. package/api/features/GetSettings/abstractions.js +3 -2
  162. package/api/features/GetSettings/abstractions.js.map +1 -1
  163. package/api/features/GetSettings/feature.js +7 -6
  164. package/api/features/GetSettings/feature.js.map +1 -1
  165. package/api/features/GetSettings/index.js +0 -2
  166. package/api/features/Projects/ProjectsHandler.d.ts +31 -0
  167. package/api/features/Projects/ProjectsHandler.js +103 -0
  168. package/api/features/Projects/ProjectsHandler.js.map +1 -0
  169. package/api/features/Projects/feature.d.ts +4 -0
  170. package/api/features/Projects/feature.js +11 -0
  171. package/api/features/Projects/feature.js.map +1 -0
  172. package/api/features/Projects/types.d.ts +50 -0
  173. package/api/features/Projects/types.js +0 -0
  174. package/api/features/Providers/ProvidersGraphQLMapper.js +33 -30
  175. package/api/features/Providers/ProvidersGraphQLMapper.js.map +1 -1
  176. package/api/features/Providers/ProvidersHandler.js +67 -64
  177. package/api/features/Providers/ProvidersHandler.js.map +1 -1
  178. package/api/features/Providers/feature.js +7 -6
  179. package/api/features/Providers/feature.js.map +1 -1
  180. package/api/features/Providers/index.js +0 -3
  181. package/api/features/Providers/types.js +0 -3
  182. package/api/features/ReaderPersonas/ReaderPersonasHandler.d.ts +20 -0
  183. package/api/features/ReaderPersonas/ReaderPersonasHandler.js +43 -0
  184. package/api/features/ReaderPersonas/ReaderPersonasHandler.js.map +1 -0
  185. package/api/features/ReaderPersonas/feature.d.ts +4 -0
  186. package/api/features/ReaderPersonas/feature.js +11 -0
  187. package/api/features/ReaderPersonas/feature.js.map +1 -0
  188. package/api/features/ReaderPersonas/index.d.ts +2 -0
  189. package/api/features/ReaderPersonas/index.js +1 -0
  190. package/api/features/ReaderPersonas/types.d.ts +24 -0
  191. package/api/features/ReaderPersonas/types.js +0 -0
  192. package/api/features/UpdateSettings/UpdateSettingsRepository.d.ts +3 -2
  193. package/api/features/UpdateSettings/UpdateSettingsRepository.js +59 -62
  194. package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -1
  195. package/api/features/UpdateSettings/UpdateSettingsUseCase.js +23 -21
  196. package/api/features/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
  197. package/api/features/UpdateSettings/abstractions.js +5 -7
  198. package/api/features/UpdateSettings/abstractions.js.map +1 -1
  199. package/api/features/UpdateSettings/errors.d.ts +10 -0
  200. package/api/features/UpdateSettings/errors.js +14 -0
  201. package/api/features/UpdateSettings/errors.js.map +1 -0
  202. package/api/features/UpdateSettings/events.js +16 -11
  203. package/api/features/UpdateSettings/events.js.map +1 -1
  204. package/api/features/UpdateSettings/feature.js +7 -6
  205. package/api/features/UpdateSettings/feature.js.map +1 -1
  206. package/api/features/UpdateSettings/index.js +1 -3
  207. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +4 -0
  208. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +63 -60
  209. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -1
  210. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +5 -3
  211. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +92 -53
  212. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -1
  213. package/api/features/WbGeneratePageContent/abstractions.d.ts +15 -1
  214. package/api/features/WbGeneratePageContent/abstractions.js +2 -1
  215. package/api/features/WbGeneratePageContent/abstractions.js.map +1 -1
  216. package/api/features/WbGeneratePageContent/buildPrompt.d.ts +1 -1
  217. package/api/features/WbGeneratePageContent/buildPrompt.js +11 -10
  218. package/api/features/WbGeneratePageContent/buildPrompt.js.map +1 -1
  219. package/api/features/WbGeneratePageContent/feature.js +7 -6
  220. package/api/features/WbGeneratePageContent/feature.js.map +1 -1
  221. package/api/features/WbGeneratePageContent/index.js +0 -2
  222. package/api/features/WriterPersonas/WriterPersonasHandler.d.ts +20 -0
  223. package/api/features/WriterPersonas/WriterPersonasHandler.js +43 -0
  224. package/api/features/WriterPersonas/WriterPersonasHandler.js.map +1 -0
  225. package/api/features/WriterPersonas/feature.d.ts +4 -0
  226. package/api/features/WriterPersonas/feature.js +11 -0
  227. package/api/features/WriterPersonas/feature.js.map +1 -0
  228. package/api/features/WriterPersonas/index.d.ts +2 -0
  229. package/api/features/WriterPersonas/index.js +1 -0
  230. package/api/features/WriterPersonas/types.d.ts +24 -0
  231. package/api/features/WriterPersonas/types.js +0 -0
  232. package/api/features/shared/SettingsCache.d.ts +12 -0
  233. package/api/features/shared/SettingsCache.js +22 -0
  234. package/api/features/shared/SettingsCache.js.map +1 -0
  235. package/api/features/shared/abstractions.d.ts +13 -0
  236. package/api/features/shared/abstractions.js +4 -2
  237. package/api/features/shared/abstractions.js.map +1 -1
  238. package/api/features/shared/index.d.ts +3 -1
  239. package/api/features/shared/index.js +1 -3
  240. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js +35 -26
  241. package/api/graphql/AiPowerUpsSettingsGraphQLMapper.js.map +1 -1
  242. package/api/graphql/BaseGraphQLSchema.js +98 -81
  243. package/api/graphql/BaseGraphQLSchema.js.map +1 -1
  244. package/api/graphql/abstractions.js +2 -1
  245. package/api/graphql/abstractions.js.map +1 -1
  246. package/api/types.d.ts +1 -0
  247. package/api/types.js +1 -4
  248. package/index.js +0 -2
  249. package/package.json +26 -24
  250. package/admin/features/generatePageContent/index.js.map +0 -1
  251. package/admin/features/listModels/index.js.map +0 -1
  252. package/admin/features/settings/getSettings/index.js.map +0 -1
  253. package/admin/features/settings/shared/index.js.map +0 -1
  254. package/admin/features/settings/updateSettings/index.js.map +0 -1
  255. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.d.ts +0 -2
  256. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.js +0 -11
  257. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.js.map +0 -1
  258. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.d.ts +0 -5
  259. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.js +0 -58
  260. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.js.map +0 -1
  261. package/admin/presentation/AiPowerUpsSettings/index.js.map +0 -1
  262. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.d.ts +0 -1
  263. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.js +0 -12
  264. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.js.map +0 -1
  265. package/admin/presentation/PersonasSettings.js +0 -29
  266. package/admin/presentation/PersonasSettings.js.map +0 -1
  267. package/api/features/GetSettings/index.js.map +0 -1
  268. package/api/features/Providers/index.js.map +0 -1
  269. package/api/features/Providers/types.js.map +0 -1
  270. package/api/features/UpdateSettings/index.js.map +0 -1
  271. package/api/features/WbGeneratePageContent/index.js.map +0 -1
  272. package/api/features/shared/index.js.map +0 -1
  273. package/api/types.js.map +0 -1
  274. 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
- 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
- }))
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
- name = "providers";
16
- inputSchema = inputSchema;
17
- constructor(encryption, masker) {
18
- this.encryption = encryption;
19
- this.masker = masker;
20
- }
21
- mapFromStorage(persisted) {
22
- if (!persisted || typeof persisted !== "object") {
23
- return {
24
- presets: []
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
- export default AiPowerUpsSettingsGroupHandler.createImplementation({
72
- implementation: ProvidersHandlerImpl,
73
- dependencies: [Encryption, Masker]
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,"names":["z","Encryption","Masker","AiPowerUpsSettingsGroupHandler","inputSchema","object","presets","array","id","string","min","name","description","optional","model","apiKey","ProvidersHandlerImpl","constructor","encryption","masker","mapFromStorage","persisted","data","map","p","apiKeyMasked","apiKeyEncrypted","mapToStorage","internal","existing","input","existingData","existingPresets","Promise","all","preset","existingMatch","find","ep","encrypt","mask","createImplementation","implementation","dependencies"],"sources":["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"],"mappings":"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","ignoreList":[]}
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
- export const ProvidersFeature = createFeature({
5
- name: "AiPowerUpsProviders",
6
- register(container) {
7
- container.register(ProvidersHandler);
8
- container.register(ProvidersGraphQLMapper);
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,"names":["createFeature","ProvidersHandler","ProvidersGraphQLMapper","ProvidersFeature","name","register","container"],"sources":["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"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,OAAOC,gBAAgB;AACvB,OAAOC,sBAAsB;AAE7B,OAAO,MAAMC,gBAAgB,GAAGH,aAAa,CAAC;EAC1CI,IAAI,EAAE,qBAAqB;EAC3BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,gBAAgB,CAAC;IACpCK,SAAS,CAACD,QAAQ,CAACH,sBAAsB,CAAC;EAC9C;AACJ,CAAC,CAAC","ignoreList":[]}
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"}
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=types.js.map
@@ -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,4 @@
1
+ export declare const ReaderPersonasFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -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,2 @@
1
+ export type { ReaderPersonaPreset, ReaderPersonasSettings } from "./types.js";
2
+ import "~/api/features/ReaderPersonas/types.js";
@@ -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
- constructor(keyValueStore: KeyValueStore.Interface, handlers: AiPowerUpsSettingsGroupHandler.Interface[]);
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
- constructor(keyValueStore, handlers) {
8
- this.keyValueStore = keyValueStore;
9
- this.handlers = handlers;
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
- const newSettings = input;
22
- const errors = [];
23
-
24
- // Validate all sections first.
25
- for (const handler of this.handlers) {
26
- const parseResult = await handler.inputSchema.safeParseAsync(newSettings[handler.name]);
27
- if (!parseResult.success) {
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
- if (errors.length > 0) {
35
- return Result.fail(new Error(errors.join("; ")));
36
- }
37
-
38
- // Transform all sections to storage shape.
39
- const persisted = {
40
- ...raw
41
- };
42
- for (const handler of this.handlers) {
43
- persisted[handler.name] = await handler.mapToStorage(newSettings[handler.name], existingInternal[handler.name]);
44
- }
45
-
46
- // Write merged record.
47
- const writeResult = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, persisted);
48
- if (writeResult.isFail()) {
49
- return Result.fail(new Error(String(writeResult.error)));
50
- }
51
-
52
- // Build and return the new internal shape.
53
- const result = {};
54
- for (const handler of this.handlers) {
55
- result[handler.name] = handler.mapFromStorage(persisted[handler.name]);
56
- }
57
-
58
- // Preserve unknown sections.
59
- for (const key of Object.keys(persisted)) {
60
- if (!(key in result)) {
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
- export const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation({
68
- implementation: UpdateSettingsRepositoryImpl,
69
- dependencies: [KeyValueStore, [AiPowerUpsSettingsGroupHandler, {
70
- multiple: true
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,"names":["Result","KeyValueStore","AiPowerUpsSettingsGroupHandler","UpdateSettingsRepository","AI_POWER_UPS_SETTINGS","UpdateSettingsRepositoryImpl","constructor","keyValueStore","handlers","execute","input","storeResult","get","raw","isOk","value","existingInternal","handler","name","mapFromStorage","newSettings","errors","parseResult","inputSchema","safeParseAsync","success","issue","error","issues","fieldPath","path","map","String","join","push","message","length","fail","Error","persisted","mapToStorage","writeResult","set","isFail","result","key","Object","keys","ok","UpdateSettingsRepositoryImplementation","createImplementation","implementation","dependencies","multiple"],"sources":["UpdateSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { AiPowerUpsSettingsGroupHandler } from \"~/api/features/shared/index.js\";\nimport { UpdateSettingsRepository } from \"./abstractions.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 ) {}\n\n async execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>> {\n // Load current raw record.\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n const raw: Record<string, unknown> =\n storeResult.isOk() && storeResult.value ? storeResult.value : {};\n\n // Build current internal shape for the `existing` parameter.\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 errors: string[] = [];\n\n // Validate all sections first.\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 errors.push(`${fieldPath}: ${issue.message}`);\n }\n }\n }\n\n if (errors.length > 0) {\n return Result.fail(new Error(errors.join(\"; \")));\n }\n\n // Transform all sections to storage shape.\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 // Write merged record.\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 // Build and return the new internal shape.\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 // Preserve unknown sections.\n for (const key of Object.keys(persisted)) {\n if (!(key in result)) {\n result[key] = persisted[key];\n }\n }\n\n return Result.ok(result as unknown as IAiPowerUpsSettings);\n }\n}\n\nexport const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation(\n {\n implementation: UpdateSettingsRepositoryImpl,\n dependencies: [KeyValueStore, [AiPowerUpsSettingsGroupHandler, { multiple: true }]]\n }\n);\n"],"mappings":"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","ignoreList":[]}
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 { UpdateSettingsUseCase, UpdateSettingsRepository } from "./abstractions.js";
3
- import { AiPowerUpsSettingsBeforeUpdateEvent, AiPowerUpsSettingsAfterUpdateEvent } from "./events.js";
2
+ import { UpdateSettingsRepository, UpdateSettingsUseCase } from "./abstractions.js";
3
+ import { AiPowerUpsSettingsAfterUpdateEvent, AiPowerUpsSettingsBeforeUpdateEvent } from "./events.js";
4
4
  class UpdateSettingsUseCaseImpl {
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()) {
15
- return result;
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
- export const UpdateSettingsUseCaseImplementation = UpdateSettingsUseCase.createImplementation({
24
- implementation: UpdateSettingsUseCaseImpl,
25
- dependencies: [EventPublisher, UpdateSettingsRepository]
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,"names":["EventPublisher","UpdateSettingsUseCase","UpdateSettingsRepository","AiPowerUpsSettingsBeforeUpdateEvent","AiPowerUpsSettingsAfterUpdateEvent","UpdateSettingsUseCaseImpl","constructor","eventPublisher","repository","execute","input","publish","result","isFail","settings","value","UpdateSettingsUseCaseImplementation","createImplementation","implementation","dependencies"],"sources":["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"],"mappings":"AAAA,SAASA,cAAc,QAAQ,mDAAmD;AAClF,SAASC,qBAAqB,EAAEC,wBAAwB;AAExD,SACIC,mCAAmC,EACnCC,kCAAkC;AAGtC,MAAMC,yBAAyB,CAA4C;EACvEC,WAAWA,CACCC,cAAwC,EACxCC,UAA8C,EACxD;IAAA,KAFUD,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,UAA8C,GAA9CA,UAA8C;EACvD;EAEH,MAAMC,OAAOA,CAACC,KAA0B,EAAgC;IACpE,MAAM,IAAI,CAACH,cAAc,CAACI,OAAO,CAAC,IAAIR,mCAAmC,CAAC;MAAEO;IAAM,CAAC,CAAC,CAAC;IAErF,MAAME,MAAM,GAAG,MAAM,IAAI,CAACJ,UAAU,CAACC,OAAO,CAACC,KAAK,CAAC;IAEnD,IAAIE,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAM,IAAI,CAACL,cAAc,CAACI,OAAO,CAC7B,IAAIP,kCAAkC,CAAC;MAAEU,QAAQ,EAAEF,MAAM,CAACG;IAAM,CAAC,CACrE,CAAC;IAED,OAAOH,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMI,mCAAmC,GAAGf,qBAAqB,CAACgB,oBAAoB,CAAC;EAC1FC,cAAc,EAAEb,yBAAyB;EACzCc,YAAY,EAAE,CAACnB,cAAc,EAAEE,wBAAwB;AAC3D,CAAC,CAAC","ignoreList":[]}
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"}