@webiny/ai-powerups 6.5.1 → 6.5.2-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 (121) hide show
  1. package/admin/Extension.js +16 -2
  2. package/admin/Extension.js.map +1 -1
  3. package/admin/features/permissions/abstractions.d.ts +17 -0
  4. package/admin/features/permissions/abstractions.js +6 -0
  5. package/admin/features/permissions/abstractions.js.map +1 -0
  6. package/admin/features/permissions/feature.d.ts +14 -0
  7. package/admin/features/permissions/feature.js +7 -0
  8. package/admin/features/permissions/feature.js.map +1 -0
  9. package/admin/features/permissions/index.d.ts +2 -0
  10. package/admin/features/permissions/index.js +2 -0
  11. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.d.ts +2 -2
  12. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js +2 -2
  13. package/admin/presentation/CmsCompareEntryRevisions/CmsCompareEntryRevisionsPresenter.js.map +1 -1
  14. package/admin/presentation/CmsCompareEntryRevisions/feature.js +2 -2
  15. package/admin/presentation/CmsCompareEntryRevisions/feature.js.map +1 -1
  16. package/admin/presentation/security/HasPermission.d.ts +10 -0
  17. package/admin/presentation/security/HasPermission.js +6 -0
  18. package/admin/presentation/security/HasPermission.js.map +1 -0
  19. package/api/Extension.js +6 -0
  20. package/api/Extension.js.map +1 -1
  21. package/api/features/Capabilities/ListAiCapabilitiesUseCase.d.ts +7 -4
  22. package/api/features/Capabilities/ListAiCapabilitiesUseCase.js +11 -5
  23. package/api/features/Capabilities/ListAiCapabilitiesUseCase.js.map +1 -1
  24. package/api/features/Capabilities/ResolveAiCapabilityUseCase.d.ts +4 -6
  25. package/api/features/Capabilities/ResolveAiCapabilityUseCase.js +12 -11
  26. package/api/features/Capabilities/ResolveAiCapabilityUseCase.js.map +1 -1
  27. package/api/features/Capabilities/abstractions.d.ts +1 -1
  28. package/api/features/Capabilities/abstractions.js.map +1 -1
  29. package/api/features/Capabilities/feature.js +4 -4
  30. package/api/features/Capabilities/feature.js.map +1 -1
  31. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.d.ts +5 -3
  32. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js +11 -6
  33. package/api/features/CmsCompareEntryRevisions/CmsCompareEntryRevisionsUseCase.js.map +1 -1
  34. package/api/features/CmsCompareEntryRevisions/feature.js +2 -2
  35. package/api/features/CmsCompareEntryRevisions/feature.js.map +1 -1
  36. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.d.ts +2 -2
  37. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js +3 -3
  38. package/api/features/CmsGenerateEntryContent/CmsGenerateEntryContentUseCase.js.map +1 -1
  39. package/api/features/CmsGenerateEntryContent/QueueCmsGenerateEntryContentUseCase.d.ts +19 -0
  40. package/api/features/CmsGenerateEntryContent/QueueCmsGenerateEntryContentUseCase.js +61 -0
  41. package/api/features/CmsGenerateEntryContent/QueueCmsGenerateEntryContentUseCase.js.map +1 -0
  42. package/api/features/CmsGenerateEntryContent/abstractions.d.ts +14 -0
  43. package/api/features/CmsGenerateEntryContent/abstractions.js +2 -1
  44. package/api/features/CmsGenerateEntryContent/abstractions.js.map +1 -1
  45. package/api/features/CmsGenerateEntryContent/feature.js +4 -2
  46. package/api/features/CmsGenerateEntryContent/feature.js.map +1 -1
  47. package/api/features/CmsGenerateEntryContent/index.d.ts +1 -1
  48. package/api/features/CmsGenerateEntryContent/index.js +1 -1
  49. package/api/features/Connections/ConnectionsGraphQLMapper.js +1 -1
  50. package/api/features/Connections/ConnectionsGraphQLMapper.js.map +1 -1
  51. package/api/features/GetDecryptedSettings/GetDecryptedSettingsUseCase.d.ts +17 -0
  52. package/api/features/GetDecryptedSettings/GetDecryptedSettingsUseCase.js +41 -0
  53. package/api/features/GetDecryptedSettings/GetDecryptedSettingsUseCase.js.map +1 -0
  54. package/api/features/GetDecryptedSettings/abstractions.d.ts +13 -0
  55. package/api/features/GetDecryptedSettings/abstractions.js +5 -0
  56. package/api/features/GetDecryptedSettings/abstractions.js.map +1 -0
  57. package/api/features/GetDecryptedSettings/feature.d.ts +4 -0
  58. package/api/features/GetDecryptedSettings/feature.js +11 -0
  59. package/api/features/GetDecryptedSettings/feature.js.map +1 -0
  60. package/api/features/GetDecryptedSettings/index.d.ts +2 -0
  61. package/api/features/GetDecryptedSettings/index.js +2 -0
  62. package/api/features/GetSettings/GetSettingsRepository.d.ts +2 -2
  63. package/api/features/GetSettings/GetSettingsRepository.js +2 -2
  64. package/api/features/GetSettings/GetSettingsRepository.js.map +1 -1
  65. package/api/features/GetSettings/GetSettingsUseCase.d.ts +15 -4
  66. package/api/features/GetSettings/GetSettingsUseCase.js +34 -5
  67. package/api/features/GetSettings/GetSettingsUseCase.js.map +1 -1
  68. package/api/features/GetSettings/abstractions.d.ts +1 -1
  69. package/api/features/GetSettings/abstractions.js.map +1 -1
  70. package/api/features/GetSettings/feature.js +4 -4
  71. package/api/features/GetSettings/feature.js.map +1 -1
  72. package/api/features/ListModels/ListModelsUseCase.d.ts +15 -0
  73. package/api/features/ListModels/ListModelsUseCase.js +25 -0
  74. package/api/features/ListModels/ListModelsUseCase.js.map +1 -0
  75. package/api/features/ListModels/abstractions.d.ts +10 -0
  76. package/api/features/ListModels/abstractions.js +5 -0
  77. package/api/features/ListModels/abstractions.js.map +1 -0
  78. package/api/features/ListModels/feature.d.ts +4 -0
  79. package/api/features/ListModels/feature.js +11 -0
  80. package/api/features/ListModels/feature.js.map +1 -0
  81. package/api/features/ListModels/index.d.ts +1 -0
  82. package/api/features/ListModels/index.js +1 -0
  83. package/api/features/Providers/ProvidersGraphQLMapper.js +1 -1
  84. package/api/features/Providers/ProvidersGraphQLMapper.js.map +1 -1
  85. package/api/features/UpdateSettings/UpdateSettingsRepository.d.ts +2 -2
  86. package/api/features/UpdateSettings/UpdateSettingsRepository.js +2 -2
  87. package/api/features/UpdateSettings/UpdateSettingsRepository.js.map +1 -1
  88. package/api/features/UpdateSettings/UpdateSettingsUseCase.d.ts +5 -3
  89. package/api/features/UpdateSettings/UpdateSettingsUseCase.js +10 -3
  90. package/api/features/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
  91. package/api/features/UpdateSettings/feature.js +4 -4
  92. package/api/features/UpdateSettings/feature.js.map +1 -1
  93. package/api/features/WbGeneratePageContent/QueueWbGeneratePageContentUseCase.d.ts +13 -0
  94. package/api/features/WbGeneratePageContent/QueueWbGeneratePageContentUseCase.js +42 -0
  95. package/api/features/WbGeneratePageContent/QueueWbGeneratePageContentUseCase.js.map +1 -0
  96. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.d.ts +2 -2
  97. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js +2 -2
  98. package/api/features/WbGeneratePageContent/WbGeneratePageContentUseCase.js.map +1 -1
  99. package/api/features/WbGeneratePageContent/abstractions.d.ts +14 -0
  100. package/api/features/WbGeneratePageContent/abstractions.js +2 -1
  101. package/api/features/WbGeneratePageContent/abstractions.js.map +1 -1
  102. package/api/features/WbGeneratePageContent/feature.js +4 -2
  103. package/api/features/WbGeneratePageContent/feature.js.map +1 -1
  104. package/api/features/WbGeneratePageContent/index.d.ts +1 -1
  105. package/api/features/WbGeneratePageContent/index.js +1 -1
  106. package/api/features/permissions/abstractions.d.ts +15 -0
  107. package/api/features/permissions/abstractions.js +6 -0
  108. package/api/features/permissions/abstractions.js.map +1 -0
  109. package/api/features/permissions/feature.d.ts +4 -0
  110. package/api/features/permissions/feature.js +7 -0
  111. package/api/features/permissions/feature.js.map +1 -0
  112. package/api/features/permissions/index.d.ts +2 -0
  113. package/api/features/permissions/index.js +2 -0
  114. package/api/graphql/BaseGraphQLSchema.js +22 -45
  115. package/api/graphql/BaseGraphQLSchema.js.map +1 -1
  116. package/domain/LlmJsonResponse.js +2 -1
  117. package/domain/LlmJsonResponse.js.map +1 -1
  118. package/package.json +30 -28
  119. package/shared/permissionsSchema.d.ts +20 -0
  120. package/shared/permissionsSchema.js +17 -0
  121. package/shared/permissionsSchema.js.map +1 -0
@@ -10,7 +10,7 @@ declare class GetSettingsRepositoryImpl implements GetSettingsRepository.Interfa
10
10
  constructor(keyValueStore: KeyValueStore.Interface, handlers: AiPowerUpsSettingsGroupHandler.Interface[], cache: AiPowerUpsSettingsCache.Interface);
11
11
  get(): Promise<Result<IAiPowerUpsSettings>>;
12
12
  }
13
- export declare const GetSettingsRepositoryImplementation: typeof GetSettingsRepositoryImpl & {
13
+ declare const _default: typeof GetSettingsRepositoryImpl & {
14
14
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetSettingsRepository>;
15
15
  };
16
- export {};
16
+ export default _default;
@@ -22,7 +22,7 @@ class GetSettingsRepositoryImpl {
22
22
  return Result.ok(mapped);
23
23
  }
24
24
  }
25
- const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplementation({
25
+ const GetSettings_GetSettingsRepository = GetSettingsRepository.createImplementation({
26
26
  implementation: GetSettingsRepositoryImpl,
27
27
  dependencies: [
28
28
  KeyValueStore,
@@ -35,6 +35,6 @@ const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplemen
35
35
  AiPowerUpsSettingsCache
36
36
  ]
37
37
  });
38
- export { GetSettingsRepositoryImplementation };
38
+ export default GetSettings_GetSettingsRepository;
39
39
 
40
40
  //# sourceMappingURL=GetSettingsRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/GetSettings/GetSettingsRepository.js","sources":["../../../../src/api/features/GetSettings/GetSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport {\n AiPowerUpsSettingsGroupHandler,\n AiPowerUpsSettingsCache\n} from \"~/api/features/shared/index.js\";\nimport { GetSettingsRepository } from \"./abstractions.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport { AI_POWER_UPS_SETTINGS } from \"~/api/constants.js\";\n\nclass GetSettingsRepositoryImpl implements GetSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private handlers: AiPowerUpsSettingsGroupHandler.Interface[],\n private cache: AiPowerUpsSettingsCache.Interface\n ) {}\n\n async get(): Promise<Result<IAiPowerUpsSettings>> {\n const cached = this.cache.get();\n if (cached) {\n return Result.ok(cached.mapped);\n }\n\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n\n const raw: Record<string, unknown> =\n storeResult.isOk() && storeResult.value ? storeResult.value : {};\n\n const result: Record<string, unknown> = {};\n\n for (const handler of this.handlers) {\n result[handler.name] = handler.mapFromStorage(raw[handler.name], raw);\n }\n\n for (const key of Object.keys(raw)) {\n if (!(key in result)) {\n result[key] = raw[key];\n }\n }\n\n const mapped = result as unknown as IAiPowerUpsSettings;\n this.cache.set(raw, mapped);\n\n return Result.ok(mapped);\n }\n}\n\nexport const GetSettingsRepositoryImplementation = GetSettingsRepository.createImplementation({\n implementation: GetSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\n ]\n});\n"],"names":["GetSettingsRepositoryImpl","keyValueStore","handlers","cache","cached","Result","storeResult","AI_POWER_UPS_SETTINGS","raw","result","handler","key","Object","mapped","GetSettingsRepositoryImplementation","GetSettingsRepository","KeyValueStore","AiPowerUpsSettingsGroupHandler","AiPowerUpsSettingsCache"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAoD,EACpDC,KAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,MAA4C;QAC9C,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAIA,QACA,OAAOC,OAAO,EAAE,CAACD,OAAO,MAAM;QAGlC,MAAME,cACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAA0BC;QAE1D,MAAMC,MACFF,YAAY,IAAI,MAAMA,YAAY,KAAK,GAAGA,YAAY,KAAK,GAAG,CAAC;QAEnE,MAAMG,SAAkC,CAAC;QAEzC,KAAK,MAAMC,WAAW,IAAI,CAAC,QAAQ,CAC/BD,MAAM,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACF,GAAG,CAACE,QAAQ,IAAI,CAAC,EAAEF;QAGrE,KAAK,MAAMG,OAAOC,OAAO,IAAI,CAACJ,KAC1B,IAAI,CAAEG,CAAAA,OAAOF,MAAK,GACdA,MAAM,CAACE,IAAI,GAAGH,GAAG,CAACG,IAAI;QAI9B,MAAME,SAASJ;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAACD,KAAKK;QAEpB,OAAOR,OAAO,EAAE,CAACQ;IACrB;AACJ;AAEO,MAAMC,sCAAsCC,sBAAsB,oBAAoB,CAAC;IAC1F,gBAAgBf;IAChB,cAAc;QACVgB;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
1
+ {"version":3,"file":"api/features/GetSettings/GetSettingsRepository.js","sources":["../../../../src/api/features/GetSettings/GetSettingsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport {\n AiPowerUpsSettingsGroupHandler,\n AiPowerUpsSettingsCache\n} from \"~/api/features/shared/index.js\";\nimport { GetSettingsRepository } from \"./abstractions.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\nimport { AI_POWER_UPS_SETTINGS } from \"~/api/constants.js\";\n\nclass GetSettingsRepositoryImpl implements GetSettingsRepository.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private handlers: AiPowerUpsSettingsGroupHandler.Interface[],\n private cache: AiPowerUpsSettingsCache.Interface\n ) {}\n\n async get(): Promise<Result<IAiPowerUpsSettings>> {\n const cached = this.cache.get();\n if (cached) {\n return Result.ok(cached.mapped);\n }\n\n const storeResult =\n await this.keyValueStore.get<Record<string, unknown>>(AI_POWER_UPS_SETTINGS);\n\n const raw: Record<string, unknown> =\n storeResult.isOk() && storeResult.value ? storeResult.value : {};\n\n const result: Record<string, unknown> = {};\n\n for (const handler of this.handlers) {\n result[handler.name] = handler.mapFromStorage(raw[handler.name], raw);\n }\n\n for (const key of Object.keys(raw)) {\n if (!(key in result)) {\n result[key] = raw[key];\n }\n }\n\n const mapped = result as unknown as IAiPowerUpsSettings;\n this.cache.set(raw, mapped);\n\n return Result.ok(mapped);\n }\n}\n\nexport default GetSettingsRepository.createImplementation({\n implementation: GetSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\n ]\n});\n"],"names":["GetSettingsRepositoryImpl","keyValueStore","handlers","cache","cached","Result","storeResult","AI_POWER_UPS_SETTINGS","raw","result","handler","key","Object","mapped","GetSettingsRepository","KeyValueStore","AiPowerUpsSettingsGroupHandler","AiPowerUpsSettingsCache"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,aAAsC,EACtCC,QAAoD,EACpDC,KAAwC,CAClD;aAHUF,aAAa,GAAbA;aACAC,QAAQ,GAARA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,MAA4C;QAC9C,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG;QAC7B,IAAIA,QACA,OAAOC,OAAO,EAAE,CAACD,OAAO,MAAM;QAGlC,MAAME,cACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAA0BC;QAE1D,MAAMC,MACFF,YAAY,IAAI,MAAMA,YAAY,KAAK,GAAGA,YAAY,KAAK,GAAG,CAAC;QAEnE,MAAMG,SAAkC,CAAC;QAEzC,KAAK,MAAMC,WAAW,IAAI,CAAC,QAAQ,CAC/BD,MAAM,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACF,GAAG,CAACE,QAAQ,IAAI,CAAC,EAAEF;QAGrE,KAAK,MAAMG,OAAOC,OAAO,IAAI,CAACJ,KAC1B,IAAI,CAAEG,CAAAA,OAAOF,MAAK,GACdA,MAAM,CAACE,IAAI,GAAGH,GAAG,CAACG,IAAI;QAI9B,MAAME,SAASJ;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAACD,KAAKK;QAEpB,OAAOR,OAAO,EAAE,CAACQ;IACrB;AACJ;AAEA,0CAAeC,sBAAsB,oBAAoB,CAAC;IACtD,gBAAgBd;IAChB,cAAc;QACVe;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
@@ -1,10 +1,21 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
+ import { AiPowerUpsPermissions } from "../../../api/features/permissions/index.js";
1
4
  import { GetSettingsUseCase, GetSettingsRepository } from "./abstractions.js";
5
+ import type { IAiPowerUpsSettings } from "../../../api/types.js";
6
+ /**
7
+ * Returns the settings without key material that the caller may not see:
8
+ * the encrypted keys never, and the masked keys only with the `aiPowerups.settings` permission.
9
+ * Internal code that needs the keys uses `GetDecryptedSettingsUseCase`.
10
+ */
2
11
  declare class GetSettingsUseCaseImpl implements GetSettingsUseCase.Interface {
12
+ private identityContext;
13
+ private permissions;
3
14
  private repository;
4
- constructor(repository: GetSettingsRepository.Interface);
5
- execute(): Promise<import("@webiny/feature/api").Result<import("~/api/types.js").IAiPowerUpsSettings, never>>;
15
+ constructor(identityContext: IdentityContext.Interface, permissions: AiPowerUpsPermissions.Interface, repository: GetSettingsRepository.Interface);
16
+ execute(): Promise<Result<IAiPowerUpsSettings, Error>>;
6
17
  }
7
- export declare const GetSettingsUseCaseImplementation: typeof GetSettingsUseCaseImpl & {
18
+ declare const _default: typeof GetSettingsUseCaseImpl & {
8
19
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetSettingsUseCase>;
9
20
  };
10
- export {};
21
+ export default _default;
@@ -1,18 +1,47 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
4
+ import { AiPowerUpsPermissions } from "../permissions/index.js";
1
5
  import { GetSettingsRepository, GetSettingsUseCase } from "./abstractions.js";
2
6
  class GetSettingsUseCaseImpl {
3
- constructor(repository){
7
+ constructor(identityContext, permissions, repository){
8
+ this.identityContext = identityContext;
9
+ this.permissions = permissions;
4
10
  this.repository = repository;
5
11
  }
6
- execute() {
7
- return this.repository.get();
12
+ async execute() {
13
+ if (this.identityContext.getIdentity().isAnonymous()) return Result.fail(new NotAuthorizedError());
14
+ const result = await this.repository.get();
15
+ if (result.isFail()) return result;
16
+ const canSeeMaskedKeys = await this.permissions.canAccess("settings");
17
+ const settings = result.value;
18
+ const stripKeys = (presets)=>(presets ?? []).map((preset)=>({
19
+ ...preset,
20
+ apiKey: void 0,
21
+ apiKeyEncrypted: "",
22
+ apiKeyMasked: canSeeMaskedKeys ? preset.apiKeyMasked : ""
23
+ }));
24
+ return Result.ok({
25
+ ...settings,
26
+ providers: {
27
+ ...settings.providers,
28
+ presets: stripKeys(settings.providers?.presets)
29
+ },
30
+ connections: {
31
+ ...settings.connections,
32
+ presets: stripKeys(settings.connections?.presets)
33
+ }
34
+ });
8
35
  }
9
36
  }
10
- const GetSettingsUseCaseImplementation = GetSettingsUseCase.createImplementation({
37
+ const GetSettings_GetSettingsUseCase = GetSettingsUseCase.createImplementation({
11
38
  implementation: GetSettingsUseCaseImpl,
12
39
  dependencies: [
40
+ IdentityContext,
41
+ AiPowerUpsPermissions,
13
42
  GetSettingsRepository
14
43
  ]
15
44
  });
16
- export { GetSettingsUseCaseImplementation };
45
+ export default GetSettings_GetSettingsUseCase;
17
46
 
18
47
  //# sourceMappingURL=GetSettingsUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/GetSettings/GetSettingsUseCase.js","sources":["../../../../src/api/features/GetSettings/GetSettingsUseCase.ts"],"sourcesContent":["import { GetSettingsUseCase, GetSettingsRepository } from \"./abstractions.js\";\n\nclass GetSettingsUseCaseImpl implements GetSettingsUseCase.Interface {\n constructor(private repository: GetSettingsRepository.Interface) {}\n\n execute() {\n return this.repository.get();\n }\n}\n\nexport const GetSettingsUseCaseImplementation = GetSettingsUseCase.createImplementation({\n implementation: GetSettingsUseCaseImpl,\n dependencies: [GetSettingsRepository]\n});\n"],"names":["GetSettingsUseCaseImpl","repository","GetSettingsUseCaseImplementation","GetSettingsUseCase","GetSettingsRepository"],"mappings":";AAEA,MAAMA;IACF,YAAoBC,UAA2C,CAAE;aAA7CA,UAAU,GAAVA;IAA8C;IAElE,UAAU;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG;IAC9B;AACJ;AAEO,MAAMC,mCAAmCC,mBAAmB,oBAAoB,CAAC;IACpF,gBAAgBH;IAChB,cAAc;QAACI;KAAsB;AACzC"}
1
+ {"version":3,"file":"api/features/GetSettings/GetSettingsUseCase.js","sources":["../../../../src/api/features/GetSettings/GetSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { AiPowerUpsPermissions } from \"~/api/features/permissions/index.js\";\nimport { GetSettingsUseCase, GetSettingsRepository } from \"./abstractions.js\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\n\ninterface KeyHolder {\n apiKey?: string;\n apiKeyMasked: string;\n apiKeyEncrypted: string;\n}\n\n/**\n * Returns the settings without key material that the caller may not see:\n * the encrypted keys never, and the masked keys only with the `aiPowerups.settings` permission.\n * Internal code that needs the keys uses `GetDecryptedSettingsUseCase`.\n */\nclass GetSettingsUseCaseImpl implements GetSettingsUseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private permissions: AiPowerUpsPermissions.Interface,\n private repository: GetSettingsRepository.Interface\n ) {}\n\n async execute(): Promise<Result<IAiPowerUpsSettings, Error>> {\n if (this.identityContext.getIdentity().isAnonymous()) {\n return Result.fail(new NotAuthorizedError());\n }\n\n const result = await this.repository.get();\n if (result.isFail()) {\n return result;\n }\n\n const canSeeMaskedKeys = await this.permissions.canAccess(\"settings\");\n const settings = result.value;\n\n // The repository returns a cached object, so build new ones instead of mutating it.\n const stripKeys = <T extends KeyHolder>(presets: T[] | undefined): T[] => {\n return (presets ?? []).map(preset => ({\n ...preset,\n apiKey: undefined,\n apiKeyEncrypted: \"\",\n apiKeyMasked: canSeeMaskedKeys ? preset.apiKeyMasked : \"\"\n }));\n };\n\n return Result.ok({\n ...settings,\n providers: {\n ...settings.providers,\n presets: stripKeys(settings.providers?.presets)\n },\n connections: {\n ...settings.connections,\n presets: stripKeys(settings.connections?.presets)\n }\n });\n }\n}\n\nexport default GetSettingsUseCase.createImplementation({\n implementation: GetSettingsUseCaseImpl,\n dependencies: [IdentityContext, AiPowerUpsPermissions, GetSettingsRepository]\n});\n"],"names":["GetSettingsUseCaseImpl","identityContext","permissions","repository","Result","NotAuthorizedError","result","canSeeMaskedKeys","settings","stripKeys","presets","preset","undefined","GetSettingsUseCase","IdentityContext","AiPowerUpsPermissions","GetSettingsRepository"],"mappings":";;;;;AAkBA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,WAA4C,EAC5CC,UAA2C,CACrD;aAHUF,eAAe,GAAfA;aACAC,WAAW,GAAXA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,UAAuD;QACzD,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,WAAW,IAC9C,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAMC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG;QACxC,IAAIA,OAAO,MAAM,IACb,OAAOA;QAGX,MAAMC,mBAAmB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC1D,MAAMC,WAAWF,OAAO,KAAK;QAG7B,MAAMG,YAAY,CAAsBC,UAC5BA,AAAAA,CAAAA,WAAW,EAAC,EAAG,GAAG,CAACC,CAAAA,SAAW;oBAClC,GAAGA,MAAM;oBACT,QAAQC;oBACR,iBAAiB;oBACjB,cAAcL,mBAAmBI,OAAO,YAAY,GAAG;gBAC3D;QAGJ,OAAOP,OAAO,EAAE,CAAC;YACb,GAAGI,QAAQ;YACX,WAAW;gBACP,GAAGA,SAAS,SAAS;gBACrB,SAASC,UAAUD,SAAS,SAAS,EAAE;YAC3C;YACA,aAAa;gBACT,GAAGA,SAAS,WAAW;gBACvB,SAASC,UAAUD,SAAS,WAAW,EAAE;YAC7C;QACJ;IACJ;AACJ;AAEA,uCAAeK,mBAAmB,oBAAoB,CAAC;IACnD,gBAAgBb;IAChB,cAAc;QAACc;QAAiBC;QAAuBC;KAAsB;AACjF"}
@@ -8,7 +8,7 @@ export declare namespace GetSettingsRepository {
8
8
  type Interface = IGetSettingsRepository;
9
9
  }
10
10
  export interface IGetSettingsUseCase {
11
- execute(): Promise<Result<IAiPowerUpsSettings>>;
11
+ execute(): Promise<Result<IAiPowerUpsSettings, Error>>;
12
12
  }
13
13
  export declare const GetSettingsUseCase: import("@webiny/di").Abstraction<IGetSettingsUseCase>;
14
14
  export declare namespace GetSettingsUseCase {
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/GetSettings/abstractions.js","sources":["../../../../src/api/features/GetSettings/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\n\nexport interface IGetSettingsRepository {\n get(): Promise<Result<IAiPowerUpsSettings>>;\n}\n\nexport const GetSettingsRepository = createAbstraction<IGetSettingsRepository>(\n \"AiPowerUpsGetSettingsRepository\"\n);\n\nexport namespace GetSettingsRepository {\n export type Interface = IGetSettingsRepository;\n}\n\nexport interface IGetSettingsUseCase {\n execute(): Promise<Result<IAiPowerUpsSettings>>;\n}\n\nexport const GetSettingsUseCase = createAbstraction<IGetSettingsUseCase>(\n \"AiPowerUpsGetSettingsUseCase\"\n);\n\nexport namespace GetSettingsUseCase {\n export type Interface = IGetSettingsUseCase;\n}\n"],"names":["GetSettingsRepository","createAbstraction","GetSettingsUseCase"],"mappings":";AAOO,MAAMA,wBAAwBC,kBACjC;AAWG,MAAMC,qBAAqBD,kBAC9B"}
1
+ {"version":3,"file":"api/features/GetSettings/abstractions.js","sources":["../../../../src/api/features/GetSettings/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IAiPowerUpsSettings } from \"~/api/types.js\";\n\nexport interface IGetSettingsRepository {\n get(): Promise<Result<IAiPowerUpsSettings>>;\n}\n\nexport const GetSettingsRepository = createAbstraction<IGetSettingsRepository>(\n \"AiPowerUpsGetSettingsRepository\"\n);\n\nexport namespace GetSettingsRepository {\n export type Interface = IGetSettingsRepository;\n}\n\nexport interface IGetSettingsUseCase {\n execute(): Promise<Result<IAiPowerUpsSettings, Error>>;\n}\n\nexport const GetSettingsUseCase = createAbstraction<IGetSettingsUseCase>(\n \"AiPowerUpsGetSettingsUseCase\"\n);\n\nexport namespace GetSettingsUseCase {\n export type Interface = IGetSettingsUseCase;\n}\n"],"names":["GetSettingsRepository","createAbstraction","GetSettingsUseCase"],"mappings":";AAOO,MAAMA,wBAAwBC,kBACjC;AAWG,MAAMC,qBAAqBD,kBAC9B"}
@@ -1,11 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
- import { GetSettingsRepositoryImplementation } from "./GetSettingsRepository.js";
3
- import { GetSettingsUseCaseImplementation } from "./GetSettingsUseCase.js";
2
+ import GetSettingsRepository from "./GetSettingsRepository.js";
3
+ import GetSettingsUseCase from "./GetSettingsUseCase.js";
4
4
  const GetSettingsFeature = createFeature({
5
5
  name: "AiPowerUpsGetSettings",
6
6
  register (container) {
7
- container.register(GetSettingsRepositoryImplementation).inSingletonScope();
8
- container.register(GetSettingsUseCaseImplementation);
7
+ container.register(GetSettingsRepository).inSingletonScope();
8
+ container.register(GetSettingsUseCase);
9
9
  }
10
10
  });
11
11
  export { GetSettingsFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/GetSettings/feature.js","sources":["../../../../src/api/features/GetSettings/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"],"names":["GetSettingsFeature","createFeature","container","GetSettingsRepositoryImplementation","GetSettingsUseCaseImplementation"],"mappings":";;;AAIO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,qCAAqC,gBAAgB;QACxED,UAAU,QAAQ,CAACE;IACvB;AACJ"}
1
+ {"version":3,"file":"api/features/GetSettings/feature.js","sources":["../../../../src/api/features/GetSettings/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport GetSettingsRepository from \"./GetSettingsRepository.js\";\nimport GetSettingsUseCase from \"./GetSettingsUseCase.js\";\n\nexport const GetSettingsFeature = createFeature({\n name: \"AiPowerUpsGetSettings\",\n register(container) {\n container.register(GetSettingsRepository).inSingletonScope();\n container.register(GetSettingsUseCase);\n }\n});\n"],"names":["GetSettingsFeature","createFeature","container","GetSettingsRepository","GetSettingsUseCase"],"mappings":";;;AAIO,MAAMA,qBAAqBC,cAAc;IAC5C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,uBAAuB,gBAAgB;QAC1DD,UAAU,QAAQ,CAACE;IACvB;AACJ"}
@@ -0,0 +1,15 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { AiModelRegistry } from "@webiny/api-core/features/ai/index.js";
3
+ import type { AiModel } from "@webiny/api-core/features/ai/index.js";
4
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
+ import { ListModelsUseCase } from "./abstractions.js";
6
+ declare class ListModelsUseCaseImpl implements ListModelsUseCase.Interface {
7
+ private identityContext;
8
+ private registry;
9
+ constructor(identityContext: IdentityContext.Interface, registry: AiModelRegistry.Interface);
10
+ execute(): Promise<Result<AiModel[], Error>>;
11
+ }
12
+ declare const _default: typeof ListModelsUseCaseImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListModelsUseCase>;
14
+ };
15
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { AiModelRegistry } from "@webiny/api-core/features/ai/index.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
5
+ import { ListModelsUseCase } from "./abstractions.js";
6
+ class ListModelsUseCaseImpl {
7
+ constructor(identityContext, registry){
8
+ this.identityContext = identityContext;
9
+ this.registry = registry;
10
+ }
11
+ async execute() {
12
+ if (this.identityContext.getIdentity().isAnonymous()) return Result.fail(new NotAuthorizedError());
13
+ return Result.ok(await this.registry.listModels());
14
+ }
15
+ }
16
+ const ListModels_ListModelsUseCase = ListModelsUseCase.createImplementation({
17
+ implementation: ListModelsUseCaseImpl,
18
+ dependencies: [
19
+ IdentityContext,
20
+ AiModelRegistry
21
+ ]
22
+ });
23
+ export default ListModels_ListModelsUseCase;
24
+
25
+ //# sourceMappingURL=ListModelsUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/ListModels/ListModelsUseCase.js","sources":["../../../../src/api/features/ListModels/ListModelsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { AiModelRegistry } from \"@webiny/api-core/features/ai/index.js\";\nimport type { AiModel } from \"@webiny/api-core/features/ai/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { ListModelsUseCase } from \"./abstractions.js\";\n\nclass ListModelsUseCaseImpl implements ListModelsUseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private registry: AiModelRegistry.Interface\n ) {}\n\n async execute(): Promise<Result<AiModel[], Error>> {\n if (this.identityContext.getIdentity().isAnonymous()) {\n return Result.fail(new NotAuthorizedError());\n }\n return Result.ok(await this.registry.listModels());\n }\n}\n\nexport default ListModelsUseCase.createImplementation({\n implementation: ListModelsUseCaseImpl,\n dependencies: [IdentityContext, AiModelRegistry]\n});\n"],"names":["ListModelsUseCaseImpl","identityContext","registry","Result","NotAuthorizedError","ListModelsUseCase","IdentityContext","AiModelRegistry"],"mappings":";;;;;AAOA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,QAAmC,CAC7C;aAFUD,eAAe,GAAfA;aACAC,QAAQ,GAARA;IACT;IAEH,MAAM,UAA6C;QAC/C,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,WAAW,IAC9C,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAE3B,OAAOD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU;IACnD;AACJ;AAEA,qCAAeE,kBAAkB,oBAAoB,CAAC;IAClD,gBAAgBL;IAChB,cAAc;QAACM;QAAiBC;KAAgB;AACpD"}
@@ -0,0 +1,10 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import type { AiModel } from "@webiny/api-core/features/ai/index.js";
3
+ export interface IListModelsUseCase {
4
+ execute(): Promise<Result<AiModel[], Error>>;
5
+ }
6
+ /** Lists the AI models that can be used in AI Power-Ups provider presets. */
7
+ export declare const ListModelsUseCase: import("@webiny/di").Abstraction<IListModelsUseCase>;
8
+ export declare namespace ListModelsUseCase {
9
+ type Interface = IListModelsUseCase;
10
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const ListModelsUseCase = createAbstraction("AiPowerUpsListModelsUseCase");
3
+ export { ListModelsUseCase };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/ListModels/abstractions.js","sources":["../../../../src/api/features/ListModels/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { AiModel } from \"@webiny/api-core/features/ai/index.js\";\n\nexport interface IListModelsUseCase {\n execute(): Promise<Result<AiModel[], Error>>;\n}\n\n/** Lists the AI models that can be used in AI Power-Ups provider presets. */\nexport const ListModelsUseCase = createAbstraction<IListModelsUseCase>(\n \"AiPowerUpsListModelsUseCase\"\n);\n\nexport namespace ListModelsUseCase {\n export type Interface = IListModelsUseCase;\n}\n"],"names":["ListModelsUseCase","createAbstraction"],"mappings":";AAQO,MAAMA,oBAAoBC,kBAC7B"}
@@ -0,0 +1,4 @@
1
+ export declare const ListModelsFeature: {
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 ListModelsUseCase from "./ListModelsUseCase.js";
3
+ const ListModelsFeature = createFeature({
4
+ name: "AiPowerUpsListModels",
5
+ register (container) {
6
+ container.register(ListModelsUseCase);
7
+ }
8
+ });
9
+ export { ListModelsFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/ListModels/feature.js","sources":["../../../../src/api/features/ListModels/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport ListModelsUseCase from \"./ListModelsUseCase.js\";\n\nexport const ListModelsFeature = createFeature({\n name: \"AiPowerUpsListModels\",\n register(container) {\n container.register(ListModelsUseCase);\n }\n});\n"],"names":["ListModelsFeature","createFeature","container","ListModelsUseCase"],"mappings":";;AAGO,MAAMA,oBAAoBC,cAAc;IAC3C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1 @@
1
+ export { ListModelsUseCase } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { ListModelsUseCase } from "./abstractions.js";
@@ -8,7 +8,7 @@ class ProvidersGraphQLMapperImpl {
8
8
  name: p.name,
9
9
  description: p.description,
10
10
  model: p.model,
11
- apiKey: p.apiKeyMasked ?? null
11
+ apiKey: p.apiKeyMasked || null
12
12
  }))
13
13
  };
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/Providers/ProvidersGraphQLMapper.js","sources":["../../../../src/api/features/Providers/ProvidersGraphQLMapper.ts"],"sourcesContent":["import { AiPowerUpsSettingsGroupGraphQLMapper } from \"~/api/features/shared/index.js\";\nimport type { ProvidersSettings } from \"./types.js\";\n\ninterface ApiProviderPreset {\n id: string;\n name: string;\n description?: string;\n model: string;\n apiKey: string | null;\n}\n\ninterface ApiProviders {\n presets: ApiProviderPreset[];\n}\n\ninterface ApiInputProviderPreset {\n id: string;\n name: string;\n description?: string;\n model: string;\n apiKey?: string;\n}\n\ninterface ApiInputProviders {\n presets: ApiInputProviderPreset[];\n}\n\nclass ProvidersGraphQLMapperImpl implements AiPowerUpsSettingsGroupGraphQLMapper.Interface {\n readonly name = \"providers\";\n\n toApi(internal: unknown): ApiProviders {\n const data = internal as ProvidersSettings;\n return {\n presets: data.presets.map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKey: p.apiKeyMasked ?? null\n }))\n };\n }\n\n fromApi(api: unknown): ProvidersSettings {\n const data = api as ApiInputProviders;\n return {\n presets: data.presets.map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKey: p.apiKey,\n apiKeyMasked: \"\",\n apiKeyEncrypted: \"\"\n }))\n };\n }\n}\n\nexport default AiPowerUpsSettingsGroupGraphQLMapper.createImplementation({\n implementation: ProvidersGraphQLMapperImpl,\n dependencies: []\n});\n"],"names":["ProvidersGraphQLMapperImpl","internal","data","p","api","AiPowerUpsSettingsGroupGraphQLMapper"],"mappings":";AA2BA,MAAMA;IAGF,MAAMC,QAAiB,EAAgB;QACnC,MAAMC,OAAOD;QACb,OAAO;YACH,SAASC,KAAK,OAAO,CAAC,GAAG,CAACC,CAAAA,IAAM;oBAC5B,IAAIA,EAAE,EAAE;oBACR,MAAMA,EAAE,IAAI;oBACZ,aAAaA,EAAE,WAAW;oBAC1B,OAAOA,EAAE,KAAK;oBACd,QAAQA,EAAE,YAAY,IAAI;gBAC9B;QACJ;IACJ;IAEA,QAAQC,GAAY,EAAqB;QACrC,MAAMF,OAAOE;QACb,OAAO;YACH,SAASF,KAAK,OAAO,CAAC,GAAG,CAACC,CAAAA,IAAM;oBAC5B,IAAIA,EAAE,EAAE;oBACR,MAAMA,EAAE,IAAI;oBACZ,aAAaA,EAAE,WAAW;oBAC1B,OAAOA,EAAE,KAAK;oBACd,QAAQA,EAAE,MAAM;oBAChB,cAAc;oBACd,iBAAiB;gBACrB;QACJ;IACJ;;aA5BS,IAAI,GAAG;;AA6BpB;AAEA,+BAAeE,qCAAqC,oBAAoB,CAAC;IACrE,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"api/features/Providers/ProvidersGraphQLMapper.js","sources":["../../../../src/api/features/Providers/ProvidersGraphQLMapper.ts"],"sourcesContent":["import { AiPowerUpsSettingsGroupGraphQLMapper } from \"~/api/features/shared/index.js\";\nimport type { ProvidersSettings } from \"./types.js\";\n\ninterface ApiProviderPreset {\n id: string;\n name: string;\n description?: string;\n model: string;\n apiKey: string | null;\n}\n\ninterface ApiProviders {\n presets: ApiProviderPreset[];\n}\n\ninterface ApiInputProviderPreset {\n id: string;\n name: string;\n description?: string;\n model: string;\n apiKey?: string;\n}\n\ninterface ApiInputProviders {\n presets: ApiInputProviderPreset[];\n}\n\nclass ProvidersGraphQLMapperImpl implements AiPowerUpsSettingsGroupGraphQLMapper.Interface {\n readonly name = \"providers\";\n\n toApi(internal: unknown): ApiProviders {\n const data = internal as ProvidersSettings;\n return {\n presets: data.presets.map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKey: p.apiKeyMasked || null\n }))\n };\n }\n\n fromApi(api: unknown): ProvidersSettings {\n const data = api as ApiInputProviders;\n return {\n presets: data.presets.map(p => ({\n id: p.id,\n name: p.name,\n description: p.description,\n model: p.model,\n apiKey: p.apiKey,\n apiKeyMasked: \"\",\n apiKeyEncrypted: \"\"\n }))\n };\n }\n}\n\nexport default AiPowerUpsSettingsGroupGraphQLMapper.createImplementation({\n implementation: ProvidersGraphQLMapperImpl,\n dependencies: []\n});\n"],"names":["ProvidersGraphQLMapperImpl","internal","data","p","api","AiPowerUpsSettingsGroupGraphQLMapper"],"mappings":";AA2BA,MAAMA;IAGF,MAAMC,QAAiB,EAAgB;QACnC,MAAMC,OAAOD;QACb,OAAO;YACH,SAASC,KAAK,OAAO,CAAC,GAAG,CAACC,CAAAA,IAAM;oBAC5B,IAAIA,EAAE,EAAE;oBACR,MAAMA,EAAE,IAAI;oBACZ,aAAaA,EAAE,WAAW;oBAC1B,OAAOA,EAAE,KAAK;oBACd,QAAQA,EAAE,YAAY,IAAI;gBAC9B;QACJ;IACJ;IAEA,QAAQC,GAAY,EAAqB;QACrC,MAAMF,OAAOE;QACb,OAAO;YACH,SAASF,KAAK,OAAO,CAAC,GAAG,CAACC,CAAAA,IAAM;oBAC5B,IAAIA,EAAE,EAAE;oBACR,MAAMA,EAAE,IAAI;oBACZ,aAAaA,EAAE,WAAW;oBAC1B,OAAOA,EAAE,KAAK;oBACd,QAAQA,EAAE,MAAM;oBAChB,cAAc;oBACd,iBAAiB;gBACrB;QACJ;IACJ;;aA5BS,IAAI,GAAG;;AA6BpB;AAEA,+BAAeE,qCAAqC,oBAAoB,CAAC;IACrE,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
@@ -10,7 +10,7 @@ declare class UpdateSettingsRepositoryImpl implements UpdateSettingsRepository.I
10
10
  constructor(keyValueStore: KeyValueStore.Interface, handlers: AiPowerUpsSettingsGroupHandler.Interface[], cache: AiPowerUpsSettingsCache.Interface);
11
11
  execute(input: IAiPowerUpsSettings): Promise<Result<IAiPowerUpsSettings, Error>>;
12
12
  }
13
- export declare const UpdateSettingsRepositoryImplementation: typeof UpdateSettingsRepositoryImpl & {
13
+ declare const _default: typeof UpdateSettingsRepositoryImpl & {
14
14
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateSettingsRepository>;
15
15
  };
16
- export {};
16
+ export default _default;
@@ -53,7 +53,7 @@ class UpdateSettingsRepositoryImpl {
53
53
  return Result.ok(mapped);
54
54
  }
55
55
  }
56
- const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createImplementation({
56
+ const UpdateSettings_UpdateSettingsRepository = UpdateSettingsRepository.createImplementation({
57
57
  implementation: UpdateSettingsRepositoryImpl,
58
58
  dependencies: [
59
59
  KeyValueStore,
@@ -66,6 +66,6 @@ const UpdateSettingsRepositoryImplementation = UpdateSettingsRepository.createIm
66
66
  AiPowerUpsSettingsCache
67
67
  ]
68
68
  });
69
- export { UpdateSettingsRepositoryImplementation };
69
+ export default UpdateSettings_UpdateSettingsRepository;
70
70
 
71
71
  //# sourceMappingURL=UpdateSettingsRepository.js.map
@@ -1 +1 @@
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 /*\n * `raw` matters here as much as it does on read. `connections` derives itself from the\n * legacy `providers` section until it has one of its own, and this is what\n * `mapToStorage` diffs against to carry forward an encrypted key the form only ever saw\n * as a mask. Without it, the first save after an upgrade compares against an empty list\n * and silently drops every stored key.\n */\n existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name], raw);\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], persisted);\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,CAQ/BD,gBAAgB,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACJ,GAAG,CAACI,QAAQ,IAAI,CAAC,EAAEJ;QAG/E,MAAMK,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,EAAEU;QAG3E,KAAK,MAAMI,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
+ {"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 /*\n * `raw` matters here as much as it does on read. `connections` derives itself from the\n * legacy `providers` section until it has one of its own, and this is what\n * `mapToStorage` diffs against to carry forward an encrypted key the form only ever saw\n * as a mask. Without it, the first save after an upgrade compares against an empty list\n * and silently drops every stored key.\n */\n existingInternal[handler.name] = handler.mapFromStorage(raw[handler.name], raw);\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], persisted);\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 default UpdateSettingsRepository.createImplementation({\n implementation: UpdateSettingsRepositoryImpl,\n dependencies: [\n KeyValueStore,\n [AiPowerUpsSettingsGroupHandler, { multiple: true }],\n AiPowerUpsSettingsCache\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","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,CAQ/BD,gBAAgB,CAACC,QAAQ,IAAI,CAAC,GAAGA,QAAQ,cAAc,CAACJ,GAAG,CAACI,QAAQ,IAAI,CAAC,EAAEJ;QAG/E,MAAMK,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,EAAEU;QAG3E,KAAK,MAAMI,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;AAEA,gDAAeC,yBAAyB,oBAAoB,CAAC;IACzD,gBAAgB1B;IAChB,cAAc;QACV2B;QACA;YAACC;YAAgC;gBAAE,UAAU;YAAK;SAAE;QACpDC;KACH;AACL"}
@@ -1,13 +1,15 @@
1
1
  import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { AiPowerUpsPermissions } from "../../../api/features/permissions/index.js";
2
3
  import { UpdateSettingsUseCase, UpdateSettingsRepository } from "./abstractions.js";
3
4
  import type { IAiPowerUpsSettings } from "../../../api/types.js";
4
5
  declare class UpdateSettingsUseCaseImpl implements UpdateSettingsUseCase.Interface {
6
+ private permissions;
5
7
  private eventPublisher;
6
8
  private repository;
7
- constructor(eventPublisher: EventPublisher.Interface, repository: UpdateSettingsRepository.Interface);
9
+ constructor(permissions: AiPowerUpsPermissions.Interface, eventPublisher: EventPublisher.Interface, repository: UpdateSettingsRepository.Interface);
8
10
  execute(input: IAiPowerUpsSettings): UpdateSettingsUseCase.Return;
9
11
  }
10
- export declare const UpdateSettingsUseCaseImplementation: typeof UpdateSettingsUseCaseImpl & {
12
+ declare const _default: typeof UpdateSettingsUseCaseImpl & {
11
13
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateSettingsUseCase>;
12
14
  };
13
- export {};
15
+ export default _default;
@@ -1,12 +1,18 @@
1
+ import { Result } from "@webiny/feature/api";
1
2
  import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
3
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
4
+ import { AiPowerUpsPermissions } from "../permissions/index.js";
2
5
  import { UpdateSettingsRepository, UpdateSettingsUseCase } from "./abstractions.js";
3
6
  import { AiPowerUpsSettingsAfterUpdateEvent, AiPowerUpsSettingsBeforeUpdateEvent } from "./events.js";
4
7
  class UpdateSettingsUseCaseImpl {
5
- constructor(eventPublisher, repository){
8
+ constructor(permissions, eventPublisher, repository){
9
+ this.permissions = permissions;
6
10
  this.eventPublisher = eventPublisher;
7
11
  this.repository = repository;
8
12
  }
9
13
  async execute(input) {
14
+ const canManageSettings = await this.permissions.canAccess("settings");
15
+ if (!canManageSettings) return Result.fail(new NotAuthorizedError());
10
16
  await this.eventPublisher.publish(new AiPowerUpsSettingsBeforeUpdateEvent({
11
17
  input
12
18
  }));
@@ -18,13 +24,14 @@ class UpdateSettingsUseCaseImpl {
18
24
  return result;
19
25
  }
20
26
  }
21
- const UpdateSettingsUseCaseImplementation = UpdateSettingsUseCase.createImplementation({
27
+ const UpdateSettings_UpdateSettingsUseCase = UpdateSettingsUseCase.createImplementation({
22
28
  implementation: UpdateSettingsUseCaseImpl,
23
29
  dependencies: [
30
+ AiPowerUpsPermissions,
24
31
  EventPublisher,
25
32
  UpdateSettingsRepository
26
33
  ]
27
34
  });
28
- export { UpdateSettingsUseCaseImplementation };
35
+ export default UpdateSettings_UpdateSettingsUseCase;
29
36
 
30
37
  //# sourceMappingURL=UpdateSettingsUseCase.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"api/features/UpdateSettings/UpdateSettingsUseCase.js","sources":["../../../../src/api/features/UpdateSettings/UpdateSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { AiPowerUpsPermissions } from \"~/api/features/permissions/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 permissions: AiPowerUpsPermissions.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: UpdateSettingsRepository.Interface\n ) {}\n\n async execute(input: IAiPowerUpsSettings): UpdateSettingsUseCase.Return {\n // The settings hold the AI provider API keys.\n const canManageSettings = await this.permissions.canAccess(\"settings\");\n if (!canManageSettings) {\n return Result.fail(new NotAuthorizedError());\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 default UpdateSettingsUseCase.createImplementation({\n implementation: UpdateSettingsUseCaseImpl,\n dependencies: [AiPowerUpsPermissions, EventPublisher, UpdateSettingsRepository]\n});\n"],"names":["UpdateSettingsUseCaseImpl","permissions","eventPublisher","repository","input","canManageSettings","Result","NotAuthorizedError","AiPowerUpsSettingsBeforeUpdateEvent","result","AiPowerUpsSettingsAfterUpdateEvent","UpdateSettingsUseCase","AiPowerUpsPermissions","EventPublisher","UpdateSettingsRepository"],"mappings":";;;;;;AAWA,MAAMA;IACF,YACYC,WAA4C,EAC5CC,cAAwC,EACxCC,UAA8C,CACxD;aAHUF,WAAW,GAAXA;aACAC,cAAc,GAAdA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QAAQC,KAA0B,EAAgC;QAEpE,MAAMC,oBAAoB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC3D,IAAI,CAACA,mBACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIC,oCAAoC;YAAEJ;QAAM;QAElF,MAAMK,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACL;QAE7C,IAAIK,OAAO,MAAM,IACb,OAAOA;QAGX,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,mCAAmC;YAAE,UAAUD,OAAO,KAAK;QAAC;QAGpE,OAAOA;IACX;AACJ;AAEA,6CAAeE,sBAAsB,oBAAoB,CAAC;IACtD,gBAAgBX;IAChB,cAAc;QAACY;QAAuBC;QAAgBC;KAAyB;AACnF"}
@@ -1,11 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
- import { UpdateSettingsRepositoryImplementation } from "./UpdateSettingsRepository.js";
3
- import { UpdateSettingsUseCaseImplementation } from "./UpdateSettingsUseCase.js";
2
+ import UpdateSettingsRepository from "./UpdateSettingsRepository.js";
3
+ import UpdateSettingsUseCase from "./UpdateSettingsUseCase.js";
4
4
  const UpdateSettingsFeature = createFeature({
5
5
  name: "AiPowerUpsUpdateSettings",
6
6
  register (container) {
7
- container.register(UpdateSettingsRepositoryImplementation).inSingletonScope();
8
- container.register(UpdateSettingsUseCaseImplementation);
7
+ container.register(UpdateSettingsRepository).inSingletonScope();
8
+ container.register(UpdateSettingsUseCase);
9
9
  }
10
10
  });
11
11
  export { UpdateSettingsFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"api/features/UpdateSettings/feature.js","sources":["../../../../src/api/features/UpdateSettings/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"],"names":["UpdateSettingsFeature","createFeature","container","UpdateSettingsRepositoryImplementation","UpdateSettingsUseCaseImplementation"],"mappings":";;;AAIO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,wCAAwC,gBAAgB;QAC3ED,UAAU,QAAQ,CAACE;IACvB;AACJ"}
1
+ {"version":3,"file":"api/features/UpdateSettings/feature.js","sources":["../../../../src/api/features/UpdateSettings/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport UpdateSettingsRepository from \"./UpdateSettingsRepository.js\";\nimport UpdateSettingsUseCase from \"./UpdateSettingsUseCase.js\";\n\nexport const UpdateSettingsFeature = createFeature({\n name: \"AiPowerUpsUpdateSettings\",\n register(container) {\n container.register(UpdateSettingsRepository).inSingletonScope();\n container.register(UpdateSettingsUseCase);\n }\n});\n"],"names":["UpdateSettingsFeature","createFeature","container","UpdateSettingsRepository","UpdateSettingsUseCase"],"mappings":";;;AAIO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,0BAA0B,gBAAgB;QAC7DD,UAAU,QAAQ,CAACE;IACvB;AACJ"}
@@ -0,0 +1,13 @@
1
+ import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
+ import { QueueWbGeneratePageContentUseCase } from "./abstractions.js";
4
+ declare class QueueWbGeneratePageContentUseCaseImpl implements QueueWbGeneratePageContentUseCase.Interface {
5
+ private identityContext;
6
+ private taskService;
7
+ constructor(identityContext: IdentityContext.Interface, taskService: TaskService.Interface);
8
+ execute(params: QueueWbGeneratePageContentUseCase.Params): QueueWbGeneratePageContentUseCase.Return;
9
+ }
10
+ declare const _default: typeof QueueWbGeneratePageContentUseCaseImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IQueueWbGeneratePageContentUseCase>;
12
+ };
13
+ export default _default;
@@ -0,0 +1,42 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
5
+ import { QueueWbGeneratePageContentUseCase } from "./abstractions.js";
6
+ import { WB_GENERATE_PAGE_CONTENT_TASK_ID } from "./WbGeneratePageContentTask.js";
7
+ class QueueWbGeneratePageContentUseCaseImpl {
8
+ constructor(identityContext, taskService){
9
+ this.identityContext = identityContext;
10
+ this.taskService = taskService;
11
+ }
12
+ async execute(params) {
13
+ if (this.identityContext.getIdentity().isAnonymous()) return Result.fail(new NotAuthorizedError());
14
+ const result = await this.taskService.trigger({
15
+ definition: WB_GENERATE_PAGE_CONTENT_TASK_ID,
16
+ input: {
17
+ prompt: params.prompt,
18
+ components: params.components,
19
+ tools: params.tools,
20
+ projectId: params.projectId ?? null,
21
+ excludedFileIds: params.excludedFileIds ?? null,
22
+ readerPersonaId: params.readerPersonaId ?? null,
23
+ writerPersonaId: params.writerPersonaId ?? null,
24
+ additionalFileIds: params.additionalFileIds ?? null
25
+ }
26
+ });
27
+ if (result.isFail()) return Result.fail(result.error);
28
+ return Result.ok({
29
+ id: result.value.id
30
+ });
31
+ }
32
+ }
33
+ const WbGeneratePageContent_QueueWbGeneratePageContentUseCase = QueueWbGeneratePageContentUseCase.createImplementation({
34
+ implementation: QueueWbGeneratePageContentUseCaseImpl,
35
+ dependencies: [
36
+ IdentityContext,
37
+ TaskService
38
+ ]
39
+ });
40
+ export default WbGeneratePageContent_QueueWbGeneratePageContentUseCase;
41
+
42
+ //# sourceMappingURL=QueueWbGeneratePageContentUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/WbGeneratePageContent/QueueWbGeneratePageContentUseCase.js","sources":["../../../../src/api/features/WbGeneratePageContent/QueueWbGeneratePageContentUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { QueueWbGeneratePageContentUseCase } from \"./abstractions.js\";\nimport {\n WB_GENERATE_PAGE_CONTENT_TASK_ID,\n type IWbGeneratePageContentTaskInput\n} from \"./WbGeneratePageContentTask.js\";\n\nclass QueueWbGeneratePageContentUseCaseImpl implements QueueWbGeneratePageContentUseCase.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private taskService: TaskService.Interface\n ) {}\n\n async execute(\n params: QueueWbGeneratePageContentUseCase.Params\n ): QueueWbGeneratePageContentUseCase.Return {\n // The task calls the AI providers with the project's keys, so anonymous callers can't queue one.\n if (this.identityContext.getIdentity().isAnonymous()) {\n return Result.fail(new NotAuthorizedError());\n }\n\n const result = await this.taskService.trigger<IWbGeneratePageContentTaskInput>({\n definition: WB_GENERATE_PAGE_CONTENT_TASK_ID,\n input: {\n prompt: params.prompt,\n components: params.components,\n tools: params.tools,\n projectId: params.projectId ?? null,\n excludedFileIds: params.excludedFileIds ?? null,\n readerPersonaId: params.readerPersonaId ?? null,\n writerPersonaId: params.writerPersonaId ?? null,\n additionalFileIds: params.additionalFileIds ?? null\n }\n });\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok({ id: result.value.id });\n }\n}\n\nexport default QueueWbGeneratePageContentUseCase.createImplementation({\n implementation: QueueWbGeneratePageContentUseCaseImpl,\n dependencies: [IdentityContext, TaskService]\n});\n"],"names":["QueueWbGeneratePageContentUseCaseImpl","identityContext","taskService","params","Result","NotAuthorizedError","result","WB_GENERATE_PAGE_CONTENT_TASK_ID","QueueWbGeneratePageContentUseCase","IdentityContext","TaskService"],"mappings":";;;;;;AAUA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,WAAkC,CAC5C;aAFUD,eAAe,GAAfA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,QACFC,MAAgD,EACR;QAExC,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,GAAG,WAAW,IAC9C,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAkC;YAC3E,YAAYC;YACZ,OAAO;gBACH,QAAQJ,OAAO,MAAM;gBACrB,YAAYA,OAAO,UAAU;gBAC7B,OAAOA,OAAO,KAAK;gBACnB,WAAWA,OAAO,SAAS,IAAI;gBAC/B,iBAAiBA,OAAO,eAAe,IAAI;gBAC3C,iBAAiBA,OAAO,eAAe,IAAI;gBAC3C,iBAAiBA,OAAO,eAAe,IAAI;gBAC3C,mBAAmBA,OAAO,iBAAiB,IAAI;YACnD;QACJ;QAEA,IAAIG,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAACE,OAAO,KAAK;QAGnC,OAAOF,OAAO,EAAE,CAAC;YAAE,IAAIE,OAAO,KAAK,CAAC,EAAE;QAAC;IAC3C;AACJ;AAEA,gEAAeE,kCAAkC,oBAAoB,CAAC;IAClE,gBAAgBR;IAChB,cAAc;QAACS;QAAiBC;KAAY;AAChD"}
@@ -15,7 +15,7 @@ declare class WbGeneratePageContentUseCaseImpl implements WbGeneratePageContentU
15
15
  constructor(promptContextBuilder: AiPromptContextBuilder.Interface, resolveCapability: ResolveAiCapabilityUseCase.Interface, ai: Ai.Interface, aiSdkTools: AiSdkTools.Interface, listTags: ListTagsUseCase.Interface);
16
16
  execute(params: WbGeneratePageContentParams): Promise<Result<GeneratePageContentResult, Error>>;
17
17
  }
18
- export declare const WbGeneratePageContentUseCaseImplementation: typeof WbGeneratePageContentUseCaseImpl & {
18
+ declare const _default: typeof WbGeneratePageContentUseCaseImpl & {
19
19
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IWbGeneratePageContentUseCase>;
20
20
  };
21
- export {};
21
+ export default _default;
@@ -98,7 +98,7 @@ class WbGeneratePageContentUseCaseImpl {
98
98
  }
99
99
  }
100
100
  }
101
- const WbGeneratePageContentUseCaseImplementation = WbGeneratePageContentUseCase.createImplementation({
101
+ const WbGeneratePageContent_WbGeneratePageContentUseCase = WbGeneratePageContentUseCase.createImplementation({
102
102
  implementation: WbGeneratePageContentUseCaseImpl,
103
103
  dependencies: [
104
104
  AiPromptContextBuilder,
@@ -108,6 +108,6 @@ const WbGeneratePageContentUseCaseImplementation = WbGeneratePageContentUseCase.
108
108
  ListTagsUseCase
109
109
  ]
110
110
  });
111
- export { WbGeneratePageContentUseCaseImplementation };
111
+ export default WbGeneratePageContent_WbGeneratePageContentUseCase;
112
112
 
113
113
  //# sourceMappingURL=WbGeneratePageContentUseCase.js.map