@webiny/ai-powerups 6.3.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.
Files changed (214) hide show
  1. package/AiPowerups.d.ts +2 -0
  2. package/AiPowerups.js +12 -0
  3. package/AiPowerups.js.map +1 -0
  4. package/LICENSE +36 -0
  5. package/README.md +11 -0
  6. package/admin/Extension.d.ts +2 -0
  7. package/admin/Extension.js +31 -0
  8. package/admin/Extension.js.map +1 -0
  9. package/admin/features/feature.d.ts +1 -0
  10. package/admin/features/feature.js +21 -0
  11. package/admin/features/feature.js.map +1 -0
  12. package/admin/features/generatePageContent/GeneratePageContentGateway.d.ts +12 -0
  13. package/admin/features/generatePageContent/GeneratePageContentGateway.js +26 -0
  14. package/admin/features/generatePageContent/GeneratePageContentGateway.js.map +1 -0
  15. package/admin/features/generatePageContent/GeneratePageContentUseCase.d.ts +11 -0
  16. package/admin/features/generatePageContent/GeneratePageContentUseCase.js +15 -0
  17. package/admin/features/generatePageContent/GeneratePageContentUseCase.js.map +1 -0
  18. package/admin/features/generatePageContent/abstractions.d.ts +20 -0
  19. package/admin/features/generatePageContent/abstractions.js +5 -0
  20. package/admin/features/generatePageContent/abstractions.js.map +1 -0
  21. package/admin/features/generatePageContent/feature.d.ts +1 -0
  22. package/admin/features/generatePageContent/feature.js +12 -0
  23. package/admin/features/generatePageContent/feature.js.map +1 -0
  24. package/admin/features/generatePageContent/index.d.ts +3 -0
  25. package/admin/features/generatePageContent/index.js +4 -0
  26. package/admin/features/generatePageContent/index.js.map +1 -0
  27. package/admin/features/listModels/ListModelsGateway.d.ts +12 -0
  28. package/admin/features/listModels/ListModelsGateway.js +31 -0
  29. package/admin/features/listModels/ListModelsGateway.js.map +1 -0
  30. package/admin/features/listModels/ListModelsRepository.d.ts +13 -0
  31. package/admin/features/listModels/ListModelsRepository.js +24 -0
  32. package/admin/features/listModels/ListModelsRepository.js.map +1 -0
  33. package/admin/features/listModels/ListModelsUseCase.d.ts +10 -0
  34. package/admin/features/listModels/ListModelsUseCase.js +15 -0
  35. package/admin/features/listModels/ListModelsUseCase.js.map +1 -0
  36. package/admin/features/listModels/abstractions.d.ts +28 -0
  37. package/admin/features/listModels/abstractions.js +6 -0
  38. package/admin/features/listModels/abstractions.js.map +1 -0
  39. package/admin/features/listModels/feature.d.ts +3 -0
  40. package/admin/features/listModels/feature.js +20 -0
  41. package/admin/features/listModels/feature.js.map +1 -0
  42. package/admin/features/listModels/index.d.ts +2 -0
  43. package/admin/features/listModels/index.js +4 -0
  44. package/admin/features/listModels/index.js.map +1 -0
  45. package/admin/features/settings/getSettings/GetSettingsGateway.d.ts +11 -0
  46. package/admin/features/settings/getSettings/GetSettingsGateway.js +26 -0
  47. package/admin/features/settings/getSettings/GetSettingsGateway.js.map +1 -0
  48. package/admin/features/settings/getSettings/GetSettingsRepository.d.ts +12 -0
  49. package/admin/features/settings/getSettings/GetSettingsRepository.js +23 -0
  50. package/admin/features/settings/getSettings/GetSettingsRepository.js.map +1 -0
  51. package/admin/features/settings/getSettings/GetSettingsUseCase.d.ts +10 -0
  52. package/admin/features/settings/getSettings/GetSettingsUseCase.js +15 -0
  53. package/admin/features/settings/getSettings/GetSettingsUseCase.js.map +1 -0
  54. package/admin/features/settings/getSettings/abstractions.d.ts +22 -0
  55. package/admin/features/settings/getSettings/abstractions.js +6 -0
  56. package/admin/features/settings/getSettings/abstractions.js.map +1 -0
  57. package/admin/features/settings/getSettings/feature.d.ts +3 -0
  58. package/admin/features/settings/getSettings/feature.js +20 -0
  59. package/admin/features/settings/getSettings/feature.js.map +1 -0
  60. package/admin/features/settings/getSettings/index.d.ts +2 -0
  61. package/admin/features/settings/getSettings/index.js +4 -0
  62. package/admin/features/settings/getSettings/index.js.map +1 -0
  63. package/admin/features/settings/shared/SettingsCache.d.ts +9 -0
  64. package/admin/features/settings/shared/SettingsCache.js +18 -0
  65. package/admin/features/settings/shared/SettingsCache.js.map +1 -0
  66. package/admin/features/settings/shared/abstractions.d.ts +9 -0
  67. package/admin/features/settings/shared/abstractions.js +21 -0
  68. package/admin/features/settings/shared/abstractions.js.map +1 -0
  69. package/admin/features/settings/shared/feature.d.ts +1 -0
  70. package/admin/features/settings/shared/feature.js +14 -0
  71. package/admin/features/settings/shared/feature.js.map +1 -0
  72. package/admin/features/settings/shared/index.d.ts +2 -0
  73. package/admin/features/settings/shared/index.js +4 -0
  74. package/admin/features/settings/shared/index.js.map +1 -0
  75. package/admin/features/settings/updateSettings/UpdateSettingsGateway.d.ts +12 -0
  76. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js +29 -0
  77. package/admin/features/settings/updateSettings/UpdateSettingsGateway.js.map +1 -0
  78. package/admin/features/settings/updateSettings/UpdateSettingsRepository.d.ts +13 -0
  79. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js +19 -0
  80. package/admin/features/settings/updateSettings/UpdateSettingsRepository.js.map +1 -0
  81. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.d.ts +11 -0
  82. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js +15 -0
  83. package/admin/features/settings/updateSettings/UpdateSettingsUseCase.js.map +1 -0
  84. package/admin/features/settings/updateSettings/abstractions.d.ts +22 -0
  85. package/admin/features/settings/updateSettings/abstractions.js +6 -0
  86. package/admin/features/settings/updateSettings/abstractions.js.map +1 -0
  87. package/admin/features/settings/updateSettings/feature.d.ts +3 -0
  88. package/admin/features/settings/updateSettings/feature.js +20 -0
  89. package/admin/features/settings/updateSettings/feature.js.map +1 -0
  90. package/admin/features/settings/updateSettings/index.d.ts +2 -0
  91. package/admin/features/settings/updateSettings/index.js +4 -0
  92. package/admin/features/settings/updateSettings/index.js.map +1 -0
  93. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.d.ts +2 -0
  94. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.js +11 -0
  95. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsConfig.js.map +1 -0
  96. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.d.ts +5 -0
  97. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.js +58 -0
  98. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsDialog.js.map +1 -0
  99. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.d.ts +25 -0
  100. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js +140 -0
  101. package/admin/presentation/AiPowerUpsSettings/AiPowerUpsSettingsPresenter.js.map +1 -0
  102. package/admin/presentation/AiPowerUpsSettings/abstractions.d.ts +17 -0
  103. package/admin/presentation/AiPowerUpsSettings/abstractions.js +4 -0
  104. package/admin/presentation/AiPowerUpsSettings/abstractions.js.map +1 -0
  105. package/admin/presentation/AiPowerUpsSettings/feature.d.ts +3 -0
  106. package/admin/presentation/AiPowerUpsSettings/feature.js +21 -0
  107. package/admin/presentation/AiPowerUpsSettings/feature.js.map +1 -0
  108. package/admin/presentation/AiPowerUpsSettings/index.d.ts +5 -0
  109. package/admin/presentation/AiPowerUpsSettings/index.js +7 -0
  110. package/admin/presentation/AiPowerUpsSettings/index.js.map +1 -0
  111. package/admin/presentation/AiPowerUpsSettings/settingsGroup.d.ts +18 -0
  112. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js +4 -0
  113. package/admin/presentation/AiPowerUpsSettings/settingsGroup.js.map +1 -0
  114. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.d.ts +1 -0
  115. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.js +12 -0
  116. package/admin/presentation/AiPowerUpsSettings/useAiPowerUpsSettingsDialog.js.map +1 -0
  117. package/admin/presentation/PersonasSettings.d.ts +11 -0
  118. package/admin/presentation/PersonasSettings.js +28 -0
  119. package/admin/presentation/PersonasSettings.js.map +1 -0
  120. package/admin/presentation/ProvidersSettings.d.ts +16 -0
  121. package/admin/presentation/ProvidersSettings.js +37 -0
  122. package/admin/presentation/ProvidersSettings.js.map +1 -0
  123. package/admin/presentation/WbContentGeneration/Extension.d.ts +2 -0
  124. package/admin/presentation/WbContentGeneration/Extension.js +23 -0
  125. package/admin/presentation/WbContentGeneration/Extension.js.map +1 -0
  126. package/admin/presentation/WbContentGeneration/GenerateContentButton.d.ts +2 -0
  127. package/admin/presentation/WbContentGeneration/GenerateContentButton.js +17 -0
  128. package/admin/presentation/WbContentGeneration/GenerateContentButton.js.map +1 -0
  129. package/admin/presentation/WbContentGeneration/GenerateContentDialog.d.ts +21 -0
  130. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js +102 -0
  131. package/admin/presentation/WbContentGeneration/GenerateContentDialog.js.map +1 -0
  132. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.d.ts +24 -0
  133. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js +91 -0
  134. package/admin/presentation/WbContentGeneration/GenerateContentPresenter.js.map +1 -0
  135. package/admin/presentation/WbContentGeneration/PROCESS_IDEA.md +190 -0
  136. package/admin/presentation/WbContentGeneration/abstractions.d.ts +28 -0
  137. package/admin/presentation/WbContentGeneration/abstractions.js +4 -0
  138. package/admin/presentation/WbContentGeneration/abstractions.js.map +1 -0
  139. package/admin/presentation/WbContentGeneration/decompressGzipBase64.d.ts +1 -0
  140. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js +14 -0
  141. package/admin/presentation/WbContentGeneration/decompressGzipBase64.js.map +1 -0
  142. package/admin/presentation/WbContentGeneration/feature.d.ts +3 -0
  143. package/admin/presentation/WbContentGeneration/feature.js +16 -0
  144. package/admin/presentation/WbContentGeneration/feature.js.map +1 -0
  145. package/api/Extension.d.ts +4 -0
  146. package/api/Extension.js +16 -0
  147. package/api/Extension.js.map +1 -0
  148. package/api/constants.d.ts +1 -0
  149. package/api/constants.js +3 -0
  150. package/api/constants.js.map +1 -0
  151. package/api/features/GetSettings/GetSettingsRepository.d.ts +15 -0
  152. package/api/features/GetSettings/GetSettingsRepository.js +45 -0
  153. package/api/features/GetSettings/GetSettingsRepository.js.map +1 -0
  154. package/api/features/GetSettings/GetSettingsUseCase.d.ts +10 -0
  155. package/api/features/GetSettings/GetSettingsUseCase.js +15 -0
  156. package/api/features/GetSettings/GetSettingsUseCase.js.map +1 -0
  157. package/api/features/GetSettings/abstractions.d.ts +16 -0
  158. package/api/features/GetSettings/abstractions.js +5 -0
  159. package/api/features/GetSettings/abstractions.js.map +1 -0
  160. package/api/features/GetSettings/feature.d.ts +4 -0
  161. package/api/features/GetSettings/feature.js +12 -0
  162. package/api/features/GetSettings/feature.js.map +1 -0
  163. package/api/features/GetSettings/index.d.ts +1 -0
  164. package/api/features/GetSettings/index.js +3 -0
  165. package/api/features/GetSettings/index.js.map +1 -0
  166. package/api/features/UpdateSettings/UpdateSettingsRepository.d.ts +15 -0
  167. package/api/features/UpdateSettings/UpdateSettingsRepository.js +42 -0
  168. package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -0
  169. package/api/features/UpdateSettings/UpdateSettingsUseCase.d.ts +14 -0
  170. package/api/features/UpdateSettings/UpdateSettingsUseCase.js +40 -0
  171. package/api/features/UpdateSettings/UpdateSettingsUseCase.js.map +1 -0
  172. package/api/features/UpdateSettings/abstractions.d.ts +46 -0
  173. package/api/features/UpdateSettings/abstractions.js +10 -0
  174. package/api/features/UpdateSettings/abstractions.js.map +1 -0
  175. package/api/features/UpdateSettings/events.d.ts +10 -0
  176. package/api/features/UpdateSettings/events.js +16 -0
  177. package/api/features/UpdateSettings/events.js.map +1 -0
  178. package/api/features/UpdateSettings/feature.d.ts +4 -0
  179. package/api/features/UpdateSettings/feature.js +12 -0
  180. package/api/features/UpdateSettings/feature.js.map +1 -0
  181. package/api/features/UpdateSettings/index.d.ts +1 -0
  182. package/api/features/UpdateSettings/index.js +3 -0
  183. package/api/features/UpdateSettings/index.js.map +1 -0
  184. package/api/features/UpdateSettings/validation.d.ts +17 -0
  185. package/api/features/UpdateSettings/validation.js +21 -0
  186. package/api/features/UpdateSettings/validation.js.map +1 -0
  187. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.d.ts +29 -0
  188. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js +72 -0
  189. package/api/features/WbGeneratePageContent/WbGeneratePageContentTask.js.map +1 -0
  190. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +17 -0
  191. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +62 -0
  192. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -0
  193. package/api/features/WbGeneratePageContent/abstractions.d.ts +14 -0
  194. package/api/features/WbGeneratePageContent/abstractions.js +4 -0
  195. package/api/features/WbGeneratePageContent/abstractions.js.map +1 -0
  196. package/api/features/WbGeneratePageContent/buildPrompt.d.ts +1 -0
  197. package/api/features/WbGeneratePageContent/buildPrompt.js +142 -0
  198. package/api/features/WbGeneratePageContent/buildPrompt.js.map +1 -0
  199. package/api/features/WbGeneratePageContent/feature.d.ts +4 -0
  200. package/api/features/WbGeneratePageContent/feature.js +12 -0
  201. package/api/features/WbGeneratePageContent/feature.js.map +1 -0
  202. package/api/features/WbGeneratePageContent/index.d.ts +1 -0
  203. package/api/features/WbGeneratePageContent/index.js +3 -0
  204. package/api/features/WbGeneratePageContent/index.js.map +1 -0
  205. package/api/graphql/BaseGraphQLSchema.d.ts +8 -0
  206. package/api/graphql/BaseGraphQLSchema.js +110 -0
  207. package/api/graphql/BaseGraphQLSchema.js.map +1 -0
  208. package/api/types.d.ts +19 -0
  209. package/api/types.js +3 -0
  210. package/api/types.js.map +1 -0
  211. package/index.d.ts +1 -0
  212. package/index.js +3 -0
  213. package/index.js.map +1 -0
  214. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","GetSettingsRepositoryImplementation","GetSettingsUseCaseImplementation","GetSettingsFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GetSettingsRepositoryImplementation } from \"./GetSettingsRepository.js\";\nimport { GetSettingsUseCaseImplementation } from \"./GetSettingsUseCase.js\";\n\nexport const GetSettingsFeature = createFeature({\n name: \"AiPowerUpsGetSettings\",\n register(container) {\n container.register(GetSettingsRepositoryImplementation).inSingletonScope();\n container.register(GetSettingsUseCaseImplementation);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,mCAAmC;AAC5C,SAASC,gCAAgC;AAEzC,OAAO,MAAMC,kBAAkB,GAAGH,aAAa,CAAC;EAC5CI,IAAI,EAAE,uBAAuB;EAC7BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,mCAAmC,CAAC,CAACM,gBAAgB,CAAC,CAAC;IAC1ED,SAAS,CAACD,QAAQ,CAACH,gCAAgC,CAAC;EACxD;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export { GetSettingsUseCase } from "./abstractions.js";
@@ -0,0 +1,3 @@
1
+ export { GetSettingsUseCase } from "./abstractions.js";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GetSettingsUseCase"],"sources":["index.ts"],"sourcesContent":["export { GetSettingsUseCase } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,kBAAkB","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
3
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
4
+ import { UpdateSettingsRepository, type UpdateSettingsInput } from "./abstractions.js";
5
+ import type { AiPowerUpsSettings } from "../../../api/types.js";
6
+ declare class UpdateSettingsRepositoryImpl implements UpdateSettingsRepository.Interface {
7
+ private keyValueStore;
8
+ private encryption;
9
+ constructor(keyValueStore: KeyValueStore.Interface, encryption: Encryption.Interface);
10
+ execute(input: UpdateSettingsInput): Promise<Result<AiPowerUpsSettings, Error>>;
11
+ }
12
+ export declare const UpdateSettingsRepositoryImplementation: typeof UpdateSettingsRepositoryImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateSettingsRepository>;
14
+ };
15
+ export {};
@@ -0,0 +1,42 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { KeyValueStore } from "@webiny/api-core/features/keyValueStore/index.js";
3
+ import { Encryption } from "@webiny/api-core/features/encryption/index.js";
4
+ import { UpdateSettingsRepository } from "./abstractions.js";
5
+ import { AI_POWER_UPS_SETTINGS } from "../../constants.js";
6
+ class UpdateSettingsRepositoryImpl {
7
+ constructor(keyValueStore, encryption) {
8
+ this.keyValueStore = keyValueStore;
9
+ this.encryption = encryption;
10
+ }
11
+ async execute(input) {
12
+ const providerPresets = await Promise.all(input.providers.presets.map(async provider => ({
13
+ ...provider,
14
+ apiKey: await this.encryption.encrypt(provider.apiKey)
15
+ })));
16
+ const result = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, {
17
+ providers: {
18
+ presets: providerPresets
19
+ },
20
+ personas: {
21
+ presets: input.personas.presets
22
+ }
23
+ });
24
+ if (result.isFail()) {
25
+ return Result.fail(new Error(String(result.error)));
26
+ }
27
+ return Result.ok({
28
+ providers: {
29
+ presets: input.providers.presets
30
+ },
31
+ personas: {
32
+ presets: input.personas.presets
33
+ }
34
+ });
35
+ }
36
+ }
37
+ export const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation({
38
+ implementation: UpdateSettingsRepositoryImpl,
39
+ dependencies: [KeyValueStore, Encryption]
40
+ });
41
+
42
+ //# sourceMappingURL=UpdateSettingsRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Result","KeyValueStore","Encryption","UpdateSettingsRepository","AI_POWER_UPS_SETTINGS","UpdateSettingsRepositoryImpl","constructor","keyValueStore","encryption","execute","input","providerPresets","Promise","all","providers","presets","map","provider","apiKey","encrypt","result","set","personas","isFail","fail","Error","String","error","ok","UpdateSettingsRepositoryImplementation","createImplementation","implementation","dependencies"],"sources":["UpdateSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { Encryption } from \"@webiny/api-core/features/encryption/index.js\";\nimport { UpdateSettingsRepository, type UpdateSettingsInput } from \"./abstractions.js\";\nimport type { AiPowerUpsSettings } 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 encryption: Encryption.Interface\n ) {}\n\n async execute(input: UpdateSettingsInput): Promise<Result<AiPowerUpsSettings, Error>> {\n const providerPresets = await Promise.all(\n input.providers.presets.map(async provider => ({\n ...provider,\n apiKey: await this.encryption.encrypt(provider.apiKey)\n }))\n );\n\n const result = await this.keyValueStore.set(AI_POWER_UPS_SETTINGS, {\n providers: { presets: providerPresets },\n personas: { presets: input.personas.presets }\n });\n\n if (result.isFail()) {\n return Result.fail(new Error(String(result.error)));\n }\n\n return Result.ok({\n providers: { presets: input.providers.presets },\n personas: { presets: input.personas.presets }\n });\n }\n}\n\nexport const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation(\n {\n implementation: UpdateSettingsRepositoryImpl,\n dependencies: [KeyValueStore, Encryption]\n }\n);\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,aAAa,QAAQ,kDAAkD;AAChF,SAASC,UAAU,QAAQ,+CAA+C;AAC1E,SAASC,wBAAwB;AAEjC,SAASC,qBAAqB;AAE9B,MAAMC,4BAA4B,CAA+C;EAC7EC,WAAWA,CACCC,aAAsC,EACtCC,UAAgC,EAC1C;IAAA,KAFUD,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,OAAOA,CAACC,KAA0B,EAA8C;IAClF,MAAMC,eAAe,GAAG,MAAMC,OAAO,CAACC,GAAG,CACrCH,KAAK,CAACI,SAAS,CAACC,OAAO,CAACC,GAAG,CAAC,MAAMC,QAAQ,KAAK;MAC3C,GAAGA,QAAQ;MACXC,MAAM,EAAE,MAAM,IAAI,CAACV,UAAU,CAACW,OAAO,CAACF,QAAQ,CAACC,MAAM;IACzD,CAAC,CAAC,CACN,CAAC;IAED,MAAME,MAAM,GAAG,MAAM,IAAI,CAACb,aAAa,CAACc,GAAG,CAACjB,qBAAqB,EAAE;MAC/DU,SAAS,EAAE;QAAEC,OAAO,EAAEJ;MAAgB,CAAC;MACvCW,QAAQ,EAAE;QAAEP,OAAO,EAAEL,KAAK,CAACY,QAAQ,CAACP;MAAQ;IAChD,CAAC,CAAC;IAEF,IAAIK,MAAM,CAACG,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOvB,MAAM,CAACwB,IAAI,CAAC,IAAIC,KAAK,CAACC,MAAM,CAACN,MAAM,CAACO,KAAK,CAAC,CAAC,CAAC;IACvD;IAEA,OAAO3B,MAAM,CAAC4B,EAAE,CAAC;MACbd,SAAS,EAAE;QAAEC,OAAO,EAAEL,KAAK,CAACI,SAAS,CAACC;MAAQ,CAAC;MAC/CO,QAAQ,EAAE;QAAEP,OAAO,EAAEL,KAAK,CAACY,QAAQ,CAACP;MAAQ;IAChD,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMc,sCAAsC,GAAG1B,wBAAwB,CAAC2B,oBAAoB,CAC/F;EACIC,cAAc,EAAE1B,4BAA4B;EAC5C2B,YAAY,EAAE,CAAC/B,aAAa,EAAEC,UAAU;AAC5C,CACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
+ import { UpdateSettingsUseCase, UpdateSettingsRepository, type UpdateSettingsInput } from "./abstractions.js";
4
+ declare class UpdateSettingsUseCaseImpl implements UpdateSettingsUseCase.Interface {
5
+ private identityContext;
6
+ private eventPublisher;
7
+ private repository;
8
+ constructor(identityContext: IdentityContext.Interface, eventPublisher: EventPublisher.Interface, repository: UpdateSettingsRepository.Interface);
9
+ execute(input: UpdateSettingsInput): UpdateSettingsUseCase.Return;
10
+ }
11
+ export declare const UpdateSettingsUseCaseImplementation: typeof UpdateSettingsUseCaseImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateSettingsUseCase>;
13
+ };
14
+ export {};
@@ -0,0 +1,40 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
+ import { UpdateSettingsUseCase, UpdateSettingsRepository } from "./abstractions.js";
5
+ import { AiPowerUpsSettingsBeforeUpdateEvent, AiPowerUpsSettingsAfterUpdateEvent } from "./events.js";
6
+ import { updateValidation } from "./validation.js";
7
+ class UpdateSettingsUseCaseImpl {
8
+ constructor(identityContext, eventPublisher, repository) {
9
+ this.identityContext = identityContext;
10
+ this.eventPublisher = eventPublisher;
11
+ this.repository = repository;
12
+ }
13
+ async execute(input) {
14
+ const permission = await this.identityContext.getPermission("ai-PowerUps");
15
+ if (!permission) {
16
+ return Result.fail(new Error("Not authorized to manage AI PowerUps settings."));
17
+ }
18
+ const validation = updateValidation.safeParse(input);
19
+ if (!validation.success) {
20
+ return Result.fail(new Error(validation.error.issues[0].message));
21
+ }
22
+ await this.eventPublisher.publish(new AiPowerUpsSettingsBeforeUpdateEvent({
23
+ input
24
+ }));
25
+ const result = await this.repository.execute(input);
26
+ if (result.isFail()) {
27
+ return result;
28
+ }
29
+ await this.eventPublisher.publish(new AiPowerUpsSettingsAfterUpdateEvent({
30
+ settings: result.value
31
+ }));
32
+ return result;
33
+ }
34
+ }
35
+ export const UpdateSettingsUseCaseImplementation = UpdateSettingsUseCase.createImplementation({
36
+ implementation: UpdateSettingsUseCaseImpl,
37
+ dependencies: [IdentityContext, EventPublisher, UpdateSettingsRepository]
38
+ });
39
+
40
+ //# sourceMappingURL=UpdateSettingsUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Result","EventPublisher","IdentityContext","UpdateSettingsUseCase","UpdateSettingsRepository","AiPowerUpsSettingsBeforeUpdateEvent","AiPowerUpsSettingsAfterUpdateEvent","updateValidation","UpdateSettingsUseCaseImpl","constructor","identityContext","eventPublisher","repository","execute","input","permission","getPermission","fail","Error","validation","safeParse","success","error","issues","message","publish","result","isFail","settings","value","UpdateSettingsUseCaseImplementation","createImplementation","implementation","dependencies"],"sources":["UpdateSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport {\n UpdateSettingsUseCase,\n UpdateSettingsRepository,\n type UpdateSettingsInput\n} from \"./abstractions.js\";\nimport {\n AiPowerUpsSettingsBeforeUpdateEvent,\n AiPowerUpsSettingsAfterUpdateEvent\n} from \"./events.js\";\nimport { updateValidation } from \"./validation.js\";\n\nclass UpdateSettingsUseCaseImpl implements UpdateSettingsUseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: UpdateSettingsRepository.Interface\n ) {}\n\n async execute(input: UpdateSettingsInput): UpdateSettingsUseCase.Return {\n const permission = await this.identityContext.getPermission(\"ai-PowerUps\");\n if (!permission) {\n return Result.fail(new Error(\"Not authorized to manage AI PowerUps settings.\"));\n }\n\n const validation = updateValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new Error(validation.error.issues[0].message));\n }\n\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: [IdentityContext, EventPublisher, UpdateSettingsRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,cAAc,QAAQ,mDAAmD;AAClF,SAASC,eAAe,QAAQ,6DAA6D;AAC7F,SACIC,qBAAqB,EACrBC,wBAAwB;AAG5B,SACIC,mCAAmC,EACnCC,kCAAkC;AAEtC,SAASC,gBAAgB;AAEzB,MAAMC,yBAAyB,CAA4C;EACvEC,WAAWA,CACCC,eAA0C,EAC1CC,cAAwC,EACxCC,UAA8C,EACxD;IAAA,KAHUF,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,UAA8C,GAA9CA,UAA8C;EACvD;EAEH,MAAMC,OAAOA,CAACC,KAA0B,EAAgC;IACpE,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACL,eAAe,CAACM,aAAa,CAAC,aAAa,CAAC;IAC1E,IAAI,CAACD,UAAU,EAAE;MACb,OAAOf,MAAM,CAACiB,IAAI,CAAC,IAAIC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACnF;IAEA,MAAMC,UAAU,GAAGZ,gBAAgB,CAACa,SAAS,CAACN,KAAK,CAAC;IACpD,IAAI,CAACK,UAAU,CAACE,OAAO,EAAE;MACrB,OAAOrB,MAAM,CAACiB,IAAI,CAAC,IAAIC,KAAK,CAACC,UAAU,CAACG,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;IACrE;IAEA,MAAM,IAAI,CAACb,cAAc,CAACc,OAAO,CAAC,IAAIpB,mCAAmC,CAAC;MAAES;IAAM,CAAC,CAAC,CAAC;IAErF,MAAMY,MAAM,GAAG,MAAM,IAAI,CAACd,UAAU,CAACC,OAAO,CAACC,KAAK,CAAC;IAEnD,IAAIY,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAM,IAAI,CAACf,cAAc,CAACc,OAAO,CAC7B,IAAInB,kCAAkC,CAAC;MAAEsB,QAAQ,EAAEF,MAAM,CAACG;IAAM,CAAC,CACrE,CAAC;IAED,OAAOH,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMI,mCAAmC,GAAG3B,qBAAqB,CAAC4B,oBAAoB,CAAC;EAC1FC,cAAc,EAAExB,yBAAyB;EACzCyB,YAAY,EAAE,CAAC/B,eAAe,EAAED,cAAc,EAAEG,wBAAwB;AAC5E,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,46 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import type { DomainEvent, IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
3
+ import type { AiProvider, AiPersona, AiPowerUpsSettings } from "../../../api/types.js";
4
+ export interface UpdateSettingsInput {
5
+ providers: {
6
+ presets: Array<Pick<AiProvider, "name" | "model" | "apiKey"> & {
7
+ description?: string;
8
+ }>;
9
+ };
10
+ personas: {
11
+ presets: Array<Pick<AiPersona, "name" | "description">>;
12
+ };
13
+ }
14
+ export interface IUpdateSettingsRepository {
15
+ execute(input: UpdateSettingsInput): Promise<Result<AiPowerUpsSettings, Error>>;
16
+ }
17
+ export declare const UpdateSettingsRepository: import("@webiny/di").Abstraction<IUpdateSettingsRepository>;
18
+ export declare namespace UpdateSettingsRepository {
19
+ type Interface = IUpdateSettingsRepository;
20
+ type Return = Promise<Result<AiPowerUpsSettings, Error>>;
21
+ }
22
+ export interface IUpdateSettingsUseCase {
23
+ execute(input: UpdateSettingsInput): Promise<Result<AiPowerUpsSettings, Error>>;
24
+ }
25
+ export declare const UpdateSettingsUseCase: import("@webiny/di").Abstraction<IUpdateSettingsUseCase>;
26
+ export declare namespace UpdateSettingsUseCase {
27
+ type Interface = IUpdateSettingsUseCase;
28
+ type Return = Promise<Result<AiPowerUpsSettings, Error>>;
29
+ type Params = UpdateSettingsInput;
30
+ }
31
+ export interface AiPowerUpsSettingsBeforeUpdatePayload {
32
+ input: UpdateSettingsInput;
33
+ }
34
+ export interface AiPowerUpsSettingsAfterUpdatePayload {
35
+ settings: AiPowerUpsSettings;
36
+ }
37
+ export declare const AiPowerUpsSettingsBeforeUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>>;
38
+ export declare namespace AiPowerUpsSettingsBeforeUpdateEventHandler {
39
+ type Interface = IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>;
40
+ type Event = DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>;
41
+ }
42
+ export declare const AiPowerUpsSettingsAfterUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>>;
43
+ export declare namespace AiPowerUpsSettingsAfterUpdateEventHandler {
44
+ type Interface = IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>;
45
+ type Event = DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>;
46
+ }
@@ -0,0 +1,10 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ export const UpdateSettingsRepository = createAbstraction("AiPowerUpsUpdateSettingsRepository");
3
+ export const UpdateSettingsUseCase = createAbstraction("AiPowerUpsUpdateSettingsUseCase");
4
+
5
+ // Domain events
6
+
7
+ export const AiPowerUpsSettingsBeforeUpdateEventHandler = createAbstraction("AiPowerUpsSettingsBeforeUpdateEventHandler");
8
+ export const AiPowerUpsSettingsAfterUpdateEventHandler = createAbstraction("AiPowerUpsSettingsAfterUpdateEventHandler");
9
+
10
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","UpdateSettingsRepository","UpdateSettingsUseCase","AiPowerUpsSettingsBeforeUpdateEventHandler","AiPowerUpsSettingsAfterUpdateEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { DomainEvent, IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { AiProvider, AiPersona, AiPowerUpsSettings } from \"~/api/types.js\";\n\nexport interface UpdateSettingsInput {\n providers: {\n presets: Array<Pick<AiProvider, \"name\" | \"model\" | \"apiKey\"> & { description?: string }>;\n };\n personas: {\n presets: Array<Pick<AiPersona, \"name\" | \"description\">>;\n };\n}\n\nexport interface IUpdateSettingsRepository {\n execute(input: UpdateSettingsInput): Promise<Result<AiPowerUpsSettings, Error>>;\n}\n\nexport const UpdateSettingsRepository = createAbstraction<IUpdateSettingsRepository>(\n \"AiPowerUpsUpdateSettingsRepository\"\n);\n\nexport namespace UpdateSettingsRepository {\n export type Interface = IUpdateSettingsRepository;\n export type Return = Promise<Result<AiPowerUpsSettings, Error>>;\n}\n\nexport interface IUpdateSettingsUseCase {\n execute(input: UpdateSettingsInput): Promise<Result<AiPowerUpsSettings, Error>>;\n}\n\nexport const UpdateSettingsUseCase = createAbstraction<IUpdateSettingsUseCase>(\n \"AiPowerUpsUpdateSettingsUseCase\"\n);\n\nexport namespace UpdateSettingsUseCase {\n export type Interface = IUpdateSettingsUseCase;\n export type Return = Promise<Result<AiPowerUpsSettings, Error>>;\n export type Params = UpdateSettingsInput;\n}\n\n// Domain events\nexport interface AiPowerUpsSettingsBeforeUpdatePayload {\n input: UpdateSettingsInput;\n}\n\nexport interface AiPowerUpsSettingsAfterUpdatePayload {\n settings: AiPowerUpsSettings;\n}\n\nexport const AiPowerUpsSettingsBeforeUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>\n>(\"AiPowerUpsSettingsBeforeUpdateEventHandler\");\n\nexport namespace AiPowerUpsSettingsBeforeUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>;\n export type Event = DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>;\n}\n\nexport const AiPowerUpsSettingsAfterUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>\n>(\"AiPowerUpsSettingsAfterUpdateEventHandler\");\n\nexport namespace AiPowerUpsSettingsAfterUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>;\n export type Event = DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;AAiB/D,OAAO,MAAMC,wBAAwB,GAAGD,iBAAiB,CACrD,oCACJ,CAAC;AAWD,OAAO,MAAME,qBAAqB,GAAGF,iBAAiB,CAClD,iCACJ,CAAC;;AAQD;;AASA,OAAO,MAAMG,0CAA0C,GAAGH,iBAAiB,CAEzE,4CAA4C,CAAC;AAO/C,OAAO,MAAMI,yCAAyC,GAAGJ,iBAAiB,CAExE,2CAA2C,CAAC","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import type { AiPowerUpsSettingsBeforeUpdatePayload, AiPowerUpsSettingsAfterUpdatePayload } from "./abstractions.js";
3
+ export declare class AiPowerUpsSettingsBeforeUpdateEvent extends DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload> {
4
+ eventType: "ai-PowerUps.settings.beforeUpdate";
5
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload>>>;
6
+ }
7
+ export declare class AiPowerUpsSettingsAfterUpdateEvent extends DomainEvent<AiPowerUpsSettingsAfterUpdatePayload> {
8
+ eventType: "ai-PowerUps.settings.afterUpdate";
9
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<DomainEvent<AiPowerUpsSettingsAfterUpdatePayload>>>;
10
+ }
@@ -0,0 +1,16 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { AiPowerUpsSettingsBeforeUpdateEventHandler, AiPowerUpsSettingsAfterUpdateEventHandler } from "./abstractions.js";
3
+ export class AiPowerUpsSettingsBeforeUpdateEvent extends DomainEvent {
4
+ eventType = "ai-PowerUps.settings.beforeUpdate";
5
+ getHandlerAbstraction() {
6
+ return AiPowerUpsSettingsBeforeUpdateEventHandler;
7
+ }
8
+ }
9
+ export class AiPowerUpsSettingsAfterUpdateEvent extends DomainEvent {
10
+ eventType = "ai-PowerUps.settings.afterUpdate";
11
+ getHandlerAbstraction() {
12
+ return AiPowerUpsSettingsAfterUpdateEventHandler;
13
+ }
14
+ }
15
+
16
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DomainEvent","AiPowerUpsSettingsBeforeUpdateEventHandler","AiPowerUpsSettingsAfterUpdateEventHandler","AiPowerUpsSettingsBeforeUpdateEvent","eventType","getHandlerAbstraction","AiPowerUpsSettingsAfterUpdateEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n AiPowerUpsSettingsBeforeUpdateEventHandler,\n AiPowerUpsSettingsAfterUpdateEventHandler\n} from \"./abstractions.js\";\nimport type {\n AiPowerUpsSettingsBeforeUpdatePayload,\n AiPowerUpsSettingsAfterUpdatePayload\n} from \"./abstractions.js\";\n\nexport class AiPowerUpsSettingsBeforeUpdateEvent extends DomainEvent<AiPowerUpsSettingsBeforeUpdatePayload> {\n eventType = \"ai-PowerUps.settings.beforeUpdate\" as const;\n\n getHandlerAbstraction() {\n return AiPowerUpsSettingsBeforeUpdateEventHandler;\n }\n}\n\nexport class AiPowerUpsSettingsAfterUpdateEvent extends DomainEvent<AiPowerUpsSettingsAfterUpdatePayload> {\n eventType = \"ai-PowerUps.settings.afterUpdate\" as const;\n\n getHandlerAbstraction() {\n return AiPowerUpsSettingsAfterUpdateEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,mDAAmD;AAC/E,SACIC,0CAA0C,EAC1CC,yCAAyC;AAO7C,OAAO,MAAMC,mCAAmC,SAASH,WAAW,CAAwC;EACxGI,SAAS,GAAG,mCAAmC;EAE/CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,0CAA0C;EACrD;AACJ;AAEA,OAAO,MAAMK,kCAAkC,SAASN,WAAW,CAAuC;EACtGI,SAAS,GAAG,kCAAkC;EAE9CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,yCAAyC;EACpD;AACJ","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ export declare const UpdateSettingsFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,12 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { UpdateSettingsRepositoryImplementation } from "./UpdateSettingsRepository.js";
3
+ import { UpdateSettingsUseCaseImplementation } from "./UpdateSettingsUseCase.js";
4
+ export const UpdateSettingsFeature = createFeature({
5
+ name: "AiPowerUpsUpdateSettings",
6
+ register(container) {
7
+ container.register(UpdateSettingsRepositoryImplementation).inSingletonScope();
8
+ container.register(UpdateSettingsUseCaseImplementation);
9
+ }
10
+ });
11
+
12
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","UpdateSettingsRepositoryImplementation","UpdateSettingsUseCaseImplementation","UpdateSettingsFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UpdateSettingsRepositoryImplementation } from \"./UpdateSettingsRepository.js\";\nimport { UpdateSettingsUseCaseImplementation } from \"./UpdateSettingsUseCase.js\";\n\nexport const UpdateSettingsFeature = createFeature({\n name: \"AiPowerUpsUpdateSettings\",\n register(container) {\n container.register(UpdateSettingsRepositoryImplementation).inSingletonScope();\n container.register(UpdateSettingsUseCaseImplementation);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,sCAAsC;AAC/C,SAASC,mCAAmC;AAE5C,OAAO,MAAMC,qBAAqB,GAAGH,aAAa,CAAC;EAC/CI,IAAI,EAAE,0BAA0B;EAChCC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,sCAAsC,CAAC,CAACM,gBAAgB,CAAC,CAAC;IAC7ED,SAAS,CAACD,QAAQ,CAACH,mCAAmC,CAAC;EAC3D;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export { UpdateSettingsUseCase, AiPowerUpsSettingsBeforeUpdateEventHandler, AiPowerUpsSettingsAfterUpdateEventHandler } from "./abstractions.js";
@@ -0,0 +1,3 @@
1
+ export { UpdateSettingsUseCase, AiPowerUpsSettingsBeforeUpdateEventHandler, AiPowerUpsSettingsAfterUpdateEventHandler } from "./abstractions.js";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UpdateSettingsUseCase","AiPowerUpsSettingsBeforeUpdateEventHandler","AiPowerUpsSettingsAfterUpdateEventHandler"],"sources":["index.ts"],"sourcesContent":["export {\n UpdateSettingsUseCase,\n AiPowerUpsSettingsBeforeUpdateEventHandler,\n AiPowerUpsSettingsAfterUpdateEventHandler\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,qBAAqB,EACrBC,0CAA0C,EAC1CC,yCAAyC","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ export declare const updateValidation: z.ZodObject<{
3
+ providers: z.ZodObject<{
4
+ presets: z.ZodArray<z.ZodObject<{
5
+ name: z.ZodString;
6
+ description: z.ZodOptional<z.ZodString>;
7
+ model: z.ZodString;
8
+ apiKey: z.ZodString;
9
+ }, z.core.$strip>>;
10
+ }, z.core.$strip>;
11
+ personas: z.ZodObject<{
12
+ presets: z.ZodArray<z.ZodObject<{
13
+ name: z.ZodString;
14
+ description: z.ZodString;
15
+ }, z.core.$strip>>;
16
+ }, z.core.$strip>;
17
+ }, z.core.$strip>;
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ const provider = z.object({
3
+ name: z.string().min(1).describe("Provider name"),
4
+ description: z.string().optional().describe("Provider description"),
5
+ model: z.string().min(1).describe("Model ID"),
6
+ apiKey: z.string().min(1).describe("API key")
7
+ });
8
+ const persona = z.object({
9
+ name: z.string().min(1).describe("Persona name"),
10
+ description: z.string().min(1).describe("Persona description, used as the AI system prompt")
11
+ });
12
+ export const updateValidation = z.object({
13
+ providers: z.object({
14
+ presets: z.array(provider)
15
+ }),
16
+ personas: z.object({
17
+ presets: z.array(persona)
18
+ })
19
+ });
20
+
21
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["z","provider","object","name","string","min","describe","description","optional","model","apiKey","persona","updateValidation","providers","presets","array","personas"],"sources":["validation.ts"],"sourcesContent":["import { z } from \"zod\";\n\nconst provider = z.object({\n name: z.string().min(1).describe(\"Provider name\"),\n description: z.string().optional().describe(\"Provider description\"),\n model: z.string().min(1).describe(\"Model ID\"),\n apiKey: z.string().min(1).describe(\"API key\")\n});\n\nconst persona = z.object({\n name: z.string().min(1).describe(\"Persona name\"),\n description: z.string().min(1).describe(\"Persona description, used as the AI system prompt\")\n});\n\nexport const updateValidation = z.object({\n providers: z.object({\n presets: z.array(provider)\n }),\n personas: z.object({\n presets: z.array(persona)\n })\n});\n"],"mappings":"AAAA,SAASA,CAAC,QAAQ,KAAK;AAEvB,MAAMC,QAAQ,GAAGD,CAAC,CAACE,MAAM,CAAC;EACtBC,IAAI,EAAEH,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,eAAe,CAAC;EACjDC,WAAW,EAAEP,CAAC,CAACI,MAAM,CAAC,CAAC,CAACI,QAAQ,CAAC,CAAC,CAACF,QAAQ,CAAC,sBAAsB,CAAC;EACnEG,KAAK,EAAET,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,UAAU,CAAC;EAC7CI,MAAM,EAAEV,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,SAAS;AAChD,CAAC,CAAC;AAEF,MAAMK,OAAO,GAAGX,CAAC,CAACE,MAAM,CAAC;EACrBC,IAAI,EAAEH,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,cAAc,CAAC;EAChDC,WAAW,EAAEP,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,mDAAmD;AAC/F,CAAC,CAAC;AAEF,OAAO,MAAMM,gBAAgB,GAAGZ,CAAC,CAACE,MAAM,CAAC;EACrCW,SAAS,EAAEb,CAAC,CAACE,MAAM,CAAC;IAChBY,OAAO,EAAEd,CAAC,CAACe,KAAK,CAACd,QAAQ;EAC7B,CAAC,CAAC;EACFe,QAAQ,EAAEhB,CAAC,CAACE,MAAM,CAAC;IACfY,OAAO,EAAEd,CAAC,CAACe,KAAK,CAACJ,OAAO;EAC5B,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
3
+ import { WbGeneratePageContentUseCase } from "../../../api/features/WbGeneratePageContent/index.js";
4
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
5
+ export declare const WB_GENERATE_PAGE_CONTENT_TASK_ID = "aiPowerUpsGeneratePageContent";
6
+ export interface IWbGeneratePageContentTaskInput {
7
+ prompt: string;
8
+ components: unknown;
9
+ tools: unknown;
10
+ }
11
+ declare class WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {
12
+ private identityContext;
13
+ private generatePageContent;
14
+ private websocketService;
15
+ id: string;
16
+ title: string;
17
+ description: string;
18
+ maxIterations: number;
19
+ isPrivate: boolean;
20
+ databaseLogs: boolean;
21
+ constructor(identityContext: IdentityContext.Interface, generatePageContent: WbGeneratePageContentUseCase.Interface, websocketService: WebsocketService.Interface);
22
+ run({ input, controller }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<TaskDefinition.Result<IWbGeneratePageContentTaskInput>>;
23
+ private sendContentToUser;
24
+ private sendErrorToUser;
25
+ }
26
+ export declare const WbGeneratePageContentTask: typeof WbGeneratePageContentTaskImpl & {
27
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
28
+ };
29
+ export {};
@@ -0,0 +1,72 @@
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
3
+ import { compress } from "@webiny/utils/features/compression/legacy/gzip.js";
4
+ import { WbGeneratePageContentUseCase } from "./index.js";
5
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
6
+ export const WB_GENERATE_PAGE_CONTENT_TASK_ID = "aiPowerUpsGeneratePageContent";
7
+ class WbGeneratePageContentTaskImpl {
8
+ id = WB_GENERATE_PAGE_CONTENT_TASK_ID;
9
+ title = "AI Power-Ups - Generate Page Content";
10
+ description = "Generates page content using AI based on a user prompt.";
11
+ maxIterations = 1;
12
+ isPrivate = true;
13
+ databaseLogs = false;
14
+ constructor(identityContext, generatePageContent, websocketService) {
15
+ this.identityContext = identityContext;
16
+ this.generatePageContent = generatePageContent;
17
+ this.websocketService = websocketService;
18
+ }
19
+ async run({
20
+ input,
21
+ controller
22
+ }) {
23
+ if (controller.runtime.isAborted()) {
24
+ return controller.response.aborted();
25
+ }
26
+ const result = await this.generatePageContent.execute({
27
+ prompt: input.prompt,
28
+ components: input.components,
29
+ tools: input.tools
30
+ });
31
+ const identity = this.identityContext.getIdentity();
32
+ if (result.isFail()) {
33
+ await this.sendErrorToUser(identity.id, result.error.message);
34
+ return controller.response.error({
35
+ message: result.error.message
36
+ });
37
+ }
38
+
39
+ // Send websocket message
40
+ const compressed = await compress(result.value);
41
+ const payload = compressed.toString("base64");
42
+ await this.sendContentToUser(identity.id, payload);
43
+ return controller.response.done("Page content generated successfully.");
44
+ }
45
+ async sendContentToUser(identityId, payload) {
46
+ await this.websocketService.send({
47
+ id: identityId
48
+ }, {
49
+ action: "aiPowerUps.generatePageContent.content",
50
+ data: {
51
+ compression: "gzip",
52
+ value: payload
53
+ }
54
+ });
55
+ }
56
+ async sendErrorToUser(identityId, message) {
57
+ await this.websocketService.send({
58
+ id: identityId
59
+ }, {
60
+ action: "aiPowerUps.generatePageContent.error",
61
+ data: {
62
+ message
63
+ }
64
+ });
65
+ }
66
+ }
67
+ export const WbGeneratePageContentTask = TaskDefinition.createImplementation({
68
+ implementation: WbGeneratePageContentTaskImpl,
69
+ dependencies: [IdentityContext, WbGeneratePageContentUseCase, WebsocketService]
70
+ });
71
+
72
+ //# sourceMappingURL=WbGeneratePageContentTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TaskDefinition","WebsocketService","compress","WbGeneratePageContentUseCase","IdentityContext","WB_GENERATE_PAGE_CONTENT_TASK_ID","WbGeneratePageContentTaskImpl","id","title","description","maxIterations","isPrivate","databaseLogs","constructor","identityContext","generatePageContent","websocketService","run","input","controller","runtime","isAborted","response","aborted","result","execute","prompt","components","tools","identity","getIdentity","isFail","sendErrorToUser","error","message","compressed","value","payload","toString","sendContentToUser","done","identityId","send","action","data","compression","WbGeneratePageContentTask","createImplementation","implementation","dependencies"],"sources":["WbGeneratePageContentTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { WebsocketService } from \"@webiny/api-websockets/features/WebsocketService/index.js\";\nimport { compress } from \"@webiny/utils/features/compression/legacy/gzip.js\";\nimport { WbGeneratePageContentUseCase } from \"~/api/features/WbGeneratePageContent/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\n\nexport const WB_GENERATE_PAGE_CONTENT_TASK_ID = \"aiPowerUpsGeneratePageContent\";\n\nexport interface IWbGeneratePageContentTaskInput {\n prompt: string;\n components: unknown;\n tools: unknown;\n}\n\nclass WbGeneratePageContentTaskImpl implements TaskDefinition.Interface<IWbGeneratePageContentTaskInput> {\n id = WB_GENERATE_PAGE_CONTENT_TASK_ID;\n title = \"AI Power-Ups - Generate Page Content\";\n description = \"Generates page content using AI based on a user prompt.\";\n maxIterations = 1;\n isPrivate = true;\n databaseLogs = false;\n\n constructor(\n private identityContext: IdentityContext.Interface,\n private generatePageContent: WbGeneratePageContentUseCase.Interface,\n private websocketService: WebsocketService.Interface\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IWbGeneratePageContentTaskInput>): Promise<\n TaskDefinition.Result<IWbGeneratePageContentTaskInput>\n > {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const result = await this.generatePageContent.execute({\n prompt: input.prompt,\n components: input.components,\n tools: input.tools\n });\n\n const identity = this.identityContext.getIdentity();\n\n if (result.isFail()) {\n await this.sendErrorToUser(identity.id, result.error.message);\n\n return controller.response.error({\n message: result.error.message\n });\n }\n\n // Send websocket message\n const compressed = await compress(result.value);\n const payload = compressed.toString(\"base64\");\n\n await this.sendContentToUser(identity.id, payload);\n\n return controller.response.done(\"Page content generated successfully.\");\n }\n\n private async sendContentToUser(identityId: string, payload: string) {\n await this.websocketService.send(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.content\",\n data: {\n compression: \"gzip\",\n value: payload\n }\n }\n );\n }\n\n private async sendErrorToUser(identityId: string, message: string) {\n await this.websocketService.send(\n { id: identityId },\n {\n action: \"aiPowerUps.generatePageContent.error\",\n data: {\n message\n }\n }\n );\n }\n}\n\nexport const WbGeneratePageContentTask = TaskDefinition.createImplementation({\n implementation: WbGeneratePageContentTaskImpl,\n dependencies: [IdentityContext, WbGeneratePageContentUseCase, WebsocketService]\n});\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,wDAAwD;AACvF,SAASC,gBAAgB,QAAQ,2DAA2D;AAC5F,SAASC,QAAQ,QAAQ,mDAAmD;AAC5E,SAASC,4BAA4B;AACrC,SAASC,eAAe,QAAQ,0CAA0C;AAE1E,OAAO,MAAMC,gCAAgC,GAAG,+BAA+B;AAQ/E,MAAMC,6BAA6B,CAAsE;EACrGC,EAAE,GAAGF,gCAAgC;EACrCG,KAAK,GAAG,sCAAsC;EAC9CC,WAAW,GAAG,yDAAyD;EACvEC,aAAa,GAAG,CAAC;EACjBC,SAAS,GAAG,IAAI;EAChBC,YAAY,GAAG,KAAK;EAEpBC,WAAWA,CACCC,eAA0C,EAC1CC,mBAA2D,EAC3DC,gBAA4C,EACtD;IAAA,KAHUF,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,mBAA2D,GAA3DA,mBAA2D;IAAA,KAC3DC,gBAA4C,GAA5CA,gBAA4C;EACrD;EAEH,MAAMC,GAAGA,CAAC;IACNC,KAAK;IACLC;EACuD,CAAC,EAE1D;IACE,IAAIA,UAAU,CAACC,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE;MAChC,OAAOF,UAAU,CAACG,QAAQ,CAACC,OAAO,CAAC,CAAC;IACxC;IAEA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACT,mBAAmB,CAACU,OAAO,CAAC;MAClDC,MAAM,EAAER,KAAK,CAACQ,MAAM;MACpBC,UAAU,EAAET,KAAK,CAACS,UAAU;MAC5BC,KAAK,EAAEV,KAAK,CAACU;IACjB,CAAC,CAAC;IAEF,MAAMC,QAAQ,GAAG,IAAI,CAACf,eAAe,CAACgB,WAAW,CAAC,CAAC;IAEnD,IAAIN,MAAM,CAACO,MAAM,CAAC,CAAC,EAAE;MACjB,MAAM,IAAI,CAACC,eAAe,CAACH,QAAQ,CAACtB,EAAE,EAAEiB,MAAM,CAACS,KAAK,CAACC,OAAO,CAAC;MAE7D,OAAOf,UAAU,CAACG,QAAQ,CAACW,KAAK,CAAC;QAC7BC,OAAO,EAAEV,MAAM,CAACS,KAAK,CAACC;MAC1B,CAAC,CAAC;IACN;;IAEA;IACA,MAAMC,UAAU,GAAG,MAAMjC,QAAQ,CAACsB,MAAM,CAACY,KAAK,CAAC;IAC/C,MAAMC,OAAO,GAAGF,UAAU,CAACG,QAAQ,CAAC,QAAQ,CAAC;IAE7C,MAAM,IAAI,CAACC,iBAAiB,CAACV,QAAQ,CAACtB,EAAE,EAAE8B,OAAO,CAAC;IAElD,OAAOlB,UAAU,CAACG,QAAQ,CAACkB,IAAI,CAAC,sCAAsC,CAAC;EAC3E;EAEA,MAAcD,iBAAiBA,CAACE,UAAkB,EAAEJ,OAAe,EAAE;IACjE,MAAM,IAAI,CAACrB,gBAAgB,CAAC0B,IAAI,CAC5B;MAAEnC,EAAE,EAAEkC;IAAW,CAAC,EAClB;MACIE,MAAM,EAAE,wCAAwC;MAChDC,IAAI,EAAE;QACFC,WAAW,EAAE,MAAM;QACnBT,KAAK,EAAEC;MACX;IACJ,CACJ,CAAC;EACL;EAEA,MAAcL,eAAeA,CAACS,UAAkB,EAAEP,OAAe,EAAE;IAC/D,MAAM,IAAI,CAAClB,gBAAgB,CAAC0B,IAAI,CAC5B;MAAEnC,EAAE,EAAEkC;IAAW,CAAC,EAClB;MACIE,MAAM,EAAE,sCAAsC;MAC9CC,IAAI,EAAE;QACFV;MACJ;IACJ,CACJ,CAAC;EACL;AACJ;AAEA,OAAO,MAAMY,yBAAyB,GAAG9C,cAAc,CAAC+C,oBAAoB,CAAC;EACzEC,cAAc,EAAE1C,6BAA6B;EAC7C2C,YAAY,EAAE,CAAC7C,eAAe,EAAED,4BAA4B,EAAEF,gBAAgB;AAClF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { Ai } from "@webiny/api-core/features/ai/index.js";
3
+ import { AiSdkTools } from "@webiny/api-core/features/ai/index.js";
4
+ import { GetSettingsUseCase } from "../../../api/features/GetSettings/index.js";
5
+ import { WbGeneratePageContentUseCase } from "./abstractions.js";
6
+ import type { WbGeneratePageContentParams } from "./abstractions.js";
7
+ declare class WbGeneratePageContentUseCaseImpl implements WbGeneratePageContentUseCase.Interface {
8
+ private getSettings;
9
+ private ai;
10
+ private aiSdkTools;
11
+ constructor(getSettings: GetSettingsUseCase.Interface, ai: Ai.Interface, aiSdkTools: AiSdkTools.Interface);
12
+ execute(params: WbGeneratePageContentParams): Promise<Result<string, Error>>;
13
+ }
14
+ export declare const WbGeneratePageContentUseCaseImplementation: typeof WbGeneratePageContentUseCaseImpl & {
15
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IWbGeneratePageContentUseCase>;
16
+ };
17
+ export {};
@@ -0,0 +1,62 @@
1
+ import { stepCountIs } from "ai";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { Ai } from "@webiny/api-core/features/ai/index.js";
4
+ import { AiSdkTools } from "@webiny/api-core/features/ai/index.js";
5
+ import { GetSettingsUseCase } from "../GetSettings/index.js";
6
+ import { WbGeneratePageContentUseCase } from "./abstractions.js";
7
+ import { buildSystemPrompt } from "./buildPrompt.js";
8
+ function stripCodeFence(text) {
9
+ return text.replace(/^```(?:json)?\s*\n?/, "").replace(/\n?```\s*$/, "").trim();
10
+ }
11
+ class WbGeneratePageContentUseCaseImpl {
12
+ constructor(getSettings, ai, aiSdkTools) {
13
+ this.getSettings = getSettings;
14
+ this.ai = ai;
15
+ this.aiSdkTools = aiSdkTools;
16
+ }
17
+ async execute(params) {
18
+ const settingsResult = await this.getSettings.execute();
19
+ if (settingsResult.isFail()) {
20
+ return Result.fail(new Error("Failed to load AI PowerUps settings."));
21
+ }
22
+ const settings = settingsResult.value;
23
+ const firstProvider = settings.providers.presets[0];
24
+ if (!firstProvider) {
25
+ return Result.fail(new Error("No AI provider configured. Add a provider in AI Power Ups settings."));
26
+ }
27
+
28
+ // TODO: configure this in `ai` as default behavior.
29
+ const sdkTools = this.aiSdkTools.getToolSet();
30
+ const system = buildSystemPrompt(params.components, params.tools);
31
+ try {
32
+ const aiResult = await this.ai.generateText({
33
+ model: firstProvider.model,
34
+ connection: {
35
+ sdkName: firstProvider.model.split("/")[0],
36
+ apiKey: firstProvider.apiKey
37
+ },
38
+ system,
39
+ toolChoice: "auto",
40
+ prompt: params.prompt,
41
+ ...(Object.keys(sdkTools).length > 0 ? {
42
+ tools: sdkTools,
43
+ stopWhen: stepCountIs(10)
44
+ } : {})
45
+ });
46
+
47
+ // result.text might be empty if the last step was a tool call.
48
+ // Find the last step that has text content:
49
+ const text = aiResult.text || (aiResult.steps.filter(step => step.text.length > 0).pop()?.text ?? "");
50
+ const output = stripCodeFence(text);
51
+ return Result.ok(output);
52
+ } catch (error) {
53
+ return Result.fail(new Error(`AI generation failed: ${error instanceof Error ? error.message : String(error)}`));
54
+ }
55
+ }
56
+ }
57
+ export const WbGeneratePageContentUseCaseImplementation = WbGeneratePageContentUseCase.createImplementation({
58
+ implementation: WbGeneratePageContentUseCaseImpl,
59
+ dependencies: [GetSettingsUseCase, Ai, AiSdkTools]
60
+ });
61
+
62
+ //# sourceMappingURL=WbGeneratePageContentUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["stepCountIs","Result","Ai","AiSdkTools","GetSettingsUseCase","WbGeneratePageContentUseCase","buildSystemPrompt","stripCodeFence","text","replace","trim","WbGeneratePageContentUseCaseImpl","constructor","getSettings","ai","aiSdkTools","execute","params","settingsResult","isFail","fail","Error","settings","value","firstProvider","providers","presets","sdkTools","getToolSet","system","components","tools","aiResult","generateText","model","connection","sdkName","split","apiKey","toolChoice","prompt","Object","keys","length","stopWhen","steps","filter","step","pop","output","ok","error","message","String","WbGeneratePageContentUseCaseImplementation","createImplementation","implementation","dependencies"],"sources":["WbGeneratePageContentUseCase.ts"],"sourcesContent":["import { stepCountIs } from \"ai\";\nimport { Result } from \"@webiny/feature/api\";\nimport { Ai } from \"@webiny/api-core/features/ai/index.js\";\nimport { AiSdkTools } from \"@webiny/api-core/features/ai/index.js\";\nimport { GetSettingsUseCase } from \"~/api/features/GetSettings/index.js\";\nimport { WbGeneratePageContentUseCase } from \"./abstractions.js\";\nimport type { WbGeneratePageContentParams } from \"./abstractions.js\";\nimport { buildSystemPrompt } from \"./buildPrompt.js\";\n\nfunction stripCodeFence(text: string): string {\n return text\n .replace(/^```(?:json)?\\s*\\n?/, \"\")\n .replace(/\\n?```\\s*$/, \"\")\n .trim();\n}\n\nclass WbGeneratePageContentUseCaseImpl implements WbGeneratePageContentUseCase.Interface {\n constructor(\n private getSettings: GetSettingsUseCase.Interface,\n private ai: Ai.Interface,\n private aiSdkTools: AiSdkTools.Interface\n ) {}\n\n async execute(params: WbGeneratePageContentParams): Promise<Result<string, Error>> {\n const settingsResult = await this.getSettings.execute();\n if (settingsResult.isFail()) {\n return Result.fail(new Error(\"Failed to load AI PowerUps settings.\"));\n }\n\n const settings = settingsResult.value;\n const firstProvider = settings.providers.presets[0];\n\n if (!firstProvider) {\n return Result.fail(\n new Error(\"No AI provider configured. Add a provider in AI Power Ups settings.\")\n );\n }\n\n // TODO: configure this in `ai` as default behavior.\n const sdkTools = this.aiSdkTools.getToolSet();\n\n const system = buildSystemPrompt(params.components, params.tools);\n\n try {\n const aiResult = await this.ai.generateText({\n model: firstProvider.model,\n connection: {\n sdkName: firstProvider.model.split(\"/\")[0],\n apiKey: firstProvider.apiKey\n },\n system,\n toolChoice: \"auto\",\n prompt: params.prompt,\n ...(Object.keys(sdkTools).length > 0\n ? { tools: sdkTools, stopWhen: stepCountIs(10) }\n : {})\n });\n\n // result.text might be empty if the last step was a tool call.\n // Find the last step that has text content:\n const text =\n aiResult.text ||\n (aiResult.steps.filter(step => step.text.length > 0).pop()?.text ?? \"\");\n\n const output = stripCodeFence(text);\n\n return Result.ok(output);\n } catch (error) {\n return Result.fail(\n new Error(\n `AI generation failed: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n }\n }\n}\n\nexport const WbGeneratePageContentUseCaseImplementation =\n WbGeneratePageContentUseCase.createImplementation({\n implementation: WbGeneratePageContentUseCaseImpl,\n dependencies: [GetSettingsUseCase, Ai, AiSdkTools]\n });\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,IAAI;AAChC,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,EAAE,QAAQ,uCAAuC;AAC1D,SAASC,UAAU,QAAQ,uCAAuC;AAClE,SAASC,kBAAkB;AAC3B,SAASC,4BAA4B;AAErC,SAASC,iBAAiB;AAE1B,SAASC,cAAcA,CAACC,IAAY,EAAU;EAC1C,OAAOA,IAAI,CACNC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAClCA,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CACzBC,IAAI,CAAC,CAAC;AACf;AAEA,MAAMC,gCAAgC,CAAmD;EACrFC,WAAWA,CACCC,WAAyC,EACzCC,EAAgB,EAChBC,UAAgC,EAC1C;IAAA,KAHUF,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,EAAgB,GAAhBA,EAAgB;IAAA,KAChBC,UAAgC,GAAhCA,UAAgC;EACzC;EAEH,MAAMC,OAAOA,CAACC,MAAmC,EAAkC;IAC/E,MAAMC,cAAc,GAAG,MAAM,IAAI,CAACL,WAAW,CAACG,OAAO,CAAC,CAAC;IACvD,IAAIE,cAAc,CAACC,MAAM,CAAC,CAAC,EAAE;MACzB,OAAOlB,MAAM,CAACmB,IAAI,CAAC,IAAIC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzE;IAEA,MAAMC,QAAQ,GAAGJ,cAAc,CAACK,KAAK;IACrC,MAAMC,aAAa,GAAGF,QAAQ,CAACG,SAAS,CAACC,OAAO,CAAC,CAAC,CAAC;IAEnD,IAAI,CAACF,aAAa,EAAE;MAChB,OAAOvB,MAAM,CAACmB,IAAI,CACd,IAAIC,KAAK,CAAC,qEAAqE,CACnF,CAAC;IACL;;IAEA;IACA,MAAMM,QAAQ,GAAG,IAAI,CAACZ,UAAU,CAACa,UAAU,CAAC,CAAC;IAE7C,MAAMC,MAAM,GAAGvB,iBAAiB,CAACW,MAAM,CAACa,UAAU,EAAEb,MAAM,CAACc,KAAK,CAAC;IAEjE,IAAI;MACA,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAAClB,EAAE,CAACmB,YAAY,CAAC;QACxCC,KAAK,EAAEV,aAAa,CAACU,KAAK;QAC1BC,UAAU,EAAE;UACRC,OAAO,EAAEZ,aAAa,CAACU,KAAK,CAACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;UAC1CC,MAAM,EAAEd,aAAa,CAACc;QAC1B,CAAC;QACDT,MAAM;QACNU,UAAU,EAAE,MAAM;QAClBC,MAAM,EAAEvB,MAAM,CAACuB,MAAM;QACrB,IAAIC,MAAM,CAACC,IAAI,CAACf,QAAQ,CAAC,CAACgB,MAAM,GAAG,CAAC,GAC9B;UAAEZ,KAAK,EAAEJ,QAAQ;UAAEiB,QAAQ,EAAE5C,WAAW,CAAC,EAAE;QAAE,CAAC,GAC9C,CAAC,CAAC;MACZ,CAAC,CAAC;;MAEF;MACA;MACA,MAAMQ,IAAI,GACNwB,QAAQ,CAACxB,IAAI,KACZwB,QAAQ,CAACa,KAAK,CAACC,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACvC,IAAI,CAACmC,MAAM,GAAG,CAAC,CAAC,CAACK,GAAG,CAAC,CAAC,EAAExC,IAAI,IAAI,EAAE,CAAC;MAE3E,MAAMyC,MAAM,GAAG1C,cAAc,CAACC,IAAI,CAAC;MAEnC,OAAOP,MAAM,CAACiD,EAAE,CAACD,MAAM,CAAC;IAC5B,CAAC,CAAC,OAAOE,KAAK,EAAE;MACZ,OAAOlD,MAAM,CAACmB,IAAI,CACd,IAAIC,KAAK,CACL,yBAAyB8B,KAAK,YAAY9B,KAAK,GAAG8B,KAAK,CAACC,OAAO,GAAGC,MAAM,CAACF,KAAK,CAAC,EACnF,CACJ,CAAC;IACL;EACJ;AACJ;AAEA,OAAO,MAAMG,0CAA0C,GACnDjD,4BAA4B,CAACkD,oBAAoB,CAAC;EAC9CC,cAAc,EAAE7C,gCAAgC;EAChD8C,YAAY,EAAE,CAACrD,kBAAkB,EAAEF,EAAE,EAAEC,UAAU;AACrD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ export interface WbGeneratePageContentParams {
3
+ prompt: string;
4
+ components: unknown;
5
+ tools: unknown;
6
+ }
7
+ export interface IWbGeneratePageContentUseCase {
8
+ execute(params: WbGeneratePageContentParams): Promise<Result<string, Error>>;
9
+ }
10
+ export declare const WbGeneratePageContentUseCase: import("@webiny/di").Abstraction<IWbGeneratePageContentUseCase>;
11
+ export declare namespace WbGeneratePageContentUseCase {
12
+ type Interface = IWbGeneratePageContentUseCase;
13
+ type Params = WbGeneratePageContentParams;
14
+ }
@@ -0,0 +1,4 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ export const WbGeneratePageContentUseCase = createAbstraction("AiPowerUpsWbGeneratePageContentUseCase");
3
+
4
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","WbGeneratePageContentUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\n\nexport interface WbGeneratePageContentParams {\n prompt: string;\n components: unknown;\n tools: unknown;\n}\n\nexport interface IWbGeneratePageContentUseCase {\n execute(params: WbGeneratePageContentParams): Promise<Result<string, Error>>;\n}\n\nexport const WbGeneratePageContentUseCase = createAbstraction<IWbGeneratePageContentUseCase>(\n \"AiPowerUpsWbGeneratePageContentUseCase\"\n);\n\nexport namespace WbGeneratePageContentUseCase {\n export type Interface = IWbGeneratePageContentUseCase;\n export type Params = WbGeneratePageContentParams;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;AAY/D,OAAO,MAAMC,4BAA4B,GAAGD,iBAAiB,CACzD,wCACJ,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare function buildSystemPrompt(components: unknown, tools: unknown): string;