@webiny/api-core 6.6.0-alpha.0 → 6.6.0-alpha.2

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 (164) hide show
  1. package/ApiCoreFeature.js +6 -0
  2. package/ApiCoreFeature.js.map +1 -1
  3. package/exports/api/security/api-key.d.ts +1 -0
  4. package/exports/api/security/api-key.js +1 -0
  5. package/features/ai/Ai.d.ts +3 -1
  6. package/features/ai/Ai.js +39 -4
  7. package/features/ai/Ai.js.map +1 -1
  8. package/features/ai/AnthropicSdkFactory.js +12 -0
  9. package/features/ai/AnthropicSdkFactory.js.map +1 -1
  10. package/features/ai/OpenAiSdkFactory.js +16 -0
  11. package/features/ai/OpenAiSdkFactory.js.map +1 -1
  12. package/features/ai/TextExtractor/DefaultTextExtractor.d.ts +9 -0
  13. package/features/ai/TextExtractor/DefaultTextExtractor.js +28 -0
  14. package/features/ai/TextExtractor/DefaultTextExtractor.js.map +1 -0
  15. package/features/ai/TextExtractor/abstractions.d.ts +12 -0
  16. package/features/ai/TextExtractor/abstractions.js +5 -0
  17. package/features/ai/TextExtractor/abstractions.js.map +1 -0
  18. package/features/ai/TextExtractor/index.d.ts +3 -0
  19. package/features/ai/TextExtractor/index.js +2 -0
  20. package/features/ai/TextExtractor/parsers/docxParser.d.ts +1 -0
  21. package/features/ai/TextExtractor/parsers/docxParser.js +111 -0
  22. package/features/ai/TextExtractor/parsers/docxParser.js.map +1 -0
  23. package/features/ai/abstractions.d.ts +19 -0
  24. package/features/ai/abstractions.js.map +1 -1
  25. package/features/ai/events.d.ts +59 -0
  26. package/features/ai/events.js +41 -0
  27. package/features/ai/events.js.map +1 -0
  28. package/features/ai/feature.js +2 -0
  29. package/features/ai/feature.js.map +1 -1
  30. package/features/ai/index.d.ts +5 -1
  31. package/features/ai/index.js +2 -0
  32. package/features/dateFormatter/DefaultDateFormatter.d.ts +15 -0
  33. package/features/dateFormatter/DefaultDateFormatter.js +20 -0
  34. package/features/dateFormatter/DefaultDateFormatter.js.map +1 -0
  35. package/features/dateFormatter/abstractions.d.ts +13 -0
  36. package/features/dateFormatter/abstractions.js +5 -0
  37. package/features/dateFormatter/abstractions.js.map +1 -0
  38. package/features/dateFormatter/feature.d.ts +4 -0
  39. package/features/dateFormatter/feature.js +11 -0
  40. package/features/dateFormatter/feature.js.map +1 -0
  41. package/features/dateFormatter/index.d.ts +3 -0
  42. package/features/dateFormatter/index.js +2 -0
  43. package/features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.d.ts +13 -0
  44. package/features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.js +49 -0
  45. package/features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.js.map +1 -0
  46. package/features/security/IdentityContext/IdentityContext.d.ts +3 -3
  47. package/features/security/IdentityContext/IdentityContext.js +6 -6
  48. package/features/security/IdentityContext/IdentityContext.js.map +1 -1
  49. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js +11 -6
  50. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js.map +1 -1
  51. package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.d.ts +1 -1
  52. package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js.map +1 -1
  53. package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.d.ts +1 -3
  54. package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js.map +1 -1
  55. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.d.ts +1 -1
  56. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
  57. package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.d.ts +1 -3
  58. package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.js.map +1 -1
  59. package/features/security/apiKeys/GetApiKeyByToken/abstractions.d.ts +1 -1
  60. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
  61. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js +9 -3
  62. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js.map +1 -1
  63. package/features/security/apiKeys/feature.js +7 -2
  64. package/features/security/apiKeys/feature.js.map +1 -1
  65. package/features/security/apiKeys/shared/ApiKeyProvider.d.ts +3 -5
  66. package/features/security/apiKeys/shared/ApiKeyProvider.js +6 -21
  67. package/features/security/apiKeys/shared/ApiKeyProvider.js.map +1 -1
  68. package/features/security/apiKeys/shared/ApiKeysRepository.d.ts +1 -0
  69. package/features/security/apiKeys/shared/ApiKeysRepository.js +19 -4
  70. package/features/security/apiKeys/shared/ApiKeysRepository.js.map +1 -1
  71. package/features/security/apiKeys/shared/generateToken.d.ts +1 -1
  72. package/features/security/apiKeys/shared/generateToken.js.map +1 -1
  73. package/features/security/apiKeys/shared/schemas.d.ts +2 -2
  74. package/features/security/apiKeys/shared/schemas.js +2 -2
  75. package/features/security/apiKeys/shared/schemas.js.map +1 -1
  76. package/features/security/apiKeys/shared/types.d.ts +1 -1
  77. package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.d.ts +3 -3
  78. package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.js +5 -5
  79. package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.js.map +1 -1
  80. package/features/security/roles/CreateRole/CreateRoleUseCase.js +11 -6
  81. package/features/security/roles/CreateRole/CreateRoleUseCase.js.map +1 -1
  82. package/features/security/roles/CreateRole/schema.d.ts +1 -1
  83. package/features/security/roles/CreateRole/schema.js +1 -1
  84. package/features/security/roles/CreateRole/schema.js.map +1 -1
  85. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js +9 -3
  86. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js.map +1 -1
  87. package/features/security/roles/UpdateRole/schema.d.ts +1 -1
  88. package/features/security/roles/UpdateRole/schema.js +1 -1
  89. package/features/security/roles/UpdateRole/schema.js.map +1 -1
  90. package/features/security/shared/description.d.ts +4 -0
  91. package/features/security/shared/description.js +7 -0
  92. package/features/security/shared/description.js.map +1 -0
  93. package/features/security/shared/index.d.ts +1 -0
  94. package/features/security/shared/index.js +1 -0
  95. package/features/security/teams/CreateTeam/CreateTeamUseCase.d.ts +3 -1
  96. package/features/security/teams/CreateTeam/CreateTeamUseCase.js +20 -8
  97. package/features/security/teams/CreateTeam/CreateTeamUseCase.js.map +1 -1
  98. package/features/security/teams/CreateTeam/schema.d.ts +1 -1
  99. package/features/security/teams/CreateTeam/schema.js +1 -1
  100. package/features/security/teams/CreateTeam/schema.js.map +1 -1
  101. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.d.ts +3 -1
  102. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js +20 -5
  103. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js.map +1 -1
  104. package/features/security/teams/UpdateTeam/schema.d.ts +1 -1
  105. package/features/security/teams/UpdateTeam/schema.js +1 -1
  106. package/features/security/teams/UpdateTeam/schema.js.map +1 -1
  107. package/features/security/teams/shared/resolveRoleIdentifiers.d.ts +17 -0
  108. package/features/security/teams/shared/resolveRoleIdentifiers.js +32 -0
  109. package/features/security/teams/shared/resolveRoleIdentifiers.js.map +1 -0
  110. package/features/slugify/DefaultSlugify.d.ts +8 -0
  111. package/features/slugify/DefaultSlugify.js +20 -0
  112. package/features/slugify/DefaultSlugify.js.map +1 -0
  113. package/features/slugify/abstractions.d.ts +12 -0
  114. package/features/slugify/abstractions.js +5 -0
  115. package/features/slugify/abstractions.js.map +1 -0
  116. package/features/slugify/feature.d.ts +4 -0
  117. package/features/slugify/feature.js +11 -0
  118. package/features/slugify/feature.js.map +1 -0
  119. package/features/slugify/index.d.ts +3 -0
  120. package/features/slugify/index.js +2 -0
  121. package/features/stringFormatter/DefaultStringFormatter.d.ts +17 -0
  122. package/features/stringFormatter/DefaultStringFormatter.js +19 -0
  123. package/features/stringFormatter/DefaultStringFormatter.js.map +1 -0
  124. package/features/stringFormatter/abstractions.d.ts +11 -0
  125. package/features/stringFormatter/abstractions.js +5 -0
  126. package/features/stringFormatter/abstractions.js.map +1 -0
  127. package/features/stringFormatter/feature.d.ts +4 -0
  128. package/features/stringFormatter/feature.js +13 -0
  129. package/features/stringFormatter/feature.js.map +1 -0
  130. package/features/stringFormatter/index.d.ts +3 -0
  131. package/features/stringFormatter/index.js +2 -0
  132. package/features/task/TaskDefinition/abstractions.d.ts +76 -4
  133. package/features/task/TaskDefinition/abstractions.js +2 -1
  134. package/features/task/TaskDefinition/abstractions.js.map +1 -1
  135. package/features/wcp/WcpContext/WcpContext.d.ts +6 -0
  136. package/features/wcp/WcpContext/WcpContext.js +18 -0
  137. package/features/wcp/WcpContext/WcpContext.js.map +1 -1
  138. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.d.ts +18 -0
  139. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +57 -25
  140. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
  141. package/features/wcp/WcpFeature.js +2 -0
  142. package/features/wcp/WcpFeature.js.map +1 -1
  143. package/features/wcp/WcpLicenseLoader.d.ts +25 -0
  144. package/features/wcp/WcpLicenseLoader.js +58 -0
  145. package/features/wcp/WcpLicenseLoader.js.map +1 -0
  146. package/features/wcp/WcpLicenseProvider.d.ts +6 -14
  147. package/features/wcp/WcpLicenseProvider.js +3 -7
  148. package/features/wcp/WcpLicenseProvider.js.map +1 -1
  149. package/features/wcp/resolveWcpProjectEnvironment.d.ts +9 -0
  150. package/features/wcp/resolveWcpProjectEnvironment.js +23 -0
  151. package/features/wcp/resolveWcpProjectEnvironment.js.map +1 -0
  152. package/graphql/featureFlags/FeatureFlagsSchemaFactory.d.ts +9 -0
  153. package/graphql/featureFlags/FeatureFlagsSchemaFactory.js +49 -0
  154. package/graphql/featureFlags/FeatureFlagsSchemaFactory.js.map +1 -0
  155. package/graphql/wcp/WcpSchemaFactory.js +2 -0
  156. package/graphql/wcp/WcpSchemaFactory.js.map +1 -1
  157. package/package.json +18 -18
  158. package/testing/environment.d.ts +14 -0
  159. package/testing/environment.js +18 -0
  160. package/testing/environment.js.map +1 -0
  161. package/types/security.d.ts +1 -1
  162. package/features/wcp/loadWcpLicense.d.ts +0 -2
  163. package/features/wcp/loadWcpLicense.js +0 -51
  164. package/features/wcp/loadWcpLicense.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import { DomainEvent } from "../../features/eventPublisher/index.js";
2
+ import type { IEventHandler } from "../../features/eventPublisher/index.js";
3
+ import type { AiGenerateTextParams, AiStreamTextParams } from "./abstractions.js";
4
+ import type { generateText } from "ai";
5
+ export interface AiBeforeGenerateTextPayload {
6
+ requestId: string;
7
+ params: AiGenerateTextParams;
8
+ }
9
+ export declare class AiBeforeGenerateTextEvent extends DomainEvent<AiBeforeGenerateTextPayload> {
10
+ eventType: "ai.beforeGenerateText";
11
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<AiBeforeGenerateTextEvent>>;
12
+ }
13
+ export declare const AiBeforeGenerateTextEventHandler: import("@webiny/di").Abstraction<IEventHandler<AiBeforeGenerateTextEvent>>;
14
+ export declare namespace AiBeforeGenerateTextEventHandler {
15
+ type Interface = IEventHandler<AiBeforeGenerateTextEvent>;
16
+ type Event = AiBeforeGenerateTextEvent;
17
+ }
18
+ export interface AiAfterGenerateTextPayload {
19
+ requestId: string;
20
+ params: AiGenerateTextParams;
21
+ result: Awaited<ReturnType<typeof generateText>>;
22
+ duration: number;
23
+ }
24
+ export declare class AiAfterGenerateTextEvent extends DomainEvent<AiAfterGenerateTextPayload> {
25
+ eventType: "ai.afterGenerateText";
26
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<AiAfterGenerateTextEvent>>;
27
+ }
28
+ export declare const AiAfterGenerateTextEventHandler: import("@webiny/di").Abstraction<IEventHandler<AiAfterGenerateTextEvent>>;
29
+ export declare namespace AiAfterGenerateTextEventHandler {
30
+ type Interface = IEventHandler<AiAfterGenerateTextEvent>;
31
+ type Event = AiAfterGenerateTextEvent;
32
+ }
33
+ export interface AiGenerateTextErrorPayload {
34
+ requestId: string;
35
+ params: AiGenerateTextParams;
36
+ error: Error;
37
+ duration: number;
38
+ }
39
+ export declare class AiGenerateTextErrorEvent extends DomainEvent<AiGenerateTextErrorPayload> {
40
+ eventType: "ai.generateTextError";
41
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<AiGenerateTextErrorEvent>>;
42
+ }
43
+ export declare const AiGenerateTextErrorEventHandler: import("@webiny/di").Abstraction<IEventHandler<AiGenerateTextErrorEvent>>;
44
+ export declare namespace AiGenerateTextErrorEventHandler {
45
+ type Interface = IEventHandler<AiGenerateTextErrorEvent>;
46
+ type Event = AiGenerateTextErrorEvent;
47
+ }
48
+ export interface AiBeforeStreamTextPayload {
49
+ params: AiStreamTextParams;
50
+ }
51
+ export declare class AiBeforeStreamTextEvent extends DomainEvent<AiBeforeStreamTextPayload> {
52
+ eventType: "ai.beforeStreamText";
53
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<AiBeforeStreamTextEvent>>;
54
+ }
55
+ export declare const AiBeforeStreamTextEventHandler: import("@webiny/di").Abstraction<IEventHandler<AiBeforeStreamTextEvent>>;
56
+ export declare namespace AiBeforeStreamTextEventHandler {
57
+ type Interface = IEventHandler<AiBeforeStreamTextEvent>;
58
+ type Event = AiBeforeStreamTextEvent;
59
+ }
@@ -0,0 +1,41 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ import { DomainEvent } from "../eventPublisher/index.js";
3
+ class AiBeforeGenerateTextEvent extends DomainEvent {
4
+ getHandlerAbstraction() {
5
+ return AiBeforeGenerateTextEventHandler;
6
+ }
7
+ constructor(...args){
8
+ super(...args), this.eventType = "ai.beforeGenerateText";
9
+ }
10
+ }
11
+ const AiBeforeGenerateTextEventHandler = createAbstraction("AiBeforeGenerateTextEventHandler");
12
+ class AiAfterGenerateTextEvent extends DomainEvent {
13
+ getHandlerAbstraction() {
14
+ return AiAfterGenerateTextEventHandler;
15
+ }
16
+ constructor(...args){
17
+ super(...args), this.eventType = "ai.afterGenerateText";
18
+ }
19
+ }
20
+ const AiAfterGenerateTextEventHandler = createAbstraction("AiAfterGenerateTextEventHandler");
21
+ class AiGenerateTextErrorEvent extends DomainEvent {
22
+ getHandlerAbstraction() {
23
+ return AiGenerateTextErrorEventHandler;
24
+ }
25
+ constructor(...args){
26
+ super(...args), this.eventType = "ai.generateTextError";
27
+ }
28
+ }
29
+ const AiGenerateTextErrorEventHandler = createAbstraction("AiGenerateTextErrorEventHandler");
30
+ class AiBeforeStreamTextEvent extends DomainEvent {
31
+ getHandlerAbstraction() {
32
+ return AiBeforeStreamTextEventHandler;
33
+ }
34
+ constructor(...args){
35
+ super(...args), this.eventType = "ai.beforeStreamText";
36
+ }
37
+ }
38
+ const AiBeforeStreamTextEventHandler = createAbstraction("AiBeforeStreamTextEventHandler");
39
+ export { AiAfterGenerateTextEvent, AiAfterGenerateTextEventHandler, AiBeforeGenerateTextEvent, AiBeforeGenerateTextEventHandler, AiBeforeStreamTextEvent, AiBeforeStreamTextEventHandler, AiGenerateTextErrorEvent, AiGenerateTextErrorEventHandler };
40
+
41
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/ai/events.js","sources":["../../../src/features/ai/events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { AiGenerateTextParams, AiStreamTextParams } from \"./abstractions.js\";\nimport type { generateText } from \"ai\";\n\n// ============================================================================\n// BeforeGenerateText\n// ============================================================================\n\nexport interface AiBeforeGenerateTextPayload {\n requestId: string;\n params: AiGenerateTextParams;\n}\n\nexport class AiBeforeGenerateTextEvent extends DomainEvent<AiBeforeGenerateTextPayload> {\n eventType = \"ai.beforeGenerateText\" as const;\n\n getHandlerAbstraction() {\n return AiBeforeGenerateTextEventHandler;\n }\n}\n\nexport const AiBeforeGenerateTextEventHandler = createAbstraction<\n IEventHandler<AiBeforeGenerateTextEvent>\n>(\"AiBeforeGenerateTextEventHandler\");\n\nexport namespace AiBeforeGenerateTextEventHandler {\n export type Interface = IEventHandler<AiBeforeGenerateTextEvent>;\n export type Event = AiBeforeGenerateTextEvent;\n}\n\n// ============================================================================\n// AfterGenerateText\n// ============================================================================\n\nexport interface AiAfterGenerateTextPayload {\n requestId: string;\n params: AiGenerateTextParams;\n result: Awaited<ReturnType<typeof generateText>>;\n duration: number;\n}\n\nexport class AiAfterGenerateTextEvent extends DomainEvent<AiAfterGenerateTextPayload> {\n eventType = \"ai.afterGenerateText\" as const;\n\n getHandlerAbstraction() {\n return AiAfterGenerateTextEventHandler;\n }\n}\n\nexport const AiAfterGenerateTextEventHandler = createAbstraction<\n IEventHandler<AiAfterGenerateTextEvent>\n>(\"AiAfterGenerateTextEventHandler\");\n\nexport namespace AiAfterGenerateTextEventHandler {\n export type Interface = IEventHandler<AiAfterGenerateTextEvent>;\n export type Event = AiAfterGenerateTextEvent;\n}\n\n// ============================================================================\n// GenerateTextError\n// ============================================================================\n\nexport interface AiGenerateTextErrorPayload {\n requestId: string;\n params: AiGenerateTextParams;\n error: Error;\n duration: number;\n}\n\nexport class AiGenerateTextErrorEvent extends DomainEvent<AiGenerateTextErrorPayload> {\n eventType = \"ai.generateTextError\" as const;\n\n getHandlerAbstraction() {\n return AiGenerateTextErrorEventHandler;\n }\n}\n\nexport const AiGenerateTextErrorEventHandler = createAbstraction<\n IEventHandler<AiGenerateTextErrorEvent>\n>(\"AiGenerateTextErrorEventHandler\");\n\nexport namespace AiGenerateTextErrorEventHandler {\n export type Interface = IEventHandler<AiGenerateTextErrorEvent>;\n export type Event = AiGenerateTextErrorEvent;\n}\n\n// ============================================================================\n// BeforeStreamText\n// ============================================================================\n\nexport interface AiBeforeStreamTextPayload {\n params: AiStreamTextParams;\n}\n\nexport class AiBeforeStreamTextEvent extends DomainEvent<AiBeforeStreamTextPayload> {\n eventType = \"ai.beforeStreamText\" as const;\n\n getHandlerAbstraction() {\n return AiBeforeStreamTextEventHandler;\n }\n}\n\nexport const AiBeforeStreamTextEventHandler = createAbstraction<\n IEventHandler<AiBeforeStreamTextEvent>\n>(\"AiBeforeStreamTextEventHandler\");\n\nexport namespace AiBeforeStreamTextEventHandler {\n export type Interface = IEventHandler<AiBeforeStreamTextEvent>;\n export type Event = AiBeforeStreamTextEvent;\n}\n"],"names":["AiBeforeGenerateTextEvent","DomainEvent","AiBeforeGenerateTextEventHandler","createAbstraction","AiAfterGenerateTextEvent","AiAfterGenerateTextEventHandler","AiGenerateTextErrorEvent","AiGenerateTextErrorEventHandler","AiBeforeStreamTextEvent","AiBeforeStreamTextEventHandler"],"mappings":";;AAeO,MAAMA,kCAAkCC;IAG3C,wBAAwB;QACpB,OAAOC;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,mCAAmCC,kBAE9C;AAkBK,MAAMC,iCAAiCH;IAG1C,wBAAwB;QACpB,OAAOI;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,kCAAkCF,kBAE7C;AAkBK,MAAMG,iCAAiCL;IAG1C,wBAAwB;QACpB,OAAOM;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,kCAAkCJ,kBAE7C;AAeK,MAAMK,gCAAgCP;IAGzC,wBAAwB;QACpB,OAAOQ;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,iCAAiCN,kBAE5C"}
@@ -5,6 +5,7 @@ import { Ai } from "./Ai.js";
5
5
  import { AiSdkTools } from "./AiSdkTools.js";
6
6
  import { AiOutputToolRegistry } from "./toolPipeline/AiOutputToolRegistry.js";
7
7
  import { AiToolPipelineRunner } from "./toolPipeline/AiToolPipelineRunner.js";
8
+ import { DefaultTextExtractor } from "./TextExtractor/DefaultTextExtractor.js";
8
9
  const AiFeature = createFeature({
9
10
  name: "AiFeature",
10
11
  register (container) {
@@ -14,6 +15,7 @@ const AiFeature = createFeature({
14
15
  container.register(AiSdkTools);
15
16
  container.register(AiOutputToolRegistry);
16
17
  container.register(AiToolPipelineRunner);
18
+ container.register(DefaultTextExtractor);
17
19
  }
18
20
  });
19
21
  export { AiFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"features/ai/feature.js","sources":["../../../src/features/ai/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { OpenAiSdkFactory } from \"./OpenAiSdkFactory.js\";\nimport { AnthropicSdkFactory } from \"./AnthropicSdkFactory.js\";\nimport { Ai } from \"./Ai.js\";\nimport { AiSdkTools } from \"./AiSdkTools.js\";\nimport { AiOutputToolRegistry } from \"./toolPipeline/AiOutputToolRegistry.js\";\nimport { AiToolPipelineRunner } from \"./toolPipeline/AiToolPipelineRunner.js\";\n\nexport const AiFeature = createFeature({\n name: \"AiFeature\",\n register(container) {\n container.register(OpenAiSdkFactory);\n container.register(AnthropicSdkFactory);\n container.register(Ai);\n container.register(AiSdkTools);\n container.register(AiOutputToolRegistry);\n container.register(AiToolPipelineRunner);\n }\n});\n"],"names":["AiFeature","createFeature","container","OpenAiSdkFactory","AnthropicSdkFactory","Ai","AiSdkTools","AiOutputToolRegistry","AiToolPipelineRunner"],"mappings":";;;;;;;AAQO,MAAMA,YAAYC,cAAc;IACnC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;IACvB;AACJ"}
1
+ {"version":3,"file":"features/ai/feature.js","sources":["../../../src/features/ai/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { OpenAiSdkFactory } from \"./OpenAiSdkFactory.js\";\nimport { AnthropicSdkFactory } from \"./AnthropicSdkFactory.js\";\nimport { Ai } from \"./Ai.js\";\nimport { AiSdkTools } from \"./AiSdkTools.js\";\nimport { AiOutputToolRegistry } from \"./toolPipeline/AiOutputToolRegistry.js\";\nimport { AiToolPipelineRunner } from \"./toolPipeline/AiToolPipelineRunner.js\";\nimport { DefaultTextExtractor } from \"./TextExtractor/DefaultTextExtractor.js\";\n\nexport const AiFeature = createFeature({\n name: \"AiFeature\",\n register(container) {\n container.register(OpenAiSdkFactory);\n container.register(AnthropicSdkFactory);\n container.register(Ai);\n container.register(AiSdkTools);\n container.register(AiOutputToolRegistry);\n container.register(AiToolPipelineRunner);\n container.register(DefaultTextExtractor);\n }\n});\n"],"names":["AiFeature","createFeature","container","OpenAiSdkFactory","AnthropicSdkFactory","Ai","AiSdkTools","AiOutputToolRegistry","AiToolPipelineRunner","DefaultTextExtractor"],"mappings":";;;;;;;;AASO,MAAMA,YAAYC,cAAc;IACnC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QACnBL,UAAU,QAAQ,CAACM;QACnBN,UAAU,QAAQ,CAACO;IACvB;AACJ"}
@@ -1,5 +1,9 @@
1
1
  export { AiSdk, AiSdkFactory, AiConnectionFactory, Ai, AiSdkTool, AiSdkTools } from "./abstractions.js";
2
- export type { IAiConnection, IAiConnectionInline, AiModel, IAiSdkModel, IAiSdkTool, IAiSdkTools } from "./abstractions.js";
2
+ export type { IAiConnection, IAiConnectionInline, AiModel, IAiSdkModel, IAiSdkTool, IAiSdkToolAnnotations, IAiSdkTools } from "./abstractions.js";
3
3
  export { AiOutputTool, AiOutputToolRegistry, AiToolPipelineRunner } from "./toolPipeline/index.js";
4
4
  export type { IAiOutputTool, IAiOutputToolRegistry, IAiToolPipelineRunner } from "./toolPipeline/index.js";
5
+ export { TextExtractor, DefaultTextExtractor } from "./TextExtractor/index.js";
6
+ export type { ITextExtractor, TextExtractorResult } from "./TextExtractor/index.js";
7
+ export { AiBeforeGenerateTextEvent, AiBeforeGenerateTextEventHandler, AiAfterGenerateTextEvent, AiAfterGenerateTextEventHandler, AiGenerateTextErrorEvent, AiGenerateTextErrorEventHandler, AiBeforeStreamTextEvent, AiBeforeStreamTextEventHandler } from "./events.js";
8
+ export type { AiBeforeGenerateTextPayload, AiAfterGenerateTextPayload, AiGenerateTextErrorPayload, AiBeforeStreamTextPayload } from "./events.js";
5
9
  export { AiFeature } from "./feature.js";
@@ -1,3 +1,5 @@
1
1
  export { Ai, AiConnectionFactory, AiSdk, AiSdkFactory, AiSdkTool, AiSdkTools } from "./abstractions.js";
2
2
  export { AiOutputTool, AiOutputToolRegistry, AiToolPipelineRunner } from "./toolPipeline/index.js";
3
+ export { DefaultTextExtractor, TextExtractor } from "./TextExtractor/index.js";
4
+ export { AiAfterGenerateTextEvent, AiAfterGenerateTextEventHandler, AiBeforeGenerateTextEvent, AiBeforeGenerateTextEventHandler, AiBeforeStreamTextEvent, AiBeforeStreamTextEventHandler, AiGenerateTextErrorEvent, AiGenerateTextErrorEventHandler } from "./events.js";
3
5
  export { AiFeature } from "./feature.js";
@@ -0,0 +1,15 @@
1
+ import { DateFormatter } from "./abstractions.js";
2
+ import type { FormattableDate } from "./abstractions.js";
3
+ /**
4
+ * Default absolute date/time format: `YYYY-MM-DD HH:mm`, 24-hour, UTC. Built from UTC parts rather
5
+ * than `Intl.DateTimeFormat` so the output is fully deterministic — backend formatting must not
6
+ * depend on the server locale or the bundled ICU version. Projects can change it by decorating
7
+ * DateFormatter.
8
+ */
9
+ declare class DefaultDateFormatterImpl implements DateFormatter.Interface {
10
+ format(date: FormattableDate): string;
11
+ }
12
+ export declare const DefaultDateFormatter: typeof DefaultDateFormatterImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IDateFormatter>;
14
+ };
15
+ export {};
@@ -0,0 +1,20 @@
1
+ import { DateFormatter } from "./abstractions.js";
2
+ const pad = (value)=>String(value).padStart(2, "0");
3
+ class DefaultDateFormatterImpl {
4
+ format(date) {
5
+ const value = new Date(date);
6
+ const year = value.getUTCFullYear();
7
+ const month = pad(value.getUTCMonth() + 1);
8
+ const day = pad(value.getUTCDate());
9
+ const hours = pad(value.getUTCHours());
10
+ const minutes = pad(value.getUTCMinutes());
11
+ return `${year}-${month}-${day} ${hours}:${minutes}`;
12
+ }
13
+ }
14
+ const DefaultDateFormatter = DateFormatter.createImplementation({
15
+ implementation: DefaultDateFormatterImpl,
16
+ dependencies: []
17
+ });
18
+ export { DefaultDateFormatter };
19
+
20
+ //# sourceMappingURL=DefaultDateFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/dateFormatter/DefaultDateFormatter.js","sources":["../../../src/features/dateFormatter/DefaultDateFormatter.ts"],"sourcesContent":["import { DateFormatter } from \"./abstractions.js\";\nimport type { FormattableDate } from \"./abstractions.js\";\n\nconst pad = (value: number): string => {\n return String(value).padStart(2, \"0\");\n};\n\n/**\n * Default absolute date/time format: `YYYY-MM-DD HH:mm`, 24-hour, UTC. Built from UTC parts rather\n * than `Intl.DateTimeFormat` so the output is fully deterministic — backend formatting must not\n * depend on the server locale or the bundled ICU version. Projects can change it by decorating\n * DateFormatter.\n */\nclass DefaultDateFormatterImpl implements DateFormatter.Interface {\n format(date: FormattableDate): string {\n const value = new Date(date);\n const year = value.getUTCFullYear();\n const month = pad(value.getUTCMonth() + 1);\n const day = pad(value.getUTCDate());\n const hours = pad(value.getUTCHours());\n const minutes = pad(value.getUTCMinutes());\n return `${year}-${month}-${day} ${hours}:${minutes}`;\n }\n}\n\nexport const DefaultDateFormatter = DateFormatter.createImplementation({\n implementation: DefaultDateFormatterImpl,\n dependencies: []\n});\n"],"names":["pad","value","String","DefaultDateFormatterImpl","date","Date","year","month","day","hours","minutes","DefaultDateFormatter","DateFormatter"],"mappings":";AAGA,MAAMA,MAAM,CAACC,QACFC,OAAOD,OAAO,QAAQ,CAAC,GAAG;AASrC,MAAME;IACF,OAAOC,IAAqB,EAAU;QAClC,MAAMH,QAAQ,IAAII,KAAKD;QACvB,MAAME,OAAOL,MAAM,cAAc;QACjC,MAAMM,QAAQP,IAAIC,MAAM,WAAW,KAAK;QACxC,MAAMO,MAAMR,IAAIC,MAAM,UAAU;QAChC,MAAMQ,QAAQT,IAAIC,MAAM,WAAW;QACnC,MAAMS,UAAUV,IAAIC,MAAM,aAAa;QACvC,OAAO,GAAGK,KAAK,CAAC,EAAEC,MAAM,CAAC,EAAEC,IAAI,CAAC,EAAEC,MAAM,CAAC,EAAEC,SAAS;IACxD;AACJ;AAEO,MAAMC,uBAAuBC,cAAc,oBAAoB,CAAC;IACnE,gBAAgBT;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,13 @@
1
+ export type FormattableDate = Date | string | number;
2
+ export interface IDateFormatter {
3
+ /**
4
+ * Formats an absolute date/time as a string using Webiny's default format. Change the format
5
+ * everywhere at once by decorating this abstraction.
6
+ */
7
+ format(date: FormattableDate): string;
8
+ }
9
+ export declare const DateFormatter: import("@webiny/di").Abstraction<IDateFormatter>;
10
+ export declare namespace DateFormatter {
11
+ type Interface = IDateFormatter;
12
+ type Value = FormattableDate;
13
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const DateFormatter = createAbstraction("DateFormatter");
3
+ export { DateFormatter };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/dateFormatter/abstractions.js","sources":["../../../src/features/dateFormatter/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\nexport type FormattableDate = Date | string | number;\n\nexport interface IDateFormatter {\n /**\n * Formats an absolute date/time as a string using Webiny's default format. Change the format\n * everywhere at once by decorating this abstraction.\n */\n format(date: FormattableDate): string;\n}\n\nexport const DateFormatter = createAbstraction<IDateFormatter>(\"DateFormatter\");\n\nexport namespace DateFormatter {\n export type Interface = IDateFormatter;\n export type Value = FormattableDate;\n}\n"],"names":["DateFormatter","createAbstraction"],"mappings":";AAYO,MAAMA,gBAAgBC,kBAAkC"}
@@ -0,0 +1,4 @@
1
+ export declare const DateFormatterFeature: {
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 { DefaultDateFormatter } from "./DefaultDateFormatter.js";
3
+ const DateFormatterFeature = createFeature({
4
+ name: "DateFormatterFeature",
5
+ register (container) {
6
+ container.register(DefaultDateFormatter);
7
+ }
8
+ });
9
+ export { DateFormatterFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/dateFormatter/feature.js","sources":["../../../src/features/dateFormatter/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { DefaultDateFormatter } from \"./DefaultDateFormatter.js\";\n\nexport const DateFormatterFeature = createFeature({\n name: \"DateFormatterFeature\",\n register(container) {\n container.register(DefaultDateFormatter);\n }\n});\n"],"names":["DateFormatterFeature","createFeature","container","DefaultDateFormatter"],"mappings":";;AAGO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1,3 @@
1
+ export { DateFormatter } from "./abstractions.js";
2
+ export type { IDateFormatter, FormattableDate } from "./abstractions.js";
3
+ export { DateFormatterFeature } from "./feature.js";
@@ -0,0 +1,2 @@
1
+ export { DateFormatter } from "./abstractions.js";
2
+ export { DateFormatterFeature } from "./feature.js";
@@ -0,0 +1,13 @@
1
+ import { FeatureFlags } from "../abstractions.js";
2
+ import { FeatureFlags as FeatureFlagsClass } from "@webiny/feature-flags";
3
+ import { WcpLicenseProvider } from "../../../features/wcp/WcpLicenseProvider.js";
4
+ declare class FeatureFlagsWithLicenseDecoratorImpl implements FeatureFlags.Interface {
5
+ private licenseProvider;
6
+ private decoratee;
7
+ constructor(licenseProvider: WcpLicenseProvider.Interface, decoratee: FeatureFlags.Interface);
8
+ get(): FeatureFlagsClass;
9
+ }
10
+ export declare const FeatureFlagsWithLicenseDecorator: typeof FeatureFlagsWithLicenseDecoratorImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("../abstractions.js").IFeatureFlagsAbstraction>;
12
+ };
13
+ export {};
@@ -0,0 +1,49 @@
1
+ import { FeatureFlags } from "../abstractions.js";
2
+ import { FeatureFlags as feature_flags_FeatureFlags } from "@webiny/feature-flags";
3
+ import { WcpLicenseProvider } from "../../wcp/WcpLicenseProvider.js";
4
+ const LICENSE_CHECKS = {
5
+ multiTenancy: (l)=>l.canUseFeature("multiTenancy"),
6
+ advancedPublishingWorkflow: (l)=>l.canUseWorkflows(),
7
+ advancedAccessControlLayer: (l)=>l.canUseAacl(),
8
+ "advancedAccessControlLayer.teams": (l)=>l.canUseTeams(),
9
+ "advancedAccessControlLayer.privateFiles": (l)=>l.canUsePrivateFiles(),
10
+ "advancedAccessControlLayer.folderLevelPermissions": (l)=>l.canUseFolderLevelPermissions(),
11
+ "advancedAccessControlLayer.hcmsFieldPermissions": (l)=>l.canUseHcmsFieldPermissions(),
12
+ auditLogs: (l)=>l.canUseAuditLogs(),
13
+ recordLocking: (l)=>l.canUseRecordLocking(),
14
+ "fileManager.threatDetection": (l)=>l.canUseFileManagerThreatDetection(),
15
+ "aiPowerups.fileManager.imageEnrichment": (l)=>l.canUseAiImageEnrichment(),
16
+ abTesting: (l)=>l.canUseAbTesting()
17
+ };
18
+ class LicenseDecoratedFeatureFlags extends feature_flags_FeatureFlags {
19
+ constructor(base, license){
20
+ super(base.toDto()), this.base = base, this.license = license;
21
+ }
22
+ isEnabled(name) {
23
+ const check = LICENSE_CHECKS[name];
24
+ if (check) {
25
+ if (!check(this.license)) return false;
26
+ return !this.base.isExplicitlyDisabled(name);
27
+ }
28
+ return this.base.isEnabled(name);
29
+ }
30
+ }
31
+ class FeatureFlagsWithLicenseDecoratorImpl {
32
+ constructor(licenseProvider, decoratee){
33
+ this.licenseProvider = licenseProvider;
34
+ this.decoratee = decoratee;
35
+ }
36
+ get() {
37
+ const base = this.decoratee.get();
38
+ return new LicenseDecoratedFeatureFlags(base, this.licenseProvider.get());
39
+ }
40
+ }
41
+ const FeatureFlagsWithLicenseDecorator = FeatureFlags.createDecorator({
42
+ decorator: FeatureFlagsWithLicenseDecoratorImpl,
43
+ dependencies: [
44
+ WcpLicenseProvider
45
+ ]
46
+ });
47
+ export { FeatureFlagsWithLicenseDecorator };
48
+
49
+ //# sourceMappingURL=FeatureFlagsWithLicenseDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.js","sources":["../../../../src/features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.ts"],"sourcesContent":["import { FeatureFlags } from \"../abstractions.js\";\nimport { FeatureFlags as FeatureFlagsClass } from \"@webiny/feature-flags\";\nimport type { FeatureFlagName } from \"@webiny/feature-flags\";\nimport type { ILicense } from \"@webiny/wcp/types.js\";\nimport { WcpLicenseProvider } from \"~/features/wcp/WcpLicenseProvider.js\";\n\n/*\n * Feature flag resolution (license decorator).\n *\n * Two kinds of flag, and only one of them is Webiny's to sell:\n *\n * LICENSE-GOVERNED (listed in LICENSE_CHECKS) — the license is the authority:\n * 1. No license, or license blocks the flag → false, config ignored\n * 2. License allows + config unset → true (the license grants it)\n * 3. License allows + config=false → false (config may disable, never re-enable)\n *\n * EVERYTHING ELSE — the project's own flags. The config decides, and nothing is assumed:\n * 4. config=true → true\n * 5. config=false or unset → false\n *\n * There is deliberately no third kind. A set of flags used to be enabled by default here, which was\n * a workaround for capabilities the license could not express: rather than gate them properly they\n * were left on for anyone holding any license at all. It also meant EVERY unrecognised name resolved\n * to true, so an undeclared flag and a typo both read as enabled. A feature that should be sold\n * belongs in LICENSE_CHECKS and on the license; anything else is the project's own to switch on.\n */\n\nconst LICENSE_CHECKS: Record<string, (license: ILicense) => boolean> = {\n multiTenancy: l => l.canUseFeature(\"multiTenancy\"),\n advancedPublishingWorkflow: l => l.canUseWorkflows(),\n advancedAccessControlLayer: l => l.canUseAacl(),\n \"advancedAccessControlLayer.teams\": l => l.canUseTeams(),\n \"advancedAccessControlLayer.privateFiles\": l => l.canUsePrivateFiles(),\n \"advancedAccessControlLayer.folderLevelPermissions\": l => l.canUseFolderLevelPermissions(),\n \"advancedAccessControlLayer.hcmsFieldPermissions\": l => l.canUseHcmsFieldPermissions(),\n auditLogs: l => l.canUseAuditLogs(),\n recordLocking: l => l.canUseRecordLocking(),\n \"fileManager.threatDetection\": l => l.canUseFileManagerThreatDetection(),\n \"aiPowerups.fileManager.imageEnrichment\": l => l.canUseAiImageEnrichment(),\n abTesting: l => l.canUseAbTesting()\n};\n\nclass LicenseDecoratedFeatureFlags extends FeatureFlagsClass {\n constructor(\n private base: FeatureFlagsClass,\n private license: ILicense\n ) {\n super(base.toDto());\n }\n\n override isEnabled(name: FeatureFlagName): boolean {\n const check = LICENSE_CHECKS[name];\n if (check) {\n if (!check(this.license)) {\n return false;\n }\n // License allows — config can only disable, not re-enable blocked features.\n return !this.base.isExplicitlyDisabled(name);\n }\n /*\n * Everything else is the project's own, and the config is the only thing that decides. No\n * default: `isEnabled` on the base is true only for an explicitly configured `true`.\n *\n * This branch used to return `!isExplicitlyDisabled(name)` whenever a license existed, which\n * made EVERY unrecognised name true — an undeclared flag, or a typo like `aiPowerupz`. It also\n * returned false outright without a license, so an unlicensed install could not turn on a flag\n * it had declared itself. Neither is the license's business.\n */\n return this.base.isEnabled(name);\n }\n}\n\nclass FeatureFlagsWithLicenseDecoratorImpl implements FeatureFlags.Interface {\n constructor(\n private licenseProvider: WcpLicenseProvider.Interface,\n private decoratee: FeatureFlags.Interface\n ) {}\n\n get(): FeatureFlagsClass {\n const base = this.decoratee.get();\n return new LicenseDecoratedFeatureFlags(base, this.licenseProvider.get());\n }\n}\n\nexport const FeatureFlagsWithLicenseDecorator = FeatureFlags.createDecorator({\n decorator: FeatureFlagsWithLicenseDecoratorImpl,\n dependencies: [WcpLicenseProvider]\n});\n"],"names":["LICENSE_CHECKS","l","LicenseDecoratedFeatureFlags","FeatureFlagsClass","base","license","name","check","FeatureFlagsWithLicenseDecoratorImpl","licenseProvider","decoratee","FeatureFlagsWithLicenseDecorator","FeatureFlags","WcpLicenseProvider"],"mappings":";;;AA2BA,MAAMA,iBAAiE;IACnE,cAAcC,CAAAA,IAAKA,EAAE,aAAa,CAAC;IACnC,4BAA4BA,CAAAA,IAAKA,EAAE,eAAe;IAClD,4BAA4BA,CAAAA,IAAKA,EAAE,UAAU;IAC7C,oCAAoCA,CAAAA,IAAKA,EAAE,WAAW;IACtD,2CAA2CA,CAAAA,IAAKA,EAAE,kBAAkB;IACpE,qDAAqDA,CAAAA,IAAKA,EAAE,4BAA4B;IACxF,mDAAmDA,CAAAA,IAAKA,EAAE,0BAA0B;IACpF,WAAWA,CAAAA,IAAKA,EAAE,eAAe;IACjC,eAAeA,CAAAA,IAAKA,EAAE,mBAAmB;IACzC,+BAA+BA,CAAAA,IAAKA,EAAE,gCAAgC;IACtE,0CAA0CA,CAAAA,IAAKA,EAAE,uBAAuB;IACxE,WAAWA,CAAAA,IAAKA,EAAE,eAAe;AACrC;AAEA,MAAMC,qCAAqCC;IACvC,YACYC,IAAuB,EACvBC,OAAiB,CAC3B;QACE,KAAK,CAACD,KAAK,KAAK,UAHRA,IAAI,GAAJA,MAAAA,IAAAA,CACAC,OAAO,GAAPA;IAGZ;IAES,UAAUC,IAAqB,EAAW;QAC/C,MAAMC,QAAQP,cAAc,CAACM,KAAK;QAClC,IAAIC,OAAO;YACP,IAAI,CAACA,MAAM,IAAI,CAAC,OAAO,GACnB,OAAO;YAGX,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAACD;QAC3C;QAUA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAACA;IAC/B;AACJ;AAEA,MAAME;IACF,YACYC,eAA6C,EAC7CC,SAAiC,CAC3C;aAFUD,eAAe,GAAfA;aACAC,SAAS,GAATA;IACT;IAEH,MAAyB;QACrB,MAAMN,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG;QAC/B,OAAO,IAAIF,6BAA6BE,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG;IAC1E;AACJ;AAEO,MAAMO,mCAAmCC,aAAa,eAAe,CAAC;IACzE,WAAWJ;IACX,cAAc;QAACK;KAAmB;AACtC"}
@@ -2,12 +2,12 @@ import { IdentityContext as Abstraction } from "./abstractions.js";
2
2
  import { Identity } from "./Identity.js";
3
3
  import { AuthorizationContext } from "../authorization/AuthorizationContext/index.js";
4
4
  import type { SecurityPermission } from "../../../types/security.js";
5
- import { WcpContext } from "../../wcp/WcpContext/index.js";
5
+ import { FeatureFlags } from "../../featureFlags/abstractions.js";
6
6
  declare class IdentityContextImpl implements Abstraction.Interface {
7
7
  private authorizationContext;
8
- private wcpContext;
8
+ private featureFlags;
9
9
  private identity;
10
- constructor(authorizationContext: AuthorizationContext.Interface, wcpContext: WcpContext.Interface);
10
+ constructor(authorizationContext: AuthorizationContext.Interface, featureFlags: FeatureFlags.Interface);
11
11
  getIdentity(): Identity;
12
12
  setIdentity(identity: Identity | undefined): void;
13
13
  withIdentity<T>(identity: Identity | undefined, cb: () => Promise<T>): Promise<T>;
@@ -5,12 +5,12 @@ import { IdentityContext } from "./abstractions.js";
5
5
  import { AnonymousIdentity } from "./AnonymousIdentity.js";
6
6
  import { AuthorizationContext } from "../authorization/AuthorizationContext/index.js";
7
7
  import { filterOutCustomWbyAppsPermissions } from "../utils/filterOutCustomWbyAppsPermissions.js";
8
- import { WcpContext } from "../../wcp/WcpContext/index.js";
8
+ import { FeatureFlags } from "../../featureFlags/abstractions.js";
9
9
  const identityStorage = new AsyncLocalStorage();
10
10
  class IdentityContextImpl {
11
- constructor(authorizationContext, wcpContext){
11
+ constructor(authorizationContext, featureFlags){
12
12
  this.authorizationContext = authorizationContext;
13
- this.wcpContext = wcpContext;
13
+ this.featureFlags = featureFlags;
14
14
  this.identity = new AnonymousIdentity();
15
15
  }
16
16
  getIdentity() {
@@ -63,8 +63,8 @@ class IdentityContextImpl {
63
63
  return permissions.some((p)=>"*" === p.name);
64
64
  }
65
65
  applyAaclLogic(permissions) {
66
- const aaclEnabled = this.wcpContext.canUseAacl();
67
- const teamsEnabled = this.wcpContext.canUseTeams();
66
+ const aaclEnabled = this.featureFlags.get().isEnabled("advancedAccessControlLayer");
67
+ const teamsEnabled = this.featureFlags.get().isEnabled("advancedAccessControlLayer.teams");
68
68
  if (aaclEnabled) return [
69
69
  ...permissions,
70
70
  {
@@ -80,7 +80,7 @@ const IdentityContext_IdentityContext = createImplementation({
80
80
  implementation: IdentityContextImpl,
81
81
  dependencies: [
82
82
  AuthorizationContext,
83
- WcpContext
83
+ FeatureFlags
84
84
  ]
85
85
  });
86
86
  export { IdentityContext_IdentityContext as IdentityContext };
@@ -1 +1 @@
1
- {"version":3,"file":"features/security/IdentityContext/IdentityContext.js","sources":["../../../../src/features/security/IdentityContext/IdentityContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { minimatch } from \"minimatch\";\nimport { createImplementation } from \"@webiny/di\";\nimport { IdentityContext as Abstraction } from \"./abstractions.js\";\nimport { Identity } from \"./Identity.js\";\nimport { AnonymousIdentity } from \"./AnonymousIdentity.js\";\nimport { AuthorizationContext } from \"../authorization/AuthorizationContext/index.js\";\nimport { filterOutCustomWbyAppsPermissions } from \"../utils/filterOutCustomWbyAppsPermissions.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport type { AaclPermission } from \"../../wcp/WcpContext/types.js\";\nimport { WcpContext } from \"../../wcp/WcpContext/index.js\";\n\nconst identityStorage = new AsyncLocalStorage<Identity | undefined>();\n\nclass IdentityContextImpl implements Abstraction.Interface {\n private identity: Identity = new AnonymousIdentity();\n\n constructor(\n private authorizationContext: AuthorizationContext.Interface,\n private wcpContext: WcpContext.Interface\n ) {}\n\n // ========================================================================\n // Identity Methods\n // ========================================================================\n\n getIdentity(): Identity {\n // Check for identity override first (from withIdentity())\n const override = identityStorage.getStore();\n if (override !== undefined) {\n return override;\n }\n return this.identity;\n }\n\n setIdentity(identity: Identity | undefined): void {\n // If undefined, set to anonymous identity\n this.identity = identity ?? new AnonymousIdentity();\n\n // Clear permissions cache when identity changes\n this.authorizationContext.clearPermissionsCache();\n }\n\n withIdentity<T>(identity: Identity | undefined, cb: () => Promise<T>): Promise<T> {\n return identityStorage.run(identity, cb);\n }\n\n // ========================================================================\n // Authorization State Methods\n // ========================================================================\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return this.authorizationContext.withoutAuthorization(cb);\n }\n\n isAuthorizationEnabled(): boolean {\n return this.authorizationContext.isAuthorizationEnabled();\n }\n\n // ========================================================================\n // Permission Methods\n // ========================================================================\n\n async getPermission<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission | null> {\n if (!this.isAuthorizationEnabled()) {\n return { name: \"*\" } as TPermission;\n }\n\n const permissions = await this.listPermissions();\n\n // Try exact match first\n const exactMatch = permissions.find(p => p.name === name);\n if (exactMatch) {\n return exactMatch as TPermission;\n }\n\n // Try pattern matching\n const patternMatch = permissions.find(p => minimatch(name, p.name));\n if (patternMatch) {\n return patternMatch as TPermission;\n }\n\n return null;\n }\n\n async getPermissions<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission[]> {\n if (!this.isAuthorizationEnabled()) {\n return [{ name: \"*\" }] as TPermission[];\n }\n\n const permissions = await this.listPermissions();\n\n return permissions.filter(p => {\n if (p.name === name) {\n return true;\n }\n return minimatch(name, p.name);\n }) as TPermission[];\n }\n\n async listPermissions(): Promise<SecurityPermission[]> {\n const permissions = await this.authorizationContext.loadPermissions(this.getIdentity());\n // TODO: extract this into a decorator\n return this.applyAaclLogic(permissions);\n }\n\n async hasFullAccess(): Promise<boolean> {\n const permissions = await this.listPermissions();\n return permissions.some(p => p.name === \"*\");\n }\n\n // ========================================================================\n // Private Helper Methods\n // ========================================================================\n\n private applyAaclLogic(permissions: SecurityPermission[]): SecurityPermission[] {\n const aaclEnabled = this.wcpContext.canUseAacl();\n const teamsEnabled = this.wcpContext.canUseTeams();\n\n if (aaclEnabled) {\n // Add AACL metadata permission\n return [\n ...permissions,\n {\n name: \"aacl\",\n teams: teamsEnabled\n } as AaclPermission\n ];\n }\n\n // If AACL is not enabled, filter out custom Webiny apps permissions\n return filterOutCustomWbyAppsPermissions(permissions);\n }\n}\n\nexport const IdentityContext = createImplementation({\n abstraction: Abstraction,\n implementation: IdentityContextImpl,\n dependencies: [AuthorizationContext, WcpContext]\n});\n"],"names":["identityStorage","AsyncLocalStorage","IdentityContextImpl","authorizationContext","wcpContext","AnonymousIdentity","override","undefined","identity","cb","name","permissions","exactMatch","p","patternMatch","minimatch","aaclEnabled","teamsEnabled","filterOutCustomWbyAppsPermissions","IdentityContext","createImplementation","Abstraction","AuthorizationContext","WcpContext"],"mappings":";;;;;;;;AAYA,MAAMA,kBAAkB,IAAIC;AAE5B,MAAMC;IAGF,YACYC,oBAAoD,EACpDC,UAAgC,CAC1C;aAFUD,oBAAoB,GAApBA;aACAC,UAAU,GAAVA;aAJJ,QAAQ,GAAa,IAAIC;IAK9B;IAMH,cAAwB;QAEpB,MAAMC,WAAWN,gBAAgB,QAAQ;QACzC,IAAIM,AAAaC,WAAbD,UACA,OAAOA;QAEX,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,YAAYE,QAA8B,EAAQ;QAE9C,IAAI,CAAC,QAAQ,GAAGA,YAAY,IAAIH;QAGhC,IAAI,CAAC,oBAAoB,CAAC,qBAAqB;IACnD;IAEA,aAAgBG,QAA8B,EAAEC,EAAoB,EAAc;QAC9E,OAAOT,gBAAgB,GAAG,CAACQ,UAAUC;IACzC;IAMA,qBAAwBA,EAAoB,EAAc;QACtD,OAAO,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAACA;IAC1D;IAEA,yBAAkC;QAC9B,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB;IAC3D;IAMA,MAAM,cACFC,IAAY,EACe;QAC3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAC5B,OAAO;YAAE,MAAM;QAAI;QAGvB,MAAMC,cAAc,MAAM,IAAI,CAAC,eAAe;QAG9C,MAAMC,aAAaD,YAAY,IAAI,CAACE,CAAAA,IAAKA,EAAE,IAAI,KAAKH;QACpD,IAAIE,YACA,OAAOA;QAIX,MAAME,eAAeH,YAAY,IAAI,CAACE,CAAAA,IAAKE,UAAUL,MAAMG,EAAE,IAAI;QACjE,IAAIC,cACA,OAAOA;QAGX,OAAO;IACX;IAEA,MAAM,eACFJ,IAAY,EACU;QACtB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAC5B,OAAO;YAAC;gBAAE,MAAM;YAAI;SAAE;QAG1B,MAAMC,cAAc,MAAM,IAAI,CAAC,eAAe;QAE9C,OAAOA,YAAY,MAAM,CAACE,CAAAA;YACtB,IAAIA,EAAE,IAAI,KAAKH,MACX,OAAO;YAEX,OAAOK,UAAUL,MAAMG,EAAE,IAAI;QACjC;IACJ;IAEA,MAAM,kBAAiD;QACnD,MAAMF,cAAc,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW;QAEpF,OAAO,IAAI,CAAC,cAAc,CAACA;IAC/B;IAEA,MAAM,gBAAkC;QACpC,MAAMA,cAAc,MAAM,IAAI,CAAC,eAAe;QAC9C,OAAOA,YAAY,IAAI,CAACE,CAAAA,IAAKA,AAAW,QAAXA,EAAE,IAAI;IACvC;IAMQ,eAAeF,WAAiC,EAAwB;QAC5E,MAAMK,cAAc,IAAI,CAAC,UAAU,CAAC,UAAU;QAC9C,MAAMC,eAAe,IAAI,CAAC,UAAU,CAAC,WAAW;QAEhD,IAAID,aAEA,OAAO;eACAL;YACH;gBACI,MAAM;gBACN,OAAOM;YACX;SACH;QAIL,OAAOC,kCAAkCP;IAC7C;AACJ;AAEO,MAAMQ,kCAAkBC,qBAAqB;IAChD,aAAaC;IACb,gBAAgBnB;IAChB,cAAc;QAACoB;QAAsBC;KAAW;AACpD"}
1
+ {"version":3,"file":"features/security/IdentityContext/IdentityContext.js","sources":["../../../../src/features/security/IdentityContext/IdentityContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { minimatch } from \"minimatch\";\nimport { createImplementation } from \"@webiny/di\";\nimport { IdentityContext as Abstraction } from \"./abstractions.js\";\nimport { Identity } from \"./Identity.js\";\nimport { AnonymousIdentity } from \"./AnonymousIdentity.js\";\nimport { AuthorizationContext } from \"../authorization/AuthorizationContext/index.js\";\nimport { filterOutCustomWbyAppsPermissions } from \"../utils/filterOutCustomWbyAppsPermissions.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport type { AaclPermission } from \"../../wcp/WcpContext/types.js\";\nimport { FeatureFlags } from \"../../featureFlags/abstractions.js\";\n\nconst identityStorage = new AsyncLocalStorage<Identity | undefined>();\n\nclass IdentityContextImpl implements Abstraction.Interface {\n private identity: Identity = new AnonymousIdentity();\n\n constructor(\n private authorizationContext: AuthorizationContext.Interface,\n private featureFlags: FeatureFlags.Interface\n ) {}\n\n // ========================================================================\n // Identity Methods\n // ========================================================================\n\n getIdentity(): Identity {\n // Check for identity override first (from withIdentity())\n const override = identityStorage.getStore();\n if (override !== undefined) {\n return override;\n }\n return this.identity;\n }\n\n setIdentity(identity: Identity | undefined): void {\n // If undefined, set to anonymous identity\n this.identity = identity ?? new AnonymousIdentity();\n\n // Clear permissions cache when identity changes\n this.authorizationContext.clearPermissionsCache();\n }\n\n withIdentity<T>(identity: Identity | undefined, cb: () => Promise<T>): Promise<T> {\n return identityStorage.run(identity, cb);\n }\n\n // ========================================================================\n // Authorization State Methods\n // ========================================================================\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return this.authorizationContext.withoutAuthorization(cb);\n }\n\n isAuthorizationEnabled(): boolean {\n return this.authorizationContext.isAuthorizationEnabled();\n }\n\n // ========================================================================\n // Permission Methods\n // ========================================================================\n\n async getPermission<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission | null> {\n if (!this.isAuthorizationEnabled()) {\n return { name: \"*\" } as TPermission;\n }\n\n const permissions = await this.listPermissions();\n\n // Try exact match first\n const exactMatch = permissions.find(p => p.name === name);\n if (exactMatch) {\n return exactMatch as TPermission;\n }\n\n // Try pattern matching\n const patternMatch = permissions.find(p => minimatch(name, p.name));\n if (patternMatch) {\n return patternMatch as TPermission;\n }\n\n return null;\n }\n\n async getPermissions<TPermission extends SecurityPermission = SecurityPermission>(\n name: string\n ): Promise<TPermission[]> {\n if (!this.isAuthorizationEnabled()) {\n return [{ name: \"*\" }] as TPermission[];\n }\n\n const permissions = await this.listPermissions();\n\n return permissions.filter(p => {\n if (p.name === name) {\n return true;\n }\n return minimatch(name, p.name);\n }) as TPermission[];\n }\n\n async listPermissions(): Promise<SecurityPermission[]> {\n const permissions = await this.authorizationContext.loadPermissions(this.getIdentity());\n // TODO: extract this into a decorator\n return this.applyAaclLogic(permissions);\n }\n\n async hasFullAccess(): Promise<boolean> {\n const permissions = await this.listPermissions();\n return permissions.some(p => p.name === \"*\");\n }\n\n // ========================================================================\n // Private Helper Methods\n // ========================================================================\n\n private applyAaclLogic(permissions: SecurityPermission[]): SecurityPermission[] {\n const aaclEnabled = this.featureFlags.get().isEnabled(\"advancedAccessControlLayer\");\n const teamsEnabled = this.featureFlags.get().isEnabled(\"advancedAccessControlLayer.teams\");\n\n if (aaclEnabled) {\n // Add AACL metadata permission\n return [\n ...permissions,\n {\n name: \"aacl\",\n teams: teamsEnabled\n } as AaclPermission\n ];\n }\n\n // If AACL is not enabled, filter out custom Webiny apps permissions\n return filterOutCustomWbyAppsPermissions(permissions);\n }\n}\n\nexport const IdentityContext = createImplementation({\n abstraction: Abstraction,\n implementation: IdentityContextImpl,\n dependencies: [AuthorizationContext, FeatureFlags]\n});\n"],"names":["identityStorage","AsyncLocalStorage","IdentityContextImpl","authorizationContext","featureFlags","AnonymousIdentity","override","undefined","identity","cb","name","permissions","exactMatch","p","patternMatch","minimatch","aaclEnabled","teamsEnabled","filterOutCustomWbyAppsPermissions","IdentityContext","createImplementation","Abstraction","AuthorizationContext","FeatureFlags"],"mappings":";;;;;;;;AAYA,MAAMA,kBAAkB,IAAIC;AAE5B,MAAMC;IAGF,YACYC,oBAAoD,EACpDC,YAAoC,CAC9C;aAFUD,oBAAoB,GAApBA;aACAC,YAAY,GAAZA;aAJJ,QAAQ,GAAa,IAAIC;IAK9B;IAMH,cAAwB;QAEpB,MAAMC,WAAWN,gBAAgB,QAAQ;QACzC,IAAIM,AAAaC,WAAbD,UACA,OAAOA;QAEX,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,YAAYE,QAA8B,EAAQ;QAE9C,IAAI,CAAC,QAAQ,GAAGA,YAAY,IAAIH;QAGhC,IAAI,CAAC,oBAAoB,CAAC,qBAAqB;IACnD;IAEA,aAAgBG,QAA8B,EAAEC,EAAoB,EAAc;QAC9E,OAAOT,gBAAgB,GAAG,CAACQ,UAAUC;IACzC;IAMA,qBAAwBA,EAAoB,EAAc;QACtD,OAAO,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAACA;IAC1D;IAEA,yBAAkC;QAC9B,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB;IAC3D;IAMA,MAAM,cACFC,IAAY,EACe;QAC3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAC5B,OAAO;YAAE,MAAM;QAAI;QAGvB,MAAMC,cAAc,MAAM,IAAI,CAAC,eAAe;QAG9C,MAAMC,aAAaD,YAAY,IAAI,CAACE,CAAAA,IAAKA,EAAE,IAAI,KAAKH;QACpD,IAAIE,YACA,OAAOA;QAIX,MAAME,eAAeH,YAAY,IAAI,CAACE,CAAAA,IAAKE,UAAUL,MAAMG,EAAE,IAAI;QACjE,IAAIC,cACA,OAAOA;QAGX,OAAO;IACX;IAEA,MAAM,eACFJ,IAAY,EACU;QACtB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAC5B,OAAO;YAAC;gBAAE,MAAM;YAAI;SAAE;QAG1B,MAAMC,cAAc,MAAM,IAAI,CAAC,eAAe;QAE9C,OAAOA,YAAY,MAAM,CAACE,CAAAA;YACtB,IAAIA,EAAE,IAAI,KAAKH,MACX,OAAO;YAEX,OAAOK,UAAUL,MAAMG,EAAE,IAAI;QACjC;IACJ;IAEA,MAAM,kBAAiD;QACnD,MAAMF,cAAc,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW;QAEpF,OAAO,IAAI,CAAC,cAAc,CAACA;IAC/B;IAEA,MAAM,gBAAkC;QACpC,MAAMA,cAAc,MAAM,IAAI,CAAC,eAAe;QAC9C,OAAOA,YAAY,IAAI,CAACE,CAAAA,IAAKA,AAAW,QAAXA,EAAE,IAAI;IACvC;IAMQ,eAAeF,WAAiC,EAAwB;QAC5E,MAAMK,cAAc,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,SAAS,CAAC;QACtD,MAAMC,eAAe,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,SAAS,CAAC;QAEvD,IAAID,aAEA,OAAO;eACAL;YACH;gBACI,MAAM;gBACN,OAAOM;YACX;SACH;QAIL,OAAOC,kCAAkCP;IAC7C;AACJ;AAEO,MAAMQ,kCAAkBC,qBAAqB;IAChD,aAAaC;IACb,gBAAgBnB;IAChB,cAAc;QAACoB;QAAsBC;KAAa;AACtD"}
@@ -8,6 +8,7 @@ import { createApiKeyInputSchema } from "../shared/schemas.js";
8
8
  import { ApiKeyAfterCreateEvent, ApiKeyBeforeCreateEvent } from "./events.js";
9
9
  import { generateToken } from "../shared/generateToken.js";
10
10
  import { ApiKeyNotAuthorizedError, ApiKeyValidationError } from "../shared/errors.js";
11
+ import { descriptionOnCreate } from "../../shared/description.js";
11
12
  class CreateApiKeyUseCaseImpl {
12
13
  constructor(identityContext, eventPublisher, repository){
13
14
  this.identityContext = identityContext;
@@ -22,13 +23,17 @@ class CreateApiKeyUseCaseImpl {
22
23
  const token = generateToken();
23
24
  const identity = this.identityContext.getIdentity();
24
25
  const data = validation.data;
26
+ const createInput = {
27
+ ...data,
28
+ description: descriptionOnCreate(data.description)
29
+ };
25
30
  const apiKey = {
26
31
  id: mdbid(),
27
- name: data.name,
28
- slug: data.slug,
29
- description: data.description,
32
+ name: createInput.name,
33
+ slug: createInput.slug,
34
+ description: descriptionOnCreate(createInput.description),
30
35
  token,
31
- permissions: data.permissions,
36
+ permissions: createInput.permissions,
32
37
  createdOn: new Date().toISOString(),
33
38
  createdBy: {
34
39
  id: identity.id,
@@ -38,13 +43,13 @@ class CreateApiKeyUseCaseImpl {
38
43
  };
39
44
  await this.eventPublisher.publish(new ApiKeyBeforeCreateEvent({
40
45
  apiKey,
41
- input: validation.data
46
+ input: createInput
42
47
  }));
43
48
  const result = await this.repository.create(apiKey);
44
49
  if (result.isFail()) return Result.fail(result.error);
45
50
  await this.eventPublisher.publish(new ApiKeyAfterCreateEvent({
46
51
  apiKey,
47
- input: validation.data
52
+ input: createInput
48
53
  }));
49
54
  return Result.ok(apiKey);
50
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js","sources":["../../../../../src/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport { Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { CreateApiKeyUseCase as CreateApiKeyUseCaseAbstraction } from \"./abstractions.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\nimport { IdentityContext } from \"../../IdentityContext/abstractions.js\";\nimport { createApiKeyInputSchema } from \"../shared/schemas.js\";\nimport { ApiKeyBeforeCreateEvent, ApiKeyAfterCreateEvent } from \"./events.js\";\nimport type { ApiKey, CreateApiKeyInput } from \"../shared/types.js\";\nimport type { ApiKeyPermission } from \"~/types/security.js\";\nimport { generateToken } from \"../shared/generateToken.js\";\nimport { ApiKeyValidationError, ApiKeyNotAuthorizedError } from \"../shared/errors.js\";\n\nclass CreateApiKeyUseCaseImpl implements CreateApiKeyUseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: ApiKeysRepository.Interface\n ) {}\n\n async execute(\n input: CreateApiKeyInput\n ): Promise<Result<ApiKey, CreateApiKeyUseCaseAbstraction.Error>> {\n const hasPermission =\n await this.identityContext.getPermission<ApiKeyPermission>(\"security.apiKey\");\n\n if (!hasPermission) {\n return Result.fail(new ApiKeyNotAuthorizedError());\n }\n\n const validation = createApiKeyInputSchema.safeParse(input);\n if (!validation.success) {\n return Result.fail(new ApiKeyValidationError(validation.error.issues[0].message));\n }\n\n const token = generateToken();\n const identity = this.identityContext.getIdentity();\n const data = validation.data;\n\n const apiKey: ApiKey = {\n id: mdbid(),\n name: data.name,\n slug: data.slug,\n description: data.description,\n token,\n permissions: data.permissions,\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n }\n };\n\n await this.eventPublisher.publish(\n new ApiKeyBeforeCreateEvent({ apiKey, input: validation.data })\n );\n\n const result = await this.repository.create(apiKey);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n await this.eventPublisher.publish(\n new ApiKeyAfterCreateEvent({ apiKey, input: validation.data })\n );\n\n return Result.ok(apiKey);\n }\n}\n\nexport const CreateApiKeyUseCase = CreateApiKeyUseCaseAbstraction.createImplementation({\n implementation: CreateApiKeyUseCaseImpl,\n dependencies: [IdentityContext, EventPublisher, ApiKeysRepository]\n});\n"],"names":["CreateApiKeyUseCaseImpl","identityContext","eventPublisher","repository","input","hasPermission","Result","ApiKeyNotAuthorizedError","validation","createApiKeyInputSchema","ApiKeyValidationError","token","generateToken","identity","data","apiKey","mdbid","Date","ApiKeyBeforeCreateEvent","result","ApiKeyAfterCreateEvent","CreateApiKeyUseCase","CreateApiKeyUseCaseAbstraction","IdentityContext","EventPublisher","ApiKeysRepository"],"mappings":";;;;;;;;;;AAaA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,UAAuC,CACjD;aAHUF,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QACFC,KAAwB,EACqC;QAC7D,MAAMC,gBACF,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAmB;QAE/D,IAAI,CAACA,eACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAMC,aAAaC,wBAAwB,SAAS,CAACL;QACrD,IAAI,CAACI,WAAW,OAAO,EACnB,OAAOF,OAAO,IAAI,CAAC,IAAII,sBAAsBF,WAAW,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO;QAGnF,MAAMG,QAAQC;QACd,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,OAAON,WAAW,IAAI;QAE5B,MAAMO,SAAiB;YACnB,IAAIC;YACJ,MAAMF,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,aAAaA,KAAK,WAAW;YAC7BH;YACA,aAAaG,KAAK,WAAW;YAC7B,WAAW,IAAIG,OAAO,WAAW;YACjC,WAAW;gBACP,IAAIJ,SAAS,EAAE;gBACf,aAAaA,SAAS,WAAW;gBACjC,MAAMA,SAAS,IAAI;YACvB;QACJ;QAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIK,wBAAwB;YAAEH;YAAQ,OAAOP,WAAW,IAAI;QAAC;QAGjE,MAAMW,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAACJ;QAE5C,IAAII,OAAO,MAAM,IACb,OAAOb,OAAO,IAAI,CAACa,OAAO,KAAK;QAGnC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,uBAAuB;YAAEL;YAAQ,OAAOP,WAAW,IAAI;QAAC;QAGhE,OAAOF,OAAO,EAAE,CAACS;IACrB;AACJ;AAEO,MAAMM,0CAAsBC,oBAAAA,oBAAmD,CAAC;IACnF,gBAAgBtB;IAChB,cAAc;QAACuB;QAAiBC;QAAgBC;KAAkB;AACtE"}
1
+ {"version":3,"file":"features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js","sources":["../../../../../src/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport { Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { CreateApiKeyUseCase as CreateApiKeyUseCaseAbstraction } from \"./abstractions.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\nimport { IdentityContext } from \"../../IdentityContext/abstractions.js\";\nimport { createApiKeyInputSchema } from \"../shared/schemas.js\";\nimport { ApiKeyBeforeCreateEvent, ApiKeyAfterCreateEvent } from \"./events.js\";\nimport type { ApiKey, CreateApiKeyInput } from \"../shared/types.js\";\nimport type { ApiKeyPermission } from \"~/types/security.js\";\nimport { generateToken } from \"../shared/generateToken.js\";\nimport { ApiKeyValidationError, ApiKeyNotAuthorizedError } from \"../shared/errors.js\";\nimport { descriptionOnCreate } from \"../../shared/description.js\";\n\nclass CreateApiKeyUseCaseImpl implements CreateApiKeyUseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: ApiKeysRepository.Interface\n ) {}\n\n async execute(\n input: CreateApiKeyInput\n ): Promise<Result<ApiKey, CreateApiKeyUseCaseAbstraction.Error>> {\n const hasPermission =\n await this.identityContext.getPermission<ApiKeyPermission>(\"security.apiKey\");\n\n if (!hasPermission) {\n return Result.fail(new ApiKeyNotAuthorizedError());\n }\n\n const validation = createApiKeyInputSchema.safeParse(input);\n if (!validation.success) {\n return Result.fail(new ApiKeyValidationError(validation.error.issues[0].message));\n }\n\n const token = generateToken();\n const identity = this.identityContext.getIdentity();\n const data = validation.data;\n\n // Normalised up front so that null reaches neither the entity nor the published events.\n const createInput: CreateApiKeyInput = {\n ...data,\n description: descriptionOnCreate(data.description)\n };\n\n const apiKey: ApiKey = {\n id: mdbid(),\n name: createInput.name,\n slug: createInput.slug,\n description: descriptionOnCreate(createInput.description),\n token,\n permissions: createInput.permissions,\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n }\n };\n\n await this.eventPublisher.publish(\n new ApiKeyBeforeCreateEvent({ apiKey, input: createInput })\n );\n\n const result = await this.repository.create(apiKey);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n await this.eventPublisher.publish(\n new ApiKeyAfterCreateEvent({ apiKey, input: createInput })\n );\n\n return Result.ok(apiKey);\n }\n}\n\nexport const CreateApiKeyUseCase = CreateApiKeyUseCaseAbstraction.createImplementation({\n implementation: CreateApiKeyUseCaseImpl,\n dependencies: [IdentityContext, EventPublisher, ApiKeysRepository]\n});\n"],"names":["CreateApiKeyUseCaseImpl","identityContext","eventPublisher","repository","input","hasPermission","Result","ApiKeyNotAuthorizedError","validation","createApiKeyInputSchema","ApiKeyValidationError","token","generateToken","identity","data","createInput","descriptionOnCreate","apiKey","mdbid","Date","ApiKeyBeforeCreateEvent","result","ApiKeyAfterCreateEvent","CreateApiKeyUseCase","CreateApiKeyUseCaseAbstraction","IdentityContext","EventPublisher","ApiKeysRepository"],"mappings":";;;;;;;;;;;AAcA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,UAAuC,CACjD;aAHUF,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QACFC,KAAwB,EACqC;QAC7D,MAAMC,gBACF,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAmB;QAE/D,IAAI,CAACA,eACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAMC,aAAaC,wBAAwB,SAAS,CAACL;QACrD,IAAI,CAACI,WAAW,OAAO,EACnB,OAAOF,OAAO,IAAI,CAAC,IAAII,sBAAsBF,WAAW,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO;QAGnF,MAAMG,QAAQC;QACd,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,OAAON,WAAW,IAAI;QAG5B,MAAMO,cAAiC;YACnC,GAAGD,IAAI;YACP,aAAaE,oBAAoBF,KAAK,WAAW;QACrD;QAEA,MAAMG,SAAiB;YACnB,IAAIC;YACJ,MAAMH,YAAY,IAAI;YACtB,MAAMA,YAAY,IAAI;YACtB,aAAaC,oBAAoBD,YAAY,WAAW;YACxDJ;YACA,aAAaI,YAAY,WAAW;YACpC,WAAW,IAAII,OAAO,WAAW;YACjC,WAAW;gBACP,IAAIN,SAAS,EAAE;gBACf,aAAaA,SAAS,WAAW;gBACjC,MAAMA,SAAS,IAAI;YACvB;QACJ;QAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIO,wBAAwB;YAAEH;YAAQ,OAAOF;QAAY;QAG7D,MAAMM,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAACJ;QAE5C,IAAII,OAAO,MAAM,IACb,OAAOf,OAAO,IAAI,CAACe,OAAO,KAAK;QAGnC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,uBAAuB;YAAEL;YAAQ,OAAOF;QAAY;QAG5D,OAAOT,OAAO,EAAE,CAACW;IACrB;AACJ;AAEO,MAAMM,0CAAsBC,oBAAAA,oBAAmD,CAAC;IACnF,gBAAgBxB;IAChB,cAAc;QAACyB;QAAiBC;QAAgBC;KAAkB;AACtE"}
@@ -7,7 +7,7 @@ declare class GetApiKeyUseCaseImpl implements GetApiKeyUseCaseAbstraction.Interf
7
7
  private repository;
8
8
  private identityContext;
9
9
  constructor(repository: ApiKeysRepository.Interface, identityContext: IdentityContext.Interface);
10
- execute(id: string): Promise<Result<ApiKey | null, GetApiKeyUseCaseAbstraction.Error>>;
10
+ execute(id: string): Promise<Result<ApiKey, GetApiKeyUseCaseAbstraction.Error>>;
11
11
  }
12
12
  export declare const GetApiKeyUseCase: typeof GetApiKeyUseCaseImpl & {
13
13
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetApiKey>;
@@ -1 +1 @@
1
- {"version":3,"file":"features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js","sources":["../../../../../src/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetApiKeyUseCase as GetApiKeyUseCaseAbstraction } from \"./abstractions.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\nimport { IdentityContext } from \"../../IdentityContext/abstractions.js\";\nimport type { ApiKey } from \"../shared/types.js\";\nimport { ApiKeyNotAuthorizedError } from \"~/features/security/apiKeys/shared/errors.js\";\n\nclass GetApiKeyUseCaseImpl implements GetApiKeyUseCaseAbstraction.Interface {\n private repository: ApiKeysRepository.Interface;\n private identityContext: IdentityContext.Interface;\n\n constructor(\n repository: ApiKeysRepository.Interface,\n identityContext: IdentityContext.Interface\n ) {\n this.repository = repository;\n this.identityContext = identityContext;\n }\n\n async execute(id: string): Promise<Result<ApiKey | null, GetApiKeyUseCaseAbstraction.Error>> {\n const hasPermission = await this.identityContext.getPermission(\"security.apiKey\");\n if (!hasPermission) {\n return Result.fail(new ApiKeyNotAuthorizedError());\n }\n\n return this.repository.get(id);\n }\n}\n\nexport const GetApiKeyUseCase = GetApiKeyUseCaseAbstraction.createImplementation({\n implementation: GetApiKeyUseCaseImpl,\n dependencies: [ApiKeysRepository, IdentityContext]\n});\n"],"names":["GetApiKeyUseCaseImpl","repository","identityContext","id","hasPermission","Result","ApiKeyNotAuthorizedError","GetApiKeyUseCase","GetApiKeyUseCaseAbstraction","ApiKeysRepository","IdentityContext"],"mappings":";;;;;AAOA,MAAMA;IAIF,YACIC,UAAuC,EACvCC,eAA0C,CAC5C;QACE,IAAI,CAAC,UAAU,GAAGD;QAClB,IAAI,CAAC,eAAe,GAAGC;IAC3B;IAEA,MAAM,QAAQC,EAAU,EAAqE;QACzF,MAAMC,gBAAgB,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAC/D,IAAI,CAACA,eACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAACH;IAC/B;AACJ;AAEO,MAAMI,oCAAmBC,iBAAAA,oBAAgD,CAAC;IAC7E,gBAAgBR;IAChB,cAAc;QAACS;QAAmBC;KAAgB;AACtD"}
1
+ {"version":3,"file":"features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js","sources":["../../../../../src/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetApiKeyUseCase as GetApiKeyUseCaseAbstraction } from \"./abstractions.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\nimport { IdentityContext } from \"../../IdentityContext/abstractions.js\";\nimport type { ApiKey } from \"../shared/types.js\";\nimport { ApiKeyNotAuthorizedError } from \"~/features/security/apiKeys/shared/errors.js\";\n\nclass GetApiKeyUseCaseImpl implements GetApiKeyUseCaseAbstraction.Interface {\n private repository: ApiKeysRepository.Interface;\n private identityContext: IdentityContext.Interface;\n\n constructor(\n repository: ApiKeysRepository.Interface,\n identityContext: IdentityContext.Interface\n ) {\n this.repository = repository;\n this.identityContext = identityContext;\n }\n\n async execute(id: string): Promise<Result<ApiKey, GetApiKeyUseCaseAbstraction.Error>> {\n const hasPermission = await this.identityContext.getPermission(\"security.apiKey\");\n if (!hasPermission) {\n return Result.fail(new ApiKeyNotAuthorizedError());\n }\n\n return this.repository.get(id);\n }\n}\n\nexport const GetApiKeyUseCase = GetApiKeyUseCaseAbstraction.createImplementation({\n implementation: GetApiKeyUseCaseImpl,\n dependencies: [ApiKeysRepository, IdentityContext]\n});\n"],"names":["GetApiKeyUseCaseImpl","repository","identityContext","id","hasPermission","Result","ApiKeyNotAuthorizedError","GetApiKeyUseCase","GetApiKeyUseCaseAbstraction","ApiKeysRepository","IdentityContext"],"mappings":";;;;;AAOA,MAAMA;IAIF,YACIC,UAAuC,EACvCC,eAA0C,CAC5C;QACE,IAAI,CAAC,UAAU,GAAGD;QAClB,IAAI,CAAC,eAAe,GAAGC;IAC3B;IAEA,MAAM,QAAQC,EAAU,EAA8D;QAClF,MAAMC,gBAAgB,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAC/D,IAAI,CAACA,eACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAACH;IAC/B;AACJ;AAEO,MAAMI,oCAAmBC,iBAAAA,oBAAgD,CAAC;IAC7E,gBAAgBR;IAChB,cAAc;QAACS;QAAmBC;KAAgB;AACtD"}
@@ -1,11 +1,9 @@
1
- import { Result } from "@webiny/feature/api";
2
1
  import { GetApiKeyBySlugUseCase as GetApiKeyBySlugUseCaseAbstraction } from "./abstractions.js";
3
2
  import { ApiKeysRepository } from "../shared/abstractions.js";
4
- import type { ApiKey } from "../shared/types.js";
5
3
  declare class GetApiKeyBySlugUseCaseImpl implements GetApiKeyBySlugUseCaseAbstraction.Interface {
6
4
  private repository;
7
5
  constructor(repository: ApiKeysRepository.Interface);
8
- execute(slug: string): Promise<Result<ApiKey | null, GetApiKeyBySlugUseCaseAbstraction.Error>>;
6
+ execute(slug: string): Promise<import("@webiny/feature/api/Result.js").Result<import("../shared/types.js").ApiKey, import("../shared/errors.js").ApiKeyNotFoundError | import("../shared/errors.js").ApiKeyPersistenceError | import("../shared/errors.js").ApiKeyValidationError>>;
9
7
  }
10
8
  export declare const GetApiKeyBySlugUseCase: typeof GetApiKeyBySlugUseCaseImpl & {
11
9
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetApiKeyBySlug>;
@@ -1 +1 @@
1
- {"version":3,"file":"features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js","sources":["../../../../../src/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetApiKeyBySlugUseCase as GetApiKeyBySlugUseCaseAbstraction } from \"./abstractions.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\nimport type { ApiKey } from \"../shared/types.js\";\n\nclass GetApiKeyBySlugUseCaseImpl implements GetApiKeyBySlugUseCaseAbstraction.Interface {\n private repository: ApiKeysRepository.Interface;\n\n constructor(repository: ApiKeysRepository.Interface) {\n this.repository = repository;\n }\n\n async execute(\n slug: string\n ): Promise<Result<ApiKey | null, GetApiKeyBySlugUseCaseAbstraction.Error>> {\n return this.repository.getBySlug(slug);\n }\n}\n\nexport const GetApiKeyBySlugUseCase = GetApiKeyBySlugUseCaseAbstraction.createImplementation({\n implementation: GetApiKeyBySlugUseCaseImpl,\n dependencies: [ApiKeysRepository]\n});\n"],"names":["GetApiKeyBySlugUseCaseImpl","repository","slug","GetApiKeyBySlugUseCase","GetApiKeyBySlugUseCaseAbstraction","ApiKeysRepository"],"mappings":";;AAKA,MAAMA;IAGF,YAAYC,UAAuC,CAAE;QACjD,IAAI,CAAC,UAAU,GAAGA;IACtB;IAEA,MAAM,QACFC,IAAY,EAC2D;QACvE,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAACA;IACrC;AACJ;AAEO,MAAMC,gDAAyBC,uBAAAA,oBAAsD,CAAC;IACzF,gBAAgBJ;IAChB,cAAc;QAACK;KAAkB;AACrC"}
1
+ {"version":3,"file":"features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js","sources":["../../../../../src/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.ts"],"sourcesContent":["import { GetApiKeyBySlugUseCase as GetApiKeyBySlugUseCaseAbstraction } from \"./abstractions.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\n\nclass GetApiKeyBySlugUseCaseImpl implements GetApiKeyBySlugUseCaseAbstraction.Interface {\n constructor(private repository: ApiKeysRepository.Interface) {}\n\n async execute(slug: string) {\n return this.repository.getBySlug(slug);\n }\n}\n\nexport const GetApiKeyBySlugUseCase = GetApiKeyBySlugUseCaseAbstraction.createImplementation({\n implementation: GetApiKeyBySlugUseCaseImpl,\n dependencies: [ApiKeysRepository]\n});\n"],"names":["GetApiKeyBySlugUseCaseImpl","repository","slug","GetApiKeyBySlugUseCase","GetApiKeyBySlugUseCaseAbstraction","ApiKeysRepository"],"mappings":";;AAGA,MAAMA;IACF,YAAoBC,UAAuC,CAAE;aAAzCA,UAAU,GAAVA;IAA0C;IAE9D,MAAM,QAAQC,IAAY,EAAE;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAACA;IACrC;AACJ;AAEO,MAAMC,gDAAyBC,uBAAAA,oBAAsD,CAAC;IACzF,gBAAgBJ;IAChB,cAAc;QAACK;KAAkB;AACrC"}
@@ -5,7 +5,7 @@ export interface IGetApiKeyBySlugErrors {
5
5
  }
6
6
  type GetApiKeyBySlugError = IGetApiKeyBySlugErrors[keyof IGetApiKeyBySlugErrors] | ApiKeysRepository.Error;
7
7
  export interface IGetApiKeyBySlug {
8
- execute(slug: string): Promise<Result<ApiKey | null, GetApiKeyBySlugError>>;
8
+ execute(slug: string): Promise<Result<ApiKey, GetApiKeyBySlugError>>;
9
9
  }
10
10
  /** Retrieve an API key by its slug. */
11
11
  export declare const GetApiKeyBySlugUseCase: import("@webiny/di").Abstraction<IGetApiKeyBySlug>;
@@ -1 +1 @@
1
- {"version":3,"file":"features/security/apiKeys/GetApiKeyBySlug/abstractions.js","sources":["../../../../../src/features/security/apiKeys/GetApiKeyBySlug/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { ApiKey } from \"../shared/types.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\n\nexport interface IGetApiKeyBySlugErrors {\n // No use-case specific errors - only repository errors can occur\n}\n\ntype GetApiKeyBySlugError =\n | IGetApiKeyBySlugErrors[keyof IGetApiKeyBySlugErrors]\n | ApiKeysRepository.Error;\n\nexport interface IGetApiKeyBySlug {\n execute(slug: string): Promise<Result<ApiKey | null, GetApiKeyBySlugError>>;\n}\n\n/** Retrieve an API key by its slug. */\nexport const GetApiKeyBySlugUseCase = createAbstraction<IGetApiKeyBySlug>(\"GetApiKeyBySlugUseCase\");\n\nexport namespace GetApiKeyBySlugUseCase {\n export type Interface = IGetApiKeyBySlug;\n export type Error = GetApiKeyBySlugError;\n}\n"],"names":["GetApiKeyBySlugUseCase","createAbstraction"],"mappings":";AAkBO,MAAMA,yBAAyBC,kBAAoC"}
1
+ {"version":3,"file":"features/security/apiKeys/GetApiKeyBySlug/abstractions.js","sources":["../../../../../src/features/security/apiKeys/GetApiKeyBySlug/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { ApiKey } from \"../shared/types.js\";\nimport { ApiKeysRepository } from \"../shared/abstractions.js\";\n\nexport interface IGetApiKeyBySlugErrors {\n // No use-case specific errors - only repository errors can occur\n}\n\ntype GetApiKeyBySlugError =\n | IGetApiKeyBySlugErrors[keyof IGetApiKeyBySlugErrors]\n | ApiKeysRepository.Error;\n\nexport interface IGetApiKeyBySlug {\n execute(slug: string): Promise<Result<ApiKey, GetApiKeyBySlugError>>;\n}\n\n/** Retrieve an API key by its slug. */\nexport const GetApiKeyBySlugUseCase = createAbstraction<IGetApiKeyBySlug>(\"GetApiKeyBySlugUseCase\");\n\nexport namespace GetApiKeyBySlugUseCase {\n export type Interface = IGetApiKeyBySlug;\n export type Error = GetApiKeyBySlugError;\n}\n"],"names":["GetApiKeyBySlugUseCase","createAbstraction"],"mappings":";AAkBO,MAAMA,yBAAyBC,kBAAoC"}
@@ -1,11 +1,9 @@
1
- import { Result } from "@webiny/feature/api";
2
1
  import { GetApiKeyByTokenUseCase as GetApiKeyByTokenUseCaseAbstraction } from "./abstractions.js";
3
2
  import { ApiKeysRepository } from "../shared/abstractions.js";
4
- import type { ApiKey } from "../shared/types.js";
5
3
  declare class GetApiKeyByTokenUseCaseImpl implements GetApiKeyByTokenUseCaseAbstraction.Interface {
6
4
  private repository;
7
5
  constructor(repository: ApiKeysRepository.Interface);
8
- execute(token: string): Promise<Result<ApiKey | null, GetApiKeyByTokenUseCaseAbstraction.Error>>;
6
+ execute(token: string): Promise<import("@webiny/feature/api/Result.js").Result<import("../shared/types.js").ApiKey, import("../shared/errors.js").ApiKeyNotFoundError | import("../shared/errors.js").ApiKeyPersistenceError | import("../shared/errors.js").ApiKeyValidationError>>;
9
7
  }
10
8
  export declare const GetApiKeyByTokenUseCase: typeof GetApiKeyByTokenUseCaseImpl & {
11
9
  __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetApiKeyByToken>;