@webiny/api-core 6.0.0 → 6.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/domain/security/ApiToken.d.ts +1 -0
  2. package/domain/security/ApiToken.js +1 -0
  3. package/domain/security/ApiToken.js.map +1 -1
  4. package/exports/api/security.d.ts +2 -0
  5. package/exports/api/security.js +2 -0
  6. package/exports/api/security.js.map +1 -1
  7. package/features/buildParams/abstractions.d.ts +2 -0
  8. package/features/buildParams/abstractions.js +2 -0
  9. package/features/buildParams/abstractions.js.map +1 -1
  10. package/features/eventPublisher/abstractions.d.ts +2 -0
  11. package/features/eventPublisher/abstractions.js +3 -0
  12. package/features/eventPublisher/abstractions.js.map +1 -1
  13. package/features/keyValueStore/abstractions.d.ts +4 -0
  14. package/features/keyValueStore/abstractions.js +4 -0
  15. package/features/keyValueStore/abstractions.js.map +1 -1
  16. package/features/logger/abstractions.d.ts +1 -0
  17. package/features/logger/abstractions.js +1 -0
  18. package/features/logger/abstractions.js.map +1 -1
  19. package/features/security/IdentityContext/abstractions.d.ts +1 -0
  20. package/features/security/IdentityContext/abstractions.js +1 -0
  21. package/features/security/IdentityContext/abstractions.js.map +1 -1
  22. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js +1 -1
  23. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js.map +1 -1
  24. package/features/security/apiKeys/CreateApiKey/abstractions.d.ts +1 -0
  25. package/features/security/apiKeys/CreateApiKey/abstractions.js +1 -0
  26. package/features/security/apiKeys/CreateApiKey/abstractions.js.map +1 -1
  27. package/features/security/apiKeys/CreateApiKey/events.d.ts +2 -0
  28. package/features/security/apiKeys/CreateApiKey/events.js +4 -0
  29. package/features/security/apiKeys/CreateApiKey/events.js.map +1 -1
  30. package/features/security/apiKeys/DeleteApiKey/abstractions.d.ts +1 -0
  31. package/features/security/apiKeys/DeleteApiKey/abstractions.js +1 -0
  32. package/features/security/apiKeys/DeleteApiKey/abstractions.js.map +1 -1
  33. package/features/security/apiKeys/DeleteApiKey/events.d.ts +2 -0
  34. package/features/security/apiKeys/DeleteApiKey/events.js +4 -0
  35. package/features/security/apiKeys/DeleteApiKey/events.js.map +1 -1
  36. package/features/security/apiKeys/GetApiKey/abstractions.d.ts +1 -0
  37. package/features/security/apiKeys/GetApiKey/abstractions.js +1 -0
  38. package/features/security/apiKeys/GetApiKey/abstractions.js.map +1 -1
  39. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.d.ts +1 -0
  40. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js +1 -0
  41. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
  42. package/features/security/apiKeys/GetApiKeyByToken/abstractions.d.ts +1 -0
  43. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js +1 -0
  44. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
  45. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js +1 -1
  46. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js.map +1 -1
  47. package/features/security/apiKeys/ListApiKeys/abstractions.d.ts +1 -0
  48. package/features/security/apiKeys/ListApiKeys/abstractions.js +1 -0
  49. package/features/security/apiKeys/ListApiKeys/abstractions.js.map +1 -1
  50. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js +1 -1
  51. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js.map +1 -1
  52. package/features/security/apiKeys/UpdateApiKey/abstractions.d.ts +1 -0
  53. package/features/security/apiKeys/UpdateApiKey/abstractions.js +1 -0
  54. package/features/security/apiKeys/UpdateApiKey/abstractions.js.map +1 -1
  55. package/features/security/apiKeys/UpdateApiKey/events.d.ts +2 -0
  56. package/features/security/apiKeys/UpdateApiKey/events.js +4 -0
  57. package/features/security/apiKeys/UpdateApiKey/events.js.map +1 -1
  58. package/features/security/apiKeys/shared/abstractions.d.ts +5 -2
  59. package/features/security/apiKeys/shared/abstractions.js +3 -0
  60. package/features/security/apiKeys/shared/abstractions.js.map +1 -1
  61. package/features/security/apiKeys/shared/schemas.d.ts +10 -71
  62. package/features/security/apiKeys/shared/schemas.js +4 -4
  63. package/features/security/apiKeys/shared/schemas.js.map +1 -1
  64. package/features/security/authentication/AuthenticationContext/abstractions.d.ts +1 -0
  65. package/features/security/authentication/AuthenticationContext/abstractions.js +1 -0
  66. package/features/security/authentication/AuthenticationContext/abstractions.js.map +1 -1
  67. package/features/security/authentication/AuthenticationContext/events.d.ts +2 -0
  68. package/features/security/authentication/AuthenticationContext/events.js +4 -0
  69. package/features/security/authentication/AuthenticationContext/events.js.map +1 -1
  70. package/features/security/authentication/Authenticator/abstractions.d.ts +1 -0
  71. package/features/security/authentication/Authenticator/abstractions.js +1 -0
  72. package/features/security/authentication/Authenticator/abstractions.js.map +1 -1
  73. package/features/security/authorization/AuthorizationContext/abstractions.d.ts +2 -0
  74. package/features/security/authorization/AuthorizationContext/abstractions.js +2 -0
  75. package/features/security/authorization/AuthorizationContext/abstractions.js.map +1 -1
  76. package/features/security/authorization/Authorizer/abstractions.d.ts +1 -0
  77. package/features/security/authorization/Authorizer/abstractions.js +1 -0
  78. package/features/security/authorization/Authorizer/abstractions.js.map +1 -1
  79. package/features/security/login/abstractions.d.ts +1 -0
  80. package/features/security/login/abstractions.js +2 -0
  81. package/features/security/login/abstractions.js.map +1 -1
  82. package/features/security/roles/CreateRole/CreateRoleUseCase.d.ts +1 -3
  83. package/features/security/roles/CreateRole/CreateRoleUseCase.js +3 -7
  84. package/features/security/roles/CreateRole/CreateRoleUseCase.js.map +1 -1
  85. package/features/security/roles/CreateRole/abstractions.d.ts +1 -0
  86. package/features/security/roles/CreateRole/abstractions.js +1 -0
  87. package/features/security/roles/CreateRole/abstractions.js.map +1 -1
  88. package/features/security/roles/CreateRole/events.d.ts +2 -0
  89. package/features/security/roles/CreateRole/events.js +4 -0
  90. package/features/security/roles/CreateRole/events.js.map +1 -1
  91. package/features/security/roles/CreateRole/schema.d.ts +2 -20
  92. package/features/security/roles/CreateRole/schema.js +2 -2
  93. package/features/security/roles/CreateRole/schema.js.map +1 -1
  94. package/features/security/roles/DeleteRole/abstractions.d.ts +1 -0
  95. package/features/security/roles/DeleteRole/abstractions.js +1 -0
  96. package/features/security/roles/DeleteRole/abstractions.js.map +1 -1
  97. package/features/security/roles/DeleteRole/events.d.ts +2 -0
  98. package/features/security/roles/DeleteRole/events.js +4 -0
  99. package/features/security/roles/DeleteRole/events.js.map +1 -1
  100. package/features/security/roles/GetRole/abstractions.d.ts +1 -0
  101. package/features/security/roles/GetRole/abstractions.js +1 -0
  102. package/features/security/roles/GetRole/abstractions.js.map +1 -1
  103. package/features/security/roles/ListRoles/abstractions.d.ts +1 -0
  104. package/features/security/roles/ListRoles/abstractions.js +1 -0
  105. package/features/security/roles/ListRoles/abstractions.js.map +1 -1
  106. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js +1 -1
  107. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js.map +1 -1
  108. package/features/security/roles/UpdateRole/abstractions.d.ts +1 -0
  109. package/features/security/roles/UpdateRole/abstractions.js +1 -0
  110. package/features/security/roles/UpdateRole/abstractions.js.map +1 -1
  111. package/features/security/roles/UpdateRole/events.d.ts +2 -0
  112. package/features/security/roles/UpdateRole/events.js +4 -0
  113. package/features/security/roles/UpdateRole/events.js.map +1 -1
  114. package/features/security/roles/UpdateRole/schema.d.ts +2 -18
  115. package/features/security/roles/UpdateRole/schema.js +2 -2
  116. package/features/security/roles/UpdateRole/schema.js.map +1 -1
  117. package/features/security/roles/feature.js +2 -0
  118. package/features/security/roles/feature.js.map +1 -1
  119. package/features/security/roles/shared/RoleProvider.d.ts +13 -0
  120. package/features/security/roles/shared/RoleProvider.js +29 -0
  121. package/features/security/roles/shared/RoleProvider.js.map +1 -0
  122. package/features/security/roles/shared/RolesRepository.d.ts +3 -1
  123. package/features/security/roles/shared/RolesRepository.js +19 -18
  124. package/features/security/roles/shared/RolesRepository.js.map +1 -1
  125. package/features/security/roles/shared/abstractions.d.ts +19 -0
  126. package/features/security/roles/shared/abstractions.js +3 -0
  127. package/features/security/roles/shared/abstractions.js.map +1 -1
  128. package/features/security/shared/abstractions.d.ts +5 -14
  129. package/features/security/shared/abstractions.js +3 -16
  130. package/features/security/shared/abstractions.js.map +1 -1
  131. package/features/security/teams/CreateTeam/CreateTeamUseCase.d.ts +1 -3
  132. package/features/security/teams/CreateTeam/CreateTeamUseCase.js +3 -7
  133. package/features/security/teams/CreateTeam/CreateTeamUseCase.js.map +1 -1
  134. package/features/security/teams/CreateTeam/abstractions.d.ts +1 -0
  135. package/features/security/teams/CreateTeam/abstractions.js +1 -0
  136. package/features/security/teams/CreateTeam/abstractions.js.map +1 -1
  137. package/features/security/teams/CreateTeam/events.d.ts +2 -0
  138. package/features/security/teams/CreateTeam/events.js +4 -0
  139. package/features/security/teams/CreateTeam/events.js.map +1 -1
  140. package/features/security/teams/CreateTeam/schema.d.ts +2 -12
  141. package/features/security/teams/DeleteTeam/abstractions.d.ts +1 -0
  142. package/features/security/teams/DeleteTeam/abstractions.js +1 -0
  143. package/features/security/teams/DeleteTeam/abstractions.js.map +1 -1
  144. package/features/security/teams/DeleteTeam/events.d.ts +2 -0
  145. package/features/security/teams/DeleteTeam/events.js +4 -0
  146. package/features/security/teams/DeleteTeam/events.js.map +1 -1
  147. package/features/security/teams/GetTeam/abstractions.d.ts +1 -0
  148. package/features/security/teams/GetTeam/abstractions.js +1 -0
  149. package/features/security/teams/GetTeam/abstractions.js.map +1 -1
  150. package/features/security/teams/ListTeams/abstractions.d.ts +1 -0
  151. package/features/security/teams/ListTeams/abstractions.js +1 -0
  152. package/features/security/teams/ListTeams/abstractions.js.map +1 -1
  153. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js +1 -1
  154. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js.map +1 -1
  155. package/features/security/teams/UpdateTeam/abstractions.d.ts +1 -0
  156. package/features/security/teams/UpdateTeam/abstractions.js +1 -0
  157. package/features/security/teams/UpdateTeam/abstractions.js.map +1 -1
  158. package/features/security/teams/UpdateTeam/events.d.ts +2 -0
  159. package/features/security/teams/UpdateTeam/events.js +4 -0
  160. package/features/security/teams/UpdateTeam/events.js.map +1 -1
  161. package/features/security/teams/UpdateTeam/schema.d.ts +2 -10
  162. package/features/security/teams/feature.js +6 -0
  163. package/features/security/teams/feature.js.map +1 -1
  164. package/features/security/teams/shared/TeamProvider.d.ts +13 -0
  165. package/features/security/teams/shared/TeamProvider.js +29 -0
  166. package/features/security/teams/shared/TeamProvider.js.map +1 -0
  167. package/features/security/teams/shared/TeamsRepository.js +20 -18
  168. package/features/security/teams/shared/TeamsRepository.js.map +1 -1
  169. package/features/security/teams/shared/abstractions.d.ts +18 -0
  170. package/features/security/teams/shared/abstractions.js +3 -0
  171. package/features/security/teams/shared/abstractions.js.map +1 -1
  172. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.d.ts +17 -0
  173. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js +76 -0
  174. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js.map +1 -0
  175. package/features/security/utils/verifyJwtUsingJwk.d.ts +2 -4
  176. package/features/security/utils/verifyJwtUsingJwk.js +1 -1
  177. package/features/security/utils/verifyJwtUsingJwk.js.map +1 -1
  178. package/features/system/InstallSystem/abstractions.d.ts +2 -3
  179. package/features/system/InstallSystem/abstractions.js +2 -3
  180. package/features/system/InstallSystem/abstractions.js.map +1 -1
  181. package/features/task/TaskController/abstractions.d.ts +1 -0
  182. package/features/task/TaskController/abstractions.js +1 -0
  183. package/features/task/TaskController/abstractions.js.map +1 -1
  184. package/features/task/TaskDefinition/abstractions.d.ts +1 -0
  185. package/features/task/TaskDefinition/abstractions.js +1 -0
  186. package/features/task/TaskDefinition/abstractions.js.map +1 -1
  187. package/features/task/TaskService/abstractions.d.ts +1 -0
  188. package/features/task/TaskService/abstractions.js +1 -0
  189. package/features/task/TaskService/abstractions.js.map +1 -1
  190. package/features/tenancy/CreateTenant/abstractions.d.ts +5 -3
  191. package/features/tenancy/CreateTenant/abstractions.js +5 -3
  192. package/features/tenancy/CreateTenant/abstractions.js.map +1 -1
  193. package/features/tenancy/DeleteTenant/abstractions.d.ts +5 -0
  194. package/features/tenancy/DeleteTenant/abstractions.js +5 -0
  195. package/features/tenancy/DeleteTenant/abstractions.js.map +1 -1
  196. package/features/tenancy/GetTenantById/abstractions.d.ts +3 -0
  197. package/features/tenancy/GetTenantById/abstractions.js +3 -9
  198. package/features/tenancy/GetTenantById/abstractions.js.map +1 -1
  199. package/features/tenancy/InstallTenant/abstractions.d.ts +3 -9
  200. package/features/tenancy/InstallTenant/abstractions.js +3 -12
  201. package/features/tenancy/InstallTenant/abstractions.js.map +1 -1
  202. package/features/tenancy/TenantContext/abstractions.d.ts +1 -0
  203. package/features/tenancy/TenantContext/abstractions.js +1 -0
  204. package/features/tenancy/TenantContext/abstractions.js.map +1 -1
  205. package/features/tenancy/UpdateTenant/abstractions.d.ts +5 -0
  206. package/features/tenancy/UpdateTenant/abstractions.js +5 -0
  207. package/features/tenancy/UpdateTenant/abstractions.js.map +1 -1
  208. package/features/users/CreateUser/CreateUserUseCase.js +1 -1
  209. package/features/users/CreateUser/CreateUserUseCase.js.map +1 -1
  210. package/features/users/CreateUser/abstractions.d.ts +1 -0
  211. package/features/users/CreateUser/abstractions.js +1 -1
  212. package/features/users/CreateUser/abstractions.js.map +1 -1
  213. package/features/users/CreateUser/events.d.ts +2 -0
  214. package/features/users/CreateUser/events.js +4 -0
  215. package/features/users/CreateUser/events.js.map +1 -1
  216. package/features/users/CreateUser/schema.d.ts +4 -36
  217. package/features/users/DeleteUser/abstractions.d.ts +1 -0
  218. package/features/users/DeleteUser/abstractions.js +1 -1
  219. package/features/users/DeleteUser/abstractions.js.map +1 -1
  220. package/features/users/DeleteUser/events.d.ts +2 -0
  221. package/features/users/DeleteUser/events.js +4 -0
  222. package/features/users/DeleteUser/events.js.map +1 -1
  223. package/features/users/GetUser/abstractions.d.ts +1 -0
  224. package/features/users/GetUser/abstractions.js +1 -1
  225. package/features/users/GetUser/abstractions.js.map +1 -1
  226. package/features/users/ListUserTeams/abstractions.d.ts +1 -0
  227. package/features/users/ListUserTeams/abstractions.js +1 -1
  228. package/features/users/ListUserTeams/abstractions.js.map +1 -1
  229. package/features/users/ListUsers/abstractions.d.ts +1 -0
  230. package/features/users/ListUsers/abstractions.js +1 -1
  231. package/features/users/ListUsers/abstractions.js.map +1 -1
  232. package/features/users/UpdateUser/UpdateUserUseCase.js +1 -1
  233. package/features/users/UpdateUser/UpdateUserUseCase.js.map +1 -1
  234. package/features/users/UpdateUser/abstractions.d.ts +1 -0
  235. package/features/users/UpdateUser/abstractions.js +1 -1
  236. package/features/users/UpdateUser/abstractions.js.map +1 -1
  237. package/features/users/UpdateUser/events.d.ts +2 -0
  238. package/features/users/UpdateUser/events.js +4 -0
  239. package/features/users/UpdateUser/events.js.map +1 -1
  240. package/features/users/UpdateUser/schema.d.ts +4 -30
  241. package/features/users/shared/abstractions.d.ts +1 -0
  242. package/features/users/shared/abstractions.js +1 -1
  243. package/features/users/shared/abstractions.js.map +1 -1
  244. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +0 -1
  245. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
  246. package/graphql/security/NotAuthorizedResponse.d.ts +1 -0
  247. package/graphql/security/NotAuthorizedResponse.js +1 -0
  248. package/graphql/security/NotAuthorizedResponse.js.map +1 -1
  249. package/idp/abstractions.d.ts +4 -0
  250. package/idp/abstractions.js +4 -0
  251. package/idp/abstractions.js.map +1 -1
  252. package/legacy/security/createSecurityContext.js +0 -11
  253. package/legacy/security/createSecurityContext.js.map +1 -1
  254. package/models/base/BaseModel.js +2 -2
  255. package/models/base/BaseModel.js.map +1 -1
  256. package/models/base/ModelBuilder.d.ts +2 -2
  257. package/models/base/ModelBuilder.js +21 -2
  258. package/models/base/ModelBuilder.js.map +1 -1
  259. package/models/cms/FieldBuilder.d.ts +3 -2
  260. package/models/cms/FieldBuilder.js +12 -17
  261. package/models/cms/FieldBuilder.js.map +1 -1
  262. package/models/cms/FieldBuilderRegistry.d.ts +1 -1
  263. package/models/cms/FieldBuilderRegistry.js.map +1 -1
  264. package/models/cms/FieldDefinitionsBuilder.d.ts +1 -0
  265. package/models/cms/FieldDefinitionsBuilder.js +13 -15
  266. package/models/cms/FieldDefinitionsBuilder.js.map +1 -1
  267. package/models/cms/PrivateCmsModelBuilder.js.map +1 -1
  268. package/models/cms/abstractions.d.ts +1 -1
  269. package/models/cms/abstractions.js.map +1 -1
  270. package/models/cms/fieldsBuilder.md +1 -1
  271. package/models/simple/Page/abstractions.d.ts +1 -11
  272. package/package.json +20 -20
  273. package/types/security.d.ts +13 -10
  274. package/types/security.js.map +1 -1
  275. package/features/security/shared/abstractions.ts.bak +0 -52
  276. package/legacy/security/plugins/SecurityRolePlugin.d.ts +0 -16
  277. package/legacy/security/plugins/SecurityRolePlugin.js +0 -33
  278. package/legacy/security/plugins/SecurityRolePlugin.js.map +0 -1
  279. package/legacy/security/plugins/SecurityTeamPlugin.d.ts +0 -16
  280. package/legacy/security/plugins/SecurityTeamPlugin.js +0 -33
  281. package/legacy/security/plugins/SecurityTeamPlugin.js.map +0 -1
@@ -101,6 +101,7 @@ export interface ITaskDefinition<I extends ITaskInput = ITaskInput, O extends IT
101
101
  export interface ITaskCreateInputValidationParams {
102
102
  validator: typeof zod;
103
103
  }
104
+ /** Define a long-running background task with lifecycle hooks. */
104
105
  export declare const TaskDefinition: import("@webiny/di").Abstraction<ITaskDefinition<ITaskInput, ITaskOutput>>;
105
106
  /**
106
107
  * IRunnableTaskDefinition represents a TaskDefinition after decoration/processing.
@@ -32,6 +32,7 @@ export let TaskResultStatus = /*#__PURE__*/function (TaskResultStatus) {
32
32
  * Core TaskDefinition - minimal interface
33
33
  */
34
34
 
35
+ /** Define a long-running background task with lifecycle hooks. */
35
36
  export const TaskDefinition = createAbstraction("TaskDefinition");
36
37
 
37
38
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","TaskResultStatus","TaskDefinition"],"sources":["abstractions.ts"],"sourcesContent":["import zod from \"zod\";\nimport { createAbstraction } from \"@webiny/feature/api\";\nimport type { GenericRecord } from \"@webiny/api/types\";\nimport type { ITask } from \"~/features/task/TaskService/index.js\";\nimport { TaskController } from \"~/features/task/TaskController/index.js\";\n\nexport type ITaskInput = GenericRecord;\n\nexport interface IResponseError {\n message: string;\n code?: string | null;\n data?: GenericRecord | null;\n stack?: string;\n}\n\nexport interface ITaskOutput {\n error?: IResponseError;\n [key: string]: any;\n}\n\n/**\n * Task run params - ONLY the input data\n * All runtime dependencies come from TaskController (injected separately)\n */\nexport interface ITaskRunParams<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> {\n input: I;\n controller: TaskController.Interface<I, O>;\n}\n\n/**\n * Data for creating a new task\n */\nexport interface ITaskCreateData<I = ITaskInput> {\n definitionId: string;\n name: string;\n input: I;\n parentId?: string;\n}\n\n/**\n * Parameters for onBeforeTrigger lifecycle hook\n */\nexport interface ITaskBeforeTriggerParams<I = ITaskInput> {\n data: ITaskCreateData<I>;\n}\n\n/**\n * Task result status enum\n */\nexport enum TaskResultStatus {\n DONE = \"done\",\n CONTINUE = \"continue\",\n ERROR = \"error\",\n ABORTED = \"aborted\"\n}\n\n/**\n * Specific result types\n */\nexport interface ITaskResultDone<O extends ITaskOutput = ITaskOutput> {\n status: TaskResultStatus.DONE;\n message?: string;\n output?: O;\n}\n\nexport interface ITaskResultContinue<I = ITaskInput> {\n status: TaskResultStatus.CONTINUE;\n input: I;\n wait?: number; // seconds to wait before next iteration\n}\n\nexport interface ITaskResultError {\n status: TaskResultStatus.ERROR;\n error: IResponseError;\n}\n\nexport interface ITaskResultAborted {\n status: TaskResultStatus.ABORTED;\n}\n\nexport type ITaskResult<I = ITaskInput, O extends ITaskOutput = ITaskOutput> =\n | ITaskResultDone<O>\n | ITaskResultContinue<I>\n | ITaskResultError\n | ITaskResultAborted;\n\nexport type ITaskLifecycleHook<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> = { task: ITask<I, O> };\n\n/**\n * Core TaskDefinition - minimal interface\n */\nexport interface ITaskDefinition<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> {\n id: string;\n title: string;\n description?: string;\n maxIterations?: number;\n databaseLogs?: boolean;\n isPrivate?: boolean;\n\n /**\n * Core run method - receives ONLY input params\n * All runtime dependencies (logging, state management, etc.) come from TaskController\n */\n run(params: ITaskRunParams<I, O>): Promise<ITaskResult<I, O>>;\n\n /**\n * Optional lifecycle hooks - receive task data, no context\n */\n onBeforeTrigger?(params: ITaskBeforeTriggerParams<I>): Promise<void>;\n onDone?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n onError?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n onAbort?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n onMaxIterations?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n /**\n * Create a validation schema for the task input.\n * This will be used to validate the input before the task is triggered.\n */\n createInputValidation?(\n params: ITaskCreateInputValidationParams\n ): GenericRecord<keyof I, zod.Schema> | zod.Schema;\n}\n\nexport interface ITaskCreateInputValidationParams {\n validator: typeof zod;\n}\n\nexport const TaskDefinition = createAbstraction<ITaskDefinition>(\"TaskDefinition\");\n\n/**\n * IRunnableTaskDefinition represents a TaskDefinition after decoration/processing.\n * All optional runtime properties are guaranteed to have values (with defaults applied).\n * Used internally by the task runner to ensure consistent behavior.\n */\nexport interface IRunnableTaskDefinition<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> extends ITaskDefinition<I, O> {\n // Override optional properties to be required with guaranteed values\n isPrivate: boolean;\n databaseLogs: boolean;\n maxIterations: number;\n}\n\nexport namespace TaskDefinition {\n export type Interface<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskDefinition<I, O>;\n\n export type TaskInput = ITaskInput;\n\n export type TaskOutput = ITaskOutput;\n\n export type Runnable<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = IRunnableTaskDefinition<I, O>;\n\n export type RunParams<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskRunParams<I, O>;\n\n export type Result<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskResult<I, O>;\n\n export type Task<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITask<I, O>;\n\n export type ResultDone<O extends ITaskOutput = ITaskOutput> = ITaskResultDone<O>;\n export type ResultContinue<I = ITaskInput> = ITaskResultContinue<I>;\n export type ResultError = ITaskResultError;\n export type ResultAborted = ITaskResultAborted;\n export type CreateInputValidationParams = ITaskCreateInputValidationParams;\n export type TaskCreateData<I = ITaskInput> = ITaskCreateData<I>;\n export type BeforeTriggerParams<I = ITaskInput> = ITaskBeforeTriggerParams<I>;\n export type LifecycleHookParams<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskLifecycleHook<I, O>;\n}\n"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAmBvD;AACA;AACA;AACA;;AASA;AACA;AACA;;AAQA;AACA;AACA;;AAKA;AACA;AACA;AACA,WAAYC,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;;AAO5B;AACA;AACA;;AAiCA;AACA;AACA;;AAuCA,OAAO,MAAMC,cAAc,GAAGF,iBAAiB,CAAkB,gBAAgB,CAAC;;AAElF;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","TaskResultStatus","TaskDefinition"],"sources":["abstractions.ts"],"sourcesContent":["import zod from \"zod\";\nimport { createAbstraction } from \"@webiny/feature/api\";\nimport type { GenericRecord } from \"@webiny/api/types\";\nimport type { ITask } from \"~/features/task/TaskService/index.js\";\nimport { TaskController } from \"~/features/task/TaskController/index.js\";\n\nexport type ITaskInput = GenericRecord;\n\nexport interface IResponseError {\n message: string;\n code?: string | null;\n data?: GenericRecord | null;\n stack?: string;\n}\n\nexport interface ITaskOutput {\n error?: IResponseError;\n [key: string]: any;\n}\n\n/**\n * Task run params - ONLY the input data\n * All runtime dependencies come from TaskController (injected separately)\n */\nexport interface ITaskRunParams<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> {\n input: I;\n controller: TaskController.Interface<I, O>;\n}\n\n/**\n * Data for creating a new task\n */\nexport interface ITaskCreateData<I = ITaskInput> {\n definitionId: string;\n name: string;\n input: I;\n parentId?: string;\n}\n\n/**\n * Parameters for onBeforeTrigger lifecycle hook\n */\nexport interface ITaskBeforeTriggerParams<I = ITaskInput> {\n data: ITaskCreateData<I>;\n}\n\n/**\n * Task result status enum\n */\nexport enum TaskResultStatus {\n DONE = \"done\",\n CONTINUE = \"continue\",\n ERROR = \"error\",\n ABORTED = \"aborted\"\n}\n\n/**\n * Specific result types\n */\nexport interface ITaskResultDone<O extends ITaskOutput = ITaskOutput> {\n status: TaskResultStatus.DONE;\n message?: string;\n output?: O;\n}\n\nexport interface ITaskResultContinue<I = ITaskInput> {\n status: TaskResultStatus.CONTINUE;\n input: I;\n wait?: number; // seconds to wait before next iteration\n}\n\nexport interface ITaskResultError {\n status: TaskResultStatus.ERROR;\n error: IResponseError;\n}\n\nexport interface ITaskResultAborted {\n status: TaskResultStatus.ABORTED;\n}\n\nexport type ITaskResult<I = ITaskInput, O extends ITaskOutput = ITaskOutput> =\n | ITaskResultDone<O>\n | ITaskResultContinue<I>\n | ITaskResultError\n | ITaskResultAborted;\n\nexport type ITaskLifecycleHook<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> = { task: ITask<I, O> };\n\n/**\n * Core TaskDefinition - minimal interface\n */\nexport interface ITaskDefinition<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> {\n id: string;\n title: string;\n description?: string;\n maxIterations?: number;\n databaseLogs?: boolean;\n isPrivate?: boolean;\n\n /**\n * Core run method - receives ONLY input params\n * All runtime dependencies (logging, state management, etc.) come from TaskController\n */\n run(params: ITaskRunParams<I, O>): Promise<ITaskResult<I, O>>;\n\n /**\n * Optional lifecycle hooks - receive task data, no context\n */\n onBeforeTrigger?(params: ITaskBeforeTriggerParams<I>): Promise<void>;\n onDone?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n onError?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n onAbort?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n onMaxIterations?(params: ITaskLifecycleHook<I, O>): Promise<void>;\n /**\n * Create a validation schema for the task input.\n * This will be used to validate the input before the task is triggered.\n */\n createInputValidation?(\n params: ITaskCreateInputValidationParams\n ): GenericRecord<keyof I, zod.Schema> | zod.Schema;\n}\n\nexport interface ITaskCreateInputValidationParams {\n validator: typeof zod;\n}\n\n/** Define a long-running background task with lifecycle hooks. */\nexport const TaskDefinition = createAbstraction<ITaskDefinition>(\"TaskDefinition\");\n\n/**\n * IRunnableTaskDefinition represents a TaskDefinition after decoration/processing.\n * All optional runtime properties are guaranteed to have values (with defaults applied).\n * Used internally by the task runner to ensure consistent behavior.\n */\nexport interface IRunnableTaskDefinition<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n> extends ITaskDefinition<I, O> {\n // Override optional properties to be required with guaranteed values\n isPrivate: boolean;\n databaseLogs: boolean;\n maxIterations: number;\n}\n\nexport namespace TaskDefinition {\n export type Interface<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskDefinition<I, O>;\n\n export type TaskInput = ITaskInput;\n\n export type TaskOutput = ITaskOutput;\n\n export type Runnable<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = IRunnableTaskDefinition<I, O>;\n\n export type RunParams<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskRunParams<I, O>;\n\n export type Result<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskResult<I, O>;\n\n export type Task<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITask<I, O>;\n\n export type ResultDone<O extends ITaskOutput = ITaskOutput> = ITaskResultDone<O>;\n export type ResultContinue<I = ITaskInput> = ITaskResultContinue<I>;\n export type ResultError = ITaskResultError;\n export type ResultAborted = ITaskResultAborted;\n export type CreateInputValidationParams = ITaskCreateInputValidationParams;\n export type TaskCreateData<I = ITaskInput> = ITaskCreateData<I>;\n export type BeforeTriggerParams<I = ITaskInput> = ITaskBeforeTriggerParams<I>;\n export type LifecycleHookParams<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskLifecycleHook<I, O>;\n}\n"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAmBvD;AACA;AACA;AACA;;AASA;AACA;AACA;;AAQA;AACA;AACA;;AAKA;AACA;AACA;AACA,WAAYC,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;;AAO5B;AACA;AACA;;AAiCA;AACA;AACA;;AAuCA;AACA,OAAO,MAAMC,cAAc,GAAGF,iBAAiB,CAAkB,gBAAgB,CAAC;;AAElF;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import { BaseError, Result } from "@webiny/feature/api";
2
2
  import type { GenericRecord } from "@webiny/api/types.js";
3
3
  import { type ITaskOutput, TaskDefinition } from "../../../features/task/TaskDefinition/index.js";
4
+ /** Trigger and manage long-running background tasks. */
4
5
  export declare const TaskService: import("@webiny/di").Abstraction<ITaskService>;
5
6
  export declare namespace TaskService {
6
7
  type Interface = ITaskService;
@@ -1,4 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
+ /** Trigger and manage long-running background tasks. */
2
3
  export const TaskService = createAbstraction("TaskService");
3
4
 
4
5
  // The service info depends on the implementation.
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","TaskService","TaskDataStatus"],"sources":["abstractions.ts"],"sourcesContent":["import { BaseError, createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport { type ITaskOutput, TaskDefinition } from \"~/features/task/TaskDefinition/index.js\";\n\nexport const TaskService = createAbstraction<ITaskService>(\"TaskService\");\n\nexport namespace TaskService {\n export type Interface = ITaskService;\n /**\n * This is the output of `trigger` and `abort` actions.\n */\n export type GenericOutput = IGenericOutput;\n\n export type TaskInput = TaskDefinition.TaskInput;\n\n export type Task<\n I extends TaskDefinition.TaskInput = TaskDefinition.TaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITask<I, O>;\n}\n\n// The service info depends on the implementation.\n// We cannot have a more precise type here, since implementation can be anything (AWS, Azure, etc.).\nexport type IServiceInfo = GenericRecord;\n\nexport interface IResponseError {\n message: string;\n code?: string | null;\n data?: GenericRecord | null;\n stack?: string;\n}\n\nexport interface ITaskAbortParams {\n id: string;\n message?: string;\n}\n\nexport interface ITaskService {\n trigger: <\n T extends TaskDefinition.TaskInput = TaskDefinition.TaskInput,\n O extends IGenericOutput = IGenericOutput\n >(\n params: ITaskTriggerParams<T>\n ) => Promise<Result<ITask<T, O>, BaseError>>;\n abort: <\n T extends TaskDefinition.TaskInput = TaskDefinition.TaskInput,\n O extends IGenericOutput = IGenericOutput\n >(\n params: ITaskAbortParams\n ) => Promise<Result<ITask<T, O>, BaseError>>;\n fetchServiceInfo: (input: ITask<any, any> | string) => Promise<Result<IServiceInfo, BaseError>>;\n}\n\nexport interface IGenericOutput {\n error?: IResponseError;\n [key: string]:\n | string\n | string[]\n | number\n | boolean\n | undefined\n | Record<string, any>\n | IResponseError;\n}\n\nexport interface ITaskTriggerParams<I = TaskDefinition.TaskInput> {\n parent?: Pick<ITask, \"id\">;\n definition: string;\n name?: string;\n input?: I;\n delay?: number;\n}\n\nexport interface ITaskValues<T = GenericRecord, O extends ITaskOutput = ITaskOutput> {\n startedOn?: string;\n finishedOn?: string;\n eventResponse: GenericRecord | undefined;\n iterations: number;\n parentId?: string;\n name: string;\n taskStatus: TaskDataStatus;\n definitionId: string;\n executionName: string;\n input: T;\n output?: O;\n}\n\nexport interface ITask<T = GenericRecord, O extends ITaskOutput = ITaskOutput>\n extends ITaskValues<T, O> {\n /**\n * ID without the revision number (for example: #0001).\n */\n id: string;\n createdOn: string;\n savedOn: string;\n createdBy: ITaskIdentity;\n}\n\nexport enum TaskDataStatus {\n PENDING = \"pending\",\n RUNNING = \"running\",\n FAILED = \"failed\",\n SUCCESS = \"success\",\n ABORTED = \"aborted\"\n}\n\nexport interface ITaskIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n"],"mappings":"AAAA,SAAoBA,iBAAiB,QAAgB,qBAAqB;AAI1E,OAAO,MAAMC,WAAW,GAAGD,iBAAiB,CAAe,aAAa,CAAC;;AAiBzE;AACA;;AA4EA,WAAYE,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","TaskService","TaskDataStatus"],"sources":["abstractions.ts"],"sourcesContent":["import { BaseError, createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport { type ITaskOutput, TaskDefinition } from \"~/features/task/TaskDefinition/index.js\";\n\n/** Trigger and manage long-running background tasks. */\nexport const TaskService = createAbstraction<ITaskService>(\"TaskService\");\n\nexport namespace TaskService {\n export type Interface = ITaskService;\n /**\n * This is the output of `trigger` and `abort` actions.\n */\n export type GenericOutput = IGenericOutput;\n\n export type TaskInput = TaskDefinition.TaskInput;\n\n export type Task<\n I extends TaskDefinition.TaskInput = TaskDefinition.TaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITask<I, O>;\n}\n\n// The service info depends on the implementation.\n// We cannot have a more precise type here, since implementation can be anything (AWS, Azure, etc.).\nexport type IServiceInfo = GenericRecord;\n\nexport interface IResponseError {\n message: string;\n code?: string | null;\n data?: GenericRecord | null;\n stack?: string;\n}\n\nexport interface ITaskAbortParams {\n id: string;\n message?: string;\n}\n\nexport interface ITaskService {\n trigger: <\n T extends TaskDefinition.TaskInput = TaskDefinition.TaskInput,\n O extends IGenericOutput = IGenericOutput\n >(\n params: ITaskTriggerParams<T>\n ) => Promise<Result<ITask<T, O>, BaseError>>;\n abort: <\n T extends TaskDefinition.TaskInput = TaskDefinition.TaskInput,\n O extends IGenericOutput = IGenericOutput\n >(\n params: ITaskAbortParams\n ) => Promise<Result<ITask<T, O>, BaseError>>;\n fetchServiceInfo: (input: ITask<any, any> | string) => Promise<Result<IServiceInfo, BaseError>>;\n}\n\nexport interface IGenericOutput {\n error?: IResponseError;\n [key: string]:\n | string\n | string[]\n | number\n | boolean\n | undefined\n | Record<string, any>\n | IResponseError;\n}\n\nexport interface ITaskTriggerParams<I = TaskDefinition.TaskInput> {\n parent?: Pick<ITask, \"id\">;\n definition: string;\n name?: string;\n input?: I;\n delay?: number;\n}\n\nexport interface ITaskValues<T = GenericRecord, O extends ITaskOutput = ITaskOutput> {\n startedOn?: string;\n finishedOn?: string;\n eventResponse: GenericRecord | undefined;\n iterations: number;\n parentId?: string;\n name: string;\n taskStatus: TaskDataStatus;\n definitionId: string;\n executionName: string;\n input: T;\n output?: O;\n}\n\nexport interface ITask<T = GenericRecord, O extends ITaskOutput = ITaskOutput>\n extends ITaskValues<T, O> {\n /**\n * ID without the revision number (for example: #0001).\n */\n id: string;\n createdOn: string;\n savedOn: string;\n createdBy: ITaskIdentity;\n}\n\nexport enum TaskDataStatus {\n PENDING = \"pending\",\n RUNNING = \"running\",\n FAILED = \"failed\",\n SUCCESS = \"success\",\n ABORTED = \"aborted\"\n}\n\nexport interface ITaskIdentity {\n id: string;\n displayName: string;\n type: string;\n}\n"],"mappings":"AAAA,SAAoBA,iBAAiB,QAAgB,qBAAqB;AAI1E;AACA,OAAO,MAAMC,WAAW,GAAGD,iBAAiB,CAAe,aAAa,CAAC;;AAiBzE;AACA;;AA4EA,WAAYE,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA","ignoreList":[]}
@@ -15,6 +15,7 @@ export interface ICreateTenantErrors {
15
15
  export interface ICreateTenantUseCase {
16
16
  execute(data: CreateTenantInput): Promise<Result<Tenant, ICreateTenantErrors[keyof ICreateTenantErrors]>>;
17
17
  }
18
+ /** Create a new tenant. */
18
19
  export declare const CreateTenantUseCase: import("@webiny/di").Abstraction<ICreateTenantUseCase>;
19
20
  export declare namespace CreateTenantUseCase {
20
21
  type Interface = ICreateTenantUseCase;
@@ -26,6 +27,7 @@ export declare namespace CreateTenantUseCase {
26
27
  export interface ICreateTenantRepository {
27
28
  create(tenant: Tenant): Promise<Tenant>;
28
29
  }
30
+ /** Persist a newly created tenant. */
29
31
  export declare const CreateTenantRepository: import("@webiny/di").Abstraction<ICreateTenantRepository>;
30
32
  export declare namespace CreateTenantRepository {
31
33
  type Interface = ICreateTenantRepository;
@@ -36,18 +38,18 @@ export declare namespace CreateTenantRepository {
36
38
  export interface ICreateTenantGateway {
37
39
  createTenant(data: Tenant): Promise<Tenant>;
38
40
  }
41
+ /** Storage gateway for tenant creation. */
39
42
  export declare const CreateTenantGateway: import("@webiny/di").Abstraction<ICreateTenantGateway>;
40
43
  export declare namespace CreateTenantGateway {
41
44
  type Interface = ICreateTenantGateway;
42
45
  }
43
- /**
44
- * Event Handlers
45
- */
46
+ /** Hook into tenant lifecycle before a tenant is created. */
46
47
  export declare const TenantBeforeCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantBeforeCreatePayload>>>;
47
48
  export declare namespace TenantBeforeCreateEventHandler {
48
49
  type Interface = IEventHandler<DomainEvent<TenantBeforeCreatePayload>>;
49
50
  type Event = DomainEvent<TenantBeforeCreatePayload>;
50
51
  }
52
+ /** Hook into tenant lifecycle after a tenant is created. */
51
53
  export declare const TenantAfterCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantAfterCreatePayload>>>;
52
54
  export declare namespace TenantAfterCreateEventHandler {
53
55
  type Interface = IEventHandler<DomainEvent<TenantAfterCreatePayload>>;
@@ -8,23 +8,25 @@ import { createAbstraction } from "@webiny/feature/api";
8
8
  * Use Case
9
9
  */
10
10
 
11
+ /** Create a new tenant. */
11
12
  export const CreateTenantUseCase = createAbstraction("CreateTenantUseCase");
12
13
 
13
14
  /**
14
15
  * Repository
15
16
  */
16
17
 
18
+ /** Persist a newly created tenant. */
17
19
  export const CreateTenantRepository = createAbstraction("CreateTenantRepository");
18
20
 
19
21
  /**
20
22
  * Gateway
21
23
  */
22
24
 
25
+ /** Storage gateway for tenant creation. */
23
26
  export const CreateTenantGateway = createAbstraction("CreateTenantGateway");
24
- /**
25
- * Event Handlers
26
- */
27
+ /** Hook into tenant lifecycle before a tenant is created. */
27
28
  export const TenantBeforeCreateEventHandler = createAbstraction("TenantBeforeCreateEventHandler");
29
+ /** Hook into tenant lifecycle after a tenant is created. */
28
30
  export const TenantAfterCreateEventHandler = createAbstraction("TenantAfterCreateEventHandler");
29
31
 
30
32
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","CreateTenantUseCase","CreateTenantRepository","CreateTenantGateway","TenantBeforeCreateEventHandler","TenantAfterCreateEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant, CreateTenantInput } from \"~/types/tenancy.js\";\nimport type { TenantBeforeCreatePayload, TenantAfterCreatePayload } from \"./events.js\";\nimport { CreateTenantError } from \"./errors.js\";\n\n/**\n * Errors\n */\nexport interface ICreateTenantErrors {\n base: CreateTenantError;\n}\n\n/**\n * Use Case\n */\nexport interface ICreateTenantUseCase {\n execute(\n data: CreateTenantInput\n ): Promise<Result<Tenant, ICreateTenantErrors[keyof ICreateTenantErrors]>>;\n}\n\nexport const CreateTenantUseCase = createAbstraction<ICreateTenantUseCase>(\"CreateTenantUseCase\");\n\nexport namespace CreateTenantUseCase {\n export type Interface = ICreateTenantUseCase;\n export type Errors = ICreateTenantErrors[keyof ICreateTenantErrors];\n}\n\n/**\n * Repository\n */\nexport interface ICreateTenantRepository {\n create(tenant: Tenant): Promise<Tenant>;\n}\n\nexport const CreateTenantRepository =\n createAbstraction<ICreateTenantRepository>(\"CreateTenantRepository\");\n\nexport namespace CreateTenantRepository {\n export type Interface = ICreateTenantRepository;\n}\n\n/**\n * Gateway\n */\nexport interface ICreateTenantGateway {\n createTenant(data: Tenant): Promise<Tenant>;\n}\n\nexport const CreateTenantGateway = createAbstraction<ICreateTenantGateway>(\"CreateTenantGateway\");\n\nexport namespace CreateTenantGateway {\n export type Interface = ICreateTenantGateway;\n}\n\n/**\n * Event Handlers\n */\nexport const TenantBeforeCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantBeforeCreatePayload>>\n>(\"TenantBeforeCreateEventHandler\");\n\nexport namespace TenantBeforeCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantBeforeCreatePayload>>;\n export type Event = DomainEvent<TenantBeforeCreatePayload>;\n}\n\nexport const TenantAfterCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantAfterCreatePayload>>\n>(\"TenantAfterCreateEventHandler\");\n\nexport namespace TenantAfterCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantAfterCreatePayload>>;\n export type Event = DomainEvent<TenantAfterCreatePayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAM/D;AACA;AACA;;AAKA;AACA;AACA;;AAOA,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAAuB,qBAAqB,CAAC;;AAOjG;AACA;AACA;;AAKA,OAAO,MAAME,sBAAsB,GAC/BF,iBAAiB,CAA0B,wBAAwB,CAAC;;AAMxE;AACA;AACA;;AAKA,OAAO,MAAMG,mBAAmB,GAAGH,iBAAiB,CAAuB,qBAAqB,CAAC;AAMjG;AACA;AACA;AACA,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,gCAAgC,CAAC;AAOnC,OAAO,MAAMK,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","CreateTenantUseCase","CreateTenantRepository","CreateTenantGateway","TenantBeforeCreateEventHandler","TenantAfterCreateEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant, CreateTenantInput } from \"~/types/tenancy.js\";\nimport type { TenantBeforeCreatePayload, TenantAfterCreatePayload } from \"./events.js\";\nimport { CreateTenantError } from \"./errors.js\";\n\n/**\n * Errors\n */\nexport interface ICreateTenantErrors {\n base: CreateTenantError;\n}\n\n/**\n * Use Case\n */\nexport interface ICreateTenantUseCase {\n execute(\n data: CreateTenantInput\n ): Promise<Result<Tenant, ICreateTenantErrors[keyof ICreateTenantErrors]>>;\n}\n\n/** Create a new tenant. */\nexport const CreateTenantUseCase = createAbstraction<ICreateTenantUseCase>(\"CreateTenantUseCase\");\n\nexport namespace CreateTenantUseCase {\n export type Interface = ICreateTenantUseCase;\n export type Errors = ICreateTenantErrors[keyof ICreateTenantErrors];\n}\n\n/**\n * Repository\n */\nexport interface ICreateTenantRepository {\n create(tenant: Tenant): Promise<Tenant>;\n}\n\n/** Persist a newly created tenant. */\nexport const CreateTenantRepository =\n createAbstraction<ICreateTenantRepository>(\"CreateTenantRepository\");\n\nexport namespace CreateTenantRepository {\n export type Interface = ICreateTenantRepository;\n}\n\n/**\n * Gateway\n */\nexport interface ICreateTenantGateway {\n createTenant(data: Tenant): Promise<Tenant>;\n}\n\n/** Storage gateway for tenant creation. */\nexport const CreateTenantGateway = createAbstraction<ICreateTenantGateway>(\"CreateTenantGateway\");\n\nexport namespace CreateTenantGateway {\n export type Interface = ICreateTenantGateway;\n}\n\n/** Hook into tenant lifecycle before a tenant is created. */\nexport const TenantBeforeCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantBeforeCreatePayload>>\n>(\"TenantBeforeCreateEventHandler\");\n\nexport namespace TenantBeforeCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantBeforeCreatePayload>>;\n export type Event = DomainEvent<TenantBeforeCreatePayload>;\n}\n\n/** Hook into tenant lifecycle after a tenant is created. */\nexport const TenantAfterCreateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantAfterCreatePayload>>\n>(\"TenantAfterCreateEventHandler\");\n\nexport namespace TenantAfterCreateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantAfterCreatePayload>>;\n export type Event = DomainEvent<TenantAfterCreatePayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAM/D;AACA;AACA;;AAKA;AACA;AACA;;AAOA;AACA,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAAuB,qBAAqB,CAAC;;AAOjG;AACA;AACA;;AAKA;AACA,OAAO,MAAME,sBAAsB,GAC/BF,iBAAiB,CAA0B,wBAAwB,CAAC;;AAMxE;AACA;AACA;;AAKA;AACA,OAAO,MAAMG,mBAAmB,GAAGH,iBAAiB,CAAuB,qBAAqB,CAAC;AAMjG;AACA,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,gCAAgC,CAAC;AAOnC;AACA,OAAO,MAAMK,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC","ignoreList":[]}
@@ -3,6 +3,7 @@ import type { TenantBeforeDeletePayload, TenantAfterDeletePayload } from "./even
3
3
  export interface IDeleteTenantUseCase {
4
4
  execute(id: string): Promise<boolean>;
5
5
  }
6
+ /** Delete a tenant. */
6
7
  export declare const DeleteTenantUseCase: import("@webiny/di").Abstraction<IDeleteTenantUseCase>;
7
8
  export declare namespace DeleteTenantUseCase {
8
9
  type Interface = IDeleteTenantUseCase;
@@ -10,6 +11,7 @@ export declare namespace DeleteTenantUseCase {
10
11
  export interface IDeleteTenantRepository {
11
12
  delete(id: string): Promise<void>;
12
13
  }
14
+ /** Persist tenant deletion. */
13
15
  export declare const DeleteTenantRepository: import("@webiny/di").Abstraction<IDeleteTenantRepository>;
14
16
  export declare namespace DeleteTenantRepository {
15
17
  type Interface = IDeleteTenantRepository;
@@ -17,15 +19,18 @@ export declare namespace DeleteTenantRepository {
17
19
  export interface IDeleteTenantGateway {
18
20
  deleteTenant(id: string): Promise<void>;
19
21
  }
22
+ /** Storage gateway for tenant deletion. */
20
23
  export declare const DeleteTenantGateway: import("@webiny/di").Abstraction<IDeleteTenantGateway>;
21
24
  export declare namespace DeleteTenantGateway {
22
25
  type Interface = IDeleteTenantGateway;
23
26
  }
27
+ /** Hook into tenant lifecycle before a tenant is deleted. */
24
28
  export declare const TenantBeforeDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantBeforeDeletePayload>>>;
25
29
  export declare namespace TenantBeforeDeleteEventHandler {
26
30
  type Interface = IEventHandler<DomainEvent<TenantBeforeDeletePayload>>;
27
31
  type Event = DomainEvent<TenantBeforeDeletePayload>;
28
32
  }
33
+ /** Hook into tenant lifecycle after a tenant is deleted. */
29
34
  export declare const TenantAfterDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantAfterDeletePayload>>>;
30
35
  export declare namespace TenantAfterDeleteEventHandler {
31
36
  type Interface = IEventHandler<DomainEvent<TenantAfterDeletePayload>>;
@@ -1,8 +1,13 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
+ /** Delete a tenant. */
2
3
  export const DeleteTenantUseCase = createAbstraction("DeleteTenantUseCase");
4
+ /** Persist tenant deletion. */
3
5
  export const DeleteTenantRepository = createAbstraction("DeleteTenantRepository");
6
+ /** Storage gateway for tenant deletion. */
4
7
  export const DeleteTenantGateway = createAbstraction("DeleteTenantGateway");
8
+ /** Hook into tenant lifecycle before a tenant is deleted. */
5
9
  export const TenantBeforeDeleteEventHandler = createAbstraction("TenantBeforeDeleteEventHandler");
10
+ /** Hook into tenant lifecycle after a tenant is deleted. */
6
11
  export const TenantAfterDeleteEventHandler = createAbstraction("TenantAfterDeleteEventHandler");
7
12
 
8
13
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","DeleteTenantUseCase","DeleteTenantRepository","DeleteTenantGateway","TenantBeforeDeleteEventHandler","TenantAfterDeleteEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { TenantBeforeDeletePayload, TenantAfterDeletePayload } from \"./events.js\";\n\nexport interface IDeleteTenantUseCase {\n execute(id: string): Promise<boolean>;\n}\n\nexport const DeleteTenantUseCase = createAbstraction<IDeleteTenantUseCase>(\"DeleteTenantUseCase\");\n\nexport namespace DeleteTenantUseCase {\n export type Interface = IDeleteTenantUseCase;\n}\n\nexport interface IDeleteTenantRepository {\n delete(id: string): Promise<void>;\n}\n\nexport const DeleteTenantRepository =\n createAbstraction<IDeleteTenantRepository>(\"DeleteTenantRepository\");\n\nexport namespace DeleteTenantRepository {\n export type Interface = IDeleteTenantRepository;\n}\n\nexport interface IDeleteTenantGateway {\n deleteTenant(id: string): Promise<void>;\n}\n\nexport const DeleteTenantGateway = createAbstraction<IDeleteTenantGateway>(\"DeleteTenantGateway\");\n\nexport namespace DeleteTenantGateway {\n export type Interface = IDeleteTenantGateway;\n}\n\nexport const TenantBeforeDeleteEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantBeforeDeletePayload>>\n>(\"TenantBeforeDeleteEventHandler\");\n\nexport namespace TenantBeforeDeleteEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantBeforeDeletePayload>>;\n export type Event = DomainEvent<TenantBeforeDeletePayload>;\n}\n\nexport const TenantAfterDeleteEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantAfterDeletePayload>>\n>(\"TenantAfterDeleteEventHandler\");\n\nexport namespace TenantAfterDeleteEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantAfterDeletePayload>>;\n export type Event = DomainEvent<TenantAfterDeletePayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAQvD,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAAuB,qBAAqB,CAAC;AAUjG,OAAO,MAAME,sBAAsB,GAC/BF,iBAAiB,CAA0B,wBAAwB,CAAC;AAUxE,OAAO,MAAMG,mBAAmB,GAAGH,iBAAiB,CAAuB,qBAAqB,CAAC;AAMjG,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,gCAAgC,CAAC;AAOnC,OAAO,MAAMK,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","DeleteTenantUseCase","DeleteTenantRepository","DeleteTenantGateway","TenantBeforeDeleteEventHandler","TenantAfterDeleteEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { TenantBeforeDeletePayload, TenantAfterDeletePayload } from \"./events.js\";\n\nexport interface IDeleteTenantUseCase {\n execute(id: string): Promise<boolean>;\n}\n\n/** Delete a tenant. */\nexport const DeleteTenantUseCase = createAbstraction<IDeleteTenantUseCase>(\"DeleteTenantUseCase\");\n\nexport namespace DeleteTenantUseCase {\n export type Interface = IDeleteTenantUseCase;\n}\n\nexport interface IDeleteTenantRepository {\n delete(id: string): Promise<void>;\n}\n\n/** Persist tenant deletion. */\nexport const DeleteTenantRepository =\n createAbstraction<IDeleteTenantRepository>(\"DeleteTenantRepository\");\n\nexport namespace DeleteTenantRepository {\n export type Interface = IDeleteTenantRepository;\n}\n\nexport interface IDeleteTenantGateway {\n deleteTenant(id: string): Promise<void>;\n}\n\n/** Storage gateway for tenant deletion. */\nexport const DeleteTenantGateway = createAbstraction<IDeleteTenantGateway>(\"DeleteTenantGateway\");\n\nexport namespace DeleteTenantGateway {\n export type Interface = IDeleteTenantGateway;\n}\n\n/** Hook into tenant lifecycle before a tenant is deleted. */\nexport const TenantBeforeDeleteEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantBeforeDeletePayload>>\n>(\"TenantBeforeDeleteEventHandler\");\n\nexport namespace TenantBeforeDeleteEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantBeforeDeletePayload>>;\n export type Event = DomainEvent<TenantBeforeDeletePayload>;\n}\n\n/** Hook into tenant lifecycle after a tenant is deleted. */\nexport const TenantAfterDeleteEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantAfterDeletePayload>>\n>(\"TenantAfterDeleteEventHandler\");\n\nexport namespace TenantAfterDeleteEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantAfterDeletePayload>>;\n export type Event = DomainEvent<TenantAfterDeletePayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAQvD;AACA,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAAuB,qBAAqB,CAAC;AAUjG;AACA,OAAO,MAAME,sBAAsB,GAC/BF,iBAAiB,CAA0B,wBAAwB,CAAC;AAUxE;AACA,OAAO,MAAMG,mBAAmB,GAAGH,iBAAiB,CAAuB,qBAAqB,CAAC;AAMjG;AACA,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,gCAAgC,CAAC;AAOnC;AACA,OAAO,MAAMK,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC","ignoreList":[]}
@@ -9,6 +9,7 @@ export type GetTenantByIdError = {
9
9
  export interface IGetTenantByIdUseCase {
10
10
  execute(id: string): Promise<Result<Tenant, GetTenantByIdError>>;
11
11
  }
12
+ /** Retrieve a tenant by its ID. */
12
13
  export declare const GetTenantByIdUseCase: import("@webiny/di").Abstraction<IGetTenantByIdUseCase>;
13
14
  export declare namespace GetTenantByIdUseCase {
14
15
  type Interface = IGetTenantByIdUseCase;
@@ -18,6 +19,7 @@ export declare namespace GetTenantByIdUseCase {
18
19
  export interface IGetTenantByIdRepository {
19
20
  getById(id: string): Promise<Tenant | null>;
20
21
  }
22
+ /** Fetch a tenant by ID from storage. */
21
23
  export declare const GetTenantByIdRepository: import("@webiny/di").Abstraction<IGetTenantByIdRepository>;
22
24
  export declare namespace GetTenantByIdRepository {
23
25
  type Interface = IGetTenantByIdRepository;
@@ -25,6 +27,7 @@ export declare namespace GetTenantByIdRepository {
25
27
  export interface IGetTenantByIdGateway {
26
28
  getTenantById(id: string): Promise<Tenant | null>;
27
29
  }
30
+ /** Storage gateway for tenant retrieval by ID. */
28
31
  export declare const GetTenantByIdGateway: import("@webiny/di").Abstraction<IGetTenantByIdGateway>;
29
32
  export declare namespace GetTenantByIdGateway {
30
33
  type Interface = IGetTenantByIdGateway;
@@ -1,15 +1,9 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
-
3
- // Use Case Abstraction
4
-
2
+ /** Retrieve a tenant by its ID. */
5
3
  export const GetTenantByIdUseCase = createAbstraction("Tenancy/GetTenantByIdUseCase");
6
-
7
- // Repository Abstraction
8
-
4
+ /** Fetch a tenant by ID from storage. */
9
5
  export const GetTenantByIdRepository = createAbstraction("Tenancy/GetTenantByIdRepository");
10
-
11
- // Gateway Abstraction
12
-
6
+ /** Storage gateway for tenant retrieval by ID. */
13
7
  export const GetTenantByIdGateway = createAbstraction("Tenancy/GetTenantByIdGateway");
14
8
 
15
9
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","GetTenantByIdUseCase","GetTenantByIdRepository","GetTenantByIdGateway"],"sources":["abstractions.ts"],"sourcesContent":["import { type Result, createAbstraction } from \"@webiny/feature/api\";\nimport type { Tenant } from \"~/types/tenancy.js\";\n\nexport type GetTenantByIdError = { type: \"NOT_FOUND\" } | { type: \"UNKNOWN\"; cause: Error };\n\n// Use Case Abstraction\nexport interface IGetTenantByIdUseCase {\n execute(id: string): Promise<Result<Tenant, GetTenantByIdError>>;\n}\n\nexport const GetTenantByIdUseCase = createAbstraction<IGetTenantByIdUseCase>(\n \"Tenancy/GetTenantByIdUseCase\"\n);\n\nexport namespace GetTenantByIdUseCase {\n export type Interface = IGetTenantByIdUseCase;\n export type Error = GetTenantByIdError;\n export type Result = ReturnType<IGetTenantByIdUseCase[\"execute\"]>;\n}\n\n// Repository Abstraction\nexport interface IGetTenantByIdRepository {\n getById(id: string): Promise<Tenant | null>;\n}\n\nexport const GetTenantByIdRepository = createAbstraction<IGetTenantByIdRepository>(\n \"Tenancy/GetTenantByIdRepository\"\n);\n\nexport namespace GetTenantByIdRepository {\n export type Interface = IGetTenantByIdRepository;\n}\n\n// Gateway Abstraction\nexport interface IGetTenantByIdGateway {\n getTenantById(id: string): Promise<Tenant | null>;\n}\n\nexport const GetTenantByIdGateway = createAbstraction<IGetTenantByIdGateway>(\n \"Tenancy/GetTenantByIdGateway\"\n);\n\nexport namespace GetTenantByIdGateway {\n export type Interface = IGetTenantByIdGateway;\n}\n"],"mappings":"AAAA,SAAsBA,iBAAiB,QAAQ,qBAAqB;;AAKpE;;AAKA,OAAO,MAAMC,oBAAoB,GAAGD,iBAAiB,CACjD,8BACJ,CAAC;;AAQD;;AAKA,OAAO,MAAME,uBAAuB,GAAGF,iBAAiB,CACpD,iCACJ,CAAC;;AAMD;;AAKA,OAAO,MAAMG,oBAAoB,GAAGH,iBAAiB,CACjD,8BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","GetTenantByIdUseCase","GetTenantByIdRepository","GetTenantByIdGateway"],"sources":["abstractions.ts"],"sourcesContent":["import { type Result, createAbstraction } from \"@webiny/feature/api\";\nimport type { Tenant } from \"~/types/tenancy.js\";\n\nexport type GetTenantByIdError = { type: \"NOT_FOUND\" } | { type: \"UNKNOWN\"; cause: Error };\n\nexport interface IGetTenantByIdUseCase {\n execute(id: string): Promise<Result<Tenant, GetTenantByIdError>>;\n}\n\n/** Retrieve a tenant by its ID. */\nexport const GetTenantByIdUseCase = createAbstraction<IGetTenantByIdUseCase>(\n \"Tenancy/GetTenantByIdUseCase\"\n);\n\nexport namespace GetTenantByIdUseCase {\n export type Interface = IGetTenantByIdUseCase;\n export type Error = GetTenantByIdError;\n export type Result = ReturnType<IGetTenantByIdUseCase[\"execute\"]>;\n}\n\nexport interface IGetTenantByIdRepository {\n getById(id: string): Promise<Tenant | null>;\n}\n\n/** Fetch a tenant by ID from storage. */\nexport const GetTenantByIdRepository = createAbstraction<IGetTenantByIdRepository>(\n \"Tenancy/GetTenantByIdRepository\"\n);\n\nexport namespace GetTenantByIdRepository {\n export type Interface = IGetTenantByIdRepository;\n}\n\nexport interface IGetTenantByIdGateway {\n getTenantById(id: string): Promise<Tenant | null>;\n}\n\n/** Storage gateway for tenant retrieval by ID. */\nexport const GetTenantByIdGateway = createAbstraction<IGetTenantByIdGateway>(\n \"Tenancy/GetTenantByIdGateway\"\n);\n\nexport namespace GetTenantByIdGateway {\n export type Interface = IGetTenantByIdGateway;\n}\n"],"mappings":"AAAA,SAAsBA,iBAAiB,QAAQ,qBAAqB;AASpE;AACA,OAAO,MAAMC,oBAAoB,GAAGD,iBAAiB,CACjD,8BACJ,CAAC;AAYD;AACA,OAAO,MAAME,uBAAuB,GAAGF,iBAAiB,CACpD,iCACJ,CAAC;AAUD;AACA,OAAO,MAAMG,oBAAoB,GAAGH,iBAAiB,CACjD,8BACJ,CAAC","ignoreList":[]}
@@ -22,9 +22,6 @@ export interface TenantInstallationInput {
22
22
  tenant: Tenant;
23
23
  installationInput: AppInstallationData[];
24
24
  }
25
- /**
26
- * App Installer Abstraction
27
- */
28
25
  export interface IAppInstaller<TData = Record<string, any>> {
29
26
  readonly alwaysRun?: boolean;
30
27
  readonly appName: string;
@@ -40,25 +37,22 @@ export interface IAppInstaller<TData = Record<string, any>> {
40
37
  */
41
38
  uninstall(tenant: Tenant): Promise<void>;
42
39
  }
40
+ /** Install an application on a tenant with rollback support. */
43
41
  export declare const AppInstaller: import("@webiny/di").Abstraction<IAppInstaller<Record<string, any>>>;
44
42
  export declare namespace AppInstaller {
45
43
  type Interface<T = any> = IAppInstaller<T>;
46
44
  }
47
- /**
48
- * Use Case Abstraction
49
- */
50
45
  export interface IInstallTenantUseCase {
51
46
  execute(input: TenantInstallationInput): Promise<Result<void, IInstallTenantErrors[keyof IInstallTenantErrors]>>;
52
47
  }
48
+ /** Run all app installers for a tenant. */
53
49
  export declare const InstallTenantUseCase: import("@webiny/di").Abstraction<IInstallTenantUseCase>;
54
50
  export declare namespace InstallTenantUseCase {
55
51
  type Interface = IInstallTenantUseCase;
56
52
  type Input = TenantInstallationInput;
57
53
  type Errors = IInstallTenantErrors[keyof IInstallTenantErrors];
58
54
  }
59
- /**
60
- * Event Handler Abstraction
61
- */
55
+ /** Hook into tenant lifecycle after a tenant is installed. */
62
56
  export declare const TenantInstalledEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantInstalledPayload>>>;
63
57
  export declare namespace TenantInstalledEventHandler {
64
58
  type Interface = IEventHandler<DomainEvent<TenantInstalledPayload>>;
@@ -8,20 +8,11 @@ import { createAbstraction } from "@webiny/feature/api";
8
8
  * Types
9
9
  */
10
10
 
11
- /**
12
- * App Installer Abstraction
13
- */
14
-
11
+ /** Install an application on a tenant with rollback support. */
15
12
  export const AppInstaller = createAbstraction("AppInstaller");
16
-
17
- /**
18
- * Use Case Abstraction
19
- */
20
-
13
+ /** Run all app installers for a tenant. */
21
14
  export const InstallTenantUseCase = createAbstraction("InstallTenantUseCase");
22
- /**
23
- * Event Handler Abstraction
24
- */
15
+ /** Hook into tenant lifecycle after a tenant is installed. */
25
16
  export const TenantInstalledEventHandler = createAbstraction("TenantInstalledEventHandler");
26
17
 
27
18
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","AppInstaller","InstallTenantUseCase","TenantInstalledEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport type { TenantInstalledPayload } from \"./events.js\";\nimport { InstallTenantError, InstallationDependencyError } from \"./errors.js\";\n\nexport type { Tenant };\n\n/**\n * Errors\n */\nexport interface IInstallTenantErrors {\n base: InstallTenantError;\n dependency: InstallationDependencyError;\n}\n\n/**\n * Types\n */\nexport interface AppInstallationData {\n app: string;\n data: Record<string, any>;\n}\n\nexport interface TenantInstallationInput {\n tenant: Tenant;\n installationInput: AppInstallationData[];\n}\n\n/**\n * App Installer Abstraction\n */\nexport interface IAppInstaller<TData = Record<string, any>> {\n readonly alwaysRun?: boolean;\n readonly appName: string;\n readonly dependsOn: string[];\n\n /**\n * Perform the installation\n * If this succeeds, uninstall() MUST be able to revert it\n */\n install(tenant: Tenant, data: TData): Promise<void>;\n\n /**\n * Revert the installation\n * Called if any subsequent installer fails\n */\n uninstall(tenant: Tenant): Promise<void>;\n}\n\nexport const AppInstaller = createAbstraction<IAppInstaller>(\"AppInstaller\");\n\nexport namespace AppInstaller {\n export type Interface<T = any> = IAppInstaller<T>;\n}\n\n/**\n * Use Case Abstraction\n */\nexport interface IInstallTenantUseCase {\n execute(\n input: TenantInstallationInput\n ): Promise<Result<void, IInstallTenantErrors[keyof IInstallTenantErrors]>>;\n}\n\nexport const InstallTenantUseCase =\n createAbstraction<IInstallTenantUseCase>(\"InstallTenantUseCase\");\n\nexport namespace InstallTenantUseCase {\n export type Interface = IInstallTenantUseCase;\n export type Input = TenantInstallationInput;\n export type Errors = IInstallTenantErrors[keyof IInstallTenantErrors];\n}\n\n/**\n * Event Handler Abstraction\n */\nexport const TenantInstalledEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantInstalledPayload>>\n>(\"TenantInstalledEventHandler\");\n\nexport namespace TenantInstalledEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantInstalledPayload>>;\n export type Event = DomainEvent<TenantInstalledPayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAQ/D;AACA;AACA;;AAMA;AACA;AACA;;AAWA;AACA;AACA;;AAmBA,OAAO,MAAMC,YAAY,GAAGD,iBAAiB,CAAgB,cAAc,CAAC;;AAM5E;AACA;AACA;;AAOA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,sBAAsB,CAAC;AAQpE;AACA;AACA;AACA,OAAO,MAAMG,2BAA2B,GAAGH,iBAAiB,CAE1D,6BAA6B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","AppInstaller","InstallTenantUseCase","TenantInstalledEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport type { TenantInstalledPayload } from \"./events.js\";\nimport { InstallTenantError, InstallationDependencyError } from \"./errors.js\";\n\nexport type { Tenant };\n\n/**\n * Errors\n */\nexport interface IInstallTenantErrors {\n base: InstallTenantError;\n dependency: InstallationDependencyError;\n}\n\n/**\n * Types\n */\nexport interface AppInstallationData {\n app: string;\n data: Record<string, any>;\n}\n\nexport interface TenantInstallationInput {\n tenant: Tenant;\n installationInput: AppInstallationData[];\n}\n\nexport interface IAppInstaller<TData = Record<string, any>> {\n readonly alwaysRun?: boolean;\n readonly appName: string;\n readonly dependsOn: string[];\n\n /**\n * Perform the installation\n * If this succeeds, uninstall() MUST be able to revert it\n */\n install(tenant: Tenant, data: TData): Promise<void>;\n\n /**\n * Revert the installation\n * Called if any subsequent installer fails\n */\n uninstall(tenant: Tenant): Promise<void>;\n}\n\n/** Install an application on a tenant with rollback support. */\nexport const AppInstaller = createAbstraction<IAppInstaller>(\"AppInstaller\");\n\nexport namespace AppInstaller {\n export type Interface<T = any> = IAppInstaller<T>;\n}\n\nexport interface IInstallTenantUseCase {\n execute(\n input: TenantInstallationInput\n ): Promise<Result<void, IInstallTenantErrors[keyof IInstallTenantErrors]>>;\n}\n\n/** Run all app installers for a tenant. */\nexport const InstallTenantUseCase =\n createAbstraction<IInstallTenantUseCase>(\"InstallTenantUseCase\");\n\nexport namespace InstallTenantUseCase {\n export type Interface = IInstallTenantUseCase;\n export type Input = TenantInstallationInput;\n export type Errors = IInstallTenantErrors[keyof IInstallTenantErrors];\n}\n\n/** Hook into tenant lifecycle after a tenant is installed. */\nexport const TenantInstalledEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantInstalledPayload>>\n>(\"TenantInstalledEventHandler\");\n\nexport namespace TenantInstalledEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantInstalledPayload>>;\n export type Event = DomainEvent<TenantInstalledPayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAQ/D;AACA;AACA;;AAMA;AACA;AACA;;AA6BA;AACA,OAAO,MAAMC,YAAY,GAAGD,iBAAiB,CAAgB,cAAc,CAAC;AAY5E;AACA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,sBAAsB,CAAC;AAQpE;AACA,OAAO,MAAMG,2BAA2B,GAAGH,iBAAiB,CAE1D,6BAA6B,CAAC","ignoreList":[]}
@@ -6,6 +6,7 @@ export interface ITenantContext {
6
6
  withEachTenant<TReturn>(tenants: Tenant[], cb: (tenant: Tenant) => Promise<TReturn>): Promise<TReturn[]>;
7
7
  withTenant<TReturn>(tenant: Tenant, cb: (tenant: Tenant) => Promise<TReturn>): Promise<TReturn>;
8
8
  }
9
+ /** Provides access to the current tenant and tenant-scoped execution. */
9
10
  export declare const TenantContext: import("@webiny/di").Abstraction<ITenantContext>;
10
11
  export declare namespace TenantContext {
11
12
  type Interface = ITenantContext;
@@ -1,4 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
+ /** Provides access to the current tenant and tenant-scoped execution. */
2
3
  export const TenantContext = createAbstraction("TenantContext");
3
4
 
4
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","TenantContext"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Tenant } from \"~/types/tenancy.js\";\n\nexport interface ITenantContext {\n setTenant(tenant: Tenant): void;\n getTenant(): Tenant;\n withRootTenant<T>(cb: () => T): Promise<T>;\n withEachTenant<TReturn>(\n tenants: Tenant[],\n cb: (tenant: Tenant) => Promise<TReturn>\n ): Promise<TReturn[]>;\n withTenant<TReturn>(tenant: Tenant, cb: (tenant: Tenant) => Promise<TReturn>): Promise<TReturn>;\n}\n\nexport const TenantContext = createAbstraction<ITenantContext>(\"TenantContext\");\n\nexport namespace TenantContext {\n export type Interface = ITenantContext;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAcvD,OAAO,MAAMC,aAAa,GAAGD,iBAAiB,CAAiB,eAAe,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","TenantContext"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Tenant } from \"~/types/tenancy.js\";\n\nexport interface ITenantContext {\n setTenant(tenant: Tenant): void;\n getTenant(): Tenant;\n withRootTenant<T>(cb: () => T): Promise<T>;\n withEachTenant<TReturn>(\n tenants: Tenant[],\n cb: (tenant: Tenant) => Promise<TReturn>\n ): Promise<TReturn[]>;\n withTenant<TReturn>(tenant: Tenant, cb: (tenant: Tenant) => Promise<TReturn>): Promise<TReturn>;\n}\n\n/** Provides access to the current tenant and tenant-scoped execution. */\nexport const TenantContext = createAbstraction<ITenantContext>(\"TenantContext\");\n\nexport namespace TenantContext {\n export type Interface = ITenantContext;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAcvD;AACA,OAAO,MAAMC,aAAa,GAAGD,iBAAiB,CAAiB,eAAe,CAAC","ignoreList":[]}
@@ -11,6 +11,7 @@ export type UpdateTenantError = {
11
11
  export interface IUpdateTenantUseCase {
12
12
  execute(id: string, data: Partial<Tenant>): Promise<Result<Tenant, UpdateTenantError>>;
13
13
  }
14
+ /** Update an existing tenant. */
14
15
  export declare const UpdateTenantUseCase: import("@webiny/di").Abstraction<IUpdateTenantUseCase>;
15
16
  export declare namespace UpdateTenantUseCase {
16
17
  type Interface = IUpdateTenantUseCase;
@@ -18,6 +19,7 @@ export declare namespace UpdateTenantUseCase {
18
19
  export interface IUpdateTenantRepository {
19
20
  update(tenant: Tenant): Promise<Tenant>;
20
21
  }
22
+ /** Persist tenant updates. */
21
23
  export declare const UpdateTenantRepository: import("@webiny/di").Abstraction<IUpdateTenantRepository>;
22
24
  export declare namespace UpdateTenantRepository {
23
25
  type Interface = IUpdateTenantRepository;
@@ -25,15 +27,18 @@ export declare namespace UpdateTenantRepository {
25
27
  export interface IUpdateTenantGateway {
26
28
  updateTenant(data: Tenant): Promise<Tenant>;
27
29
  }
30
+ /** Storage gateway for tenant updates. */
28
31
  export declare const UpdateTenantGateway: import("@webiny/di").Abstraction<IUpdateTenantGateway>;
29
32
  export declare namespace UpdateTenantGateway {
30
33
  type Interface = IUpdateTenantGateway;
31
34
  }
35
+ /** Hook into tenant lifecycle before a tenant is updated. */
32
36
  export declare const TenantBeforeUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>>;
33
37
  export declare namespace TenantBeforeUpdateEventHandler {
34
38
  type Interface = IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>;
35
39
  type Event = DomainEvent<TenantBeforeUpdatePayload>;
36
40
  }
41
+ /** Hook into tenant lifecycle after a tenant is updated. */
37
42
  export declare const TenantAfterUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantAfterUpdatePayload>>>;
38
43
  export declare namespace TenantAfterUpdateEventHandler {
39
44
  type Interface = IEventHandler<DomainEvent<TenantAfterUpdatePayload>>;
@@ -1,8 +1,13 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
+ /** Update an existing tenant. */
2
3
  export const UpdateTenantUseCase = createAbstraction("UpdateTenantUseCase");
4
+ /** Persist tenant updates. */
3
5
  export const UpdateTenantRepository = createAbstraction("UpdateTenantRepository");
6
+ /** Storage gateway for tenant updates. */
4
7
  export const UpdateTenantGateway = createAbstraction("UpdateTenantGateway");
8
+ /** Hook into tenant lifecycle before a tenant is updated. */
5
9
  export const TenantBeforeUpdateEventHandler = createAbstraction("TenantBeforeUpdateEventHandler");
10
+ /** Hook into tenant lifecycle after a tenant is updated. */
6
11
  export const TenantAfterUpdateEventHandler = createAbstraction("TenantAfterUpdateEventHandler");
7
12
 
8
13
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","UpdateTenantUseCase","UpdateTenantRepository","UpdateTenantGateway","TenantBeforeUpdateEventHandler","TenantAfterUpdateEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport type { TenantBeforeUpdatePayload, TenantAfterUpdatePayload } from \"./events.js\";\n\nexport type UpdateTenantError = { type: \"NOT_FOUND\" } | { type: \"UNKNOWN\"; cause: Error };\n\nexport interface IUpdateTenantUseCase {\n execute(id: string, data: Partial<Tenant>): Promise<Result<Tenant, UpdateTenantError>>;\n}\n\nexport const UpdateTenantUseCase = createAbstraction<IUpdateTenantUseCase>(\"UpdateTenantUseCase\");\n\nexport namespace UpdateTenantUseCase {\n export type Interface = IUpdateTenantUseCase;\n}\n\nexport interface IUpdateTenantRepository {\n update(tenant: Tenant): Promise<Tenant>;\n}\n\nexport const UpdateTenantRepository =\n createAbstraction<IUpdateTenantRepository>(\"UpdateTenantRepository\");\n\nexport namespace UpdateTenantRepository {\n export type Interface = IUpdateTenantRepository;\n}\n\nexport interface IUpdateTenantGateway {\n updateTenant(data: Tenant): Promise<Tenant>;\n}\n\nexport const UpdateTenantGateway = createAbstraction<IUpdateTenantGateway>(\"UpdateTenantGateway\");\n\nexport namespace UpdateTenantGateway {\n export type Interface = IUpdateTenantGateway;\n}\n\nexport const TenantBeforeUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>\n>(\"TenantBeforeUpdateEventHandler\");\n\nexport namespace TenantBeforeUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>;\n export type Event = DomainEvent<TenantBeforeUpdatePayload>;\n}\n\nexport const TenantAfterUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantAfterUpdatePayload>>\n>(\"TenantAfterUpdateEventHandler\");\n\nexport namespace TenantAfterUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantAfterUpdatePayload>>;\n export type Event = DomainEvent<TenantAfterUpdatePayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;AAWpE,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAAuB,qBAAqB,CAAC;AAUjG,OAAO,MAAME,sBAAsB,GAC/BF,iBAAiB,CAA0B,wBAAwB,CAAC;AAUxE,OAAO,MAAMG,mBAAmB,GAAGH,iBAAiB,CAAuB,qBAAqB,CAAC;AAMjG,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,gCAAgC,CAAC;AAOnC,OAAO,MAAMK,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","UpdateTenantUseCase","UpdateTenantRepository","UpdateTenantGateway","TenantBeforeUpdateEventHandler","TenantAfterUpdateEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport type { TenantBeforeUpdatePayload, TenantAfterUpdatePayload } from \"./events.js\";\n\nexport type UpdateTenantError = { type: \"NOT_FOUND\" } | { type: \"UNKNOWN\"; cause: Error };\n\nexport interface IUpdateTenantUseCase {\n execute(id: string, data: Partial<Tenant>): Promise<Result<Tenant, UpdateTenantError>>;\n}\n\n/** Update an existing tenant. */\nexport const UpdateTenantUseCase = createAbstraction<IUpdateTenantUseCase>(\"UpdateTenantUseCase\");\n\nexport namespace UpdateTenantUseCase {\n export type Interface = IUpdateTenantUseCase;\n}\n\nexport interface IUpdateTenantRepository {\n update(tenant: Tenant): Promise<Tenant>;\n}\n\n/** Persist tenant updates. */\nexport const UpdateTenantRepository =\n createAbstraction<IUpdateTenantRepository>(\"UpdateTenantRepository\");\n\nexport namespace UpdateTenantRepository {\n export type Interface = IUpdateTenantRepository;\n}\n\nexport interface IUpdateTenantGateway {\n updateTenant(data: Tenant): Promise<Tenant>;\n}\n\n/** Storage gateway for tenant updates. */\nexport const UpdateTenantGateway = createAbstraction<IUpdateTenantGateway>(\"UpdateTenantGateway\");\n\nexport namespace UpdateTenantGateway {\n export type Interface = IUpdateTenantGateway;\n}\n\n/** Hook into tenant lifecycle before a tenant is updated. */\nexport const TenantBeforeUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>\n>(\"TenantBeforeUpdateEventHandler\");\n\nexport namespace TenantBeforeUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>;\n export type Event = DomainEvent<TenantBeforeUpdatePayload>;\n}\n\n/** Hook into tenant lifecycle after a tenant is updated. */\nexport const TenantAfterUpdateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantAfterUpdatePayload>>\n>(\"TenantAfterUpdateEventHandler\");\n\nexport namespace TenantAfterUpdateEventHandler {\n export type Interface = IEventHandler<DomainEvent<TenantAfterUpdatePayload>>;\n export type Event = DomainEvent<TenantAfterUpdatePayload>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;AAWpE;AACA,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAAuB,qBAAqB,CAAC;AAUjG;AACA,OAAO,MAAME,sBAAsB,GAC/BF,iBAAiB,CAA0B,wBAAwB,CAAC;AAUxE;AACA,OAAO,MAAMG,mBAAmB,GAAGH,iBAAiB,CAAuB,qBAAqB,CAAC;AAMjG;AACA,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,gCAAgC,CAAC;AAOnC;AACA,OAAO,MAAMK,6BAA6B,GAAGL,iBAAiB,CAE5D,+BAA+B,CAAC","ignoreList":[]}
@@ -26,7 +26,7 @@ class CreateUserUseCaseImpl {
26
26
  // 2. Validate input
27
27
  const validation = createUserValidation.safeParse(input);
28
28
  if (!validation.success) {
29
- return Result.fail(new UserValidationError(validation.error.errors[0].message));
29
+ return Result.fail(new UserValidationError(validation.error.issues[0].message));
30
30
  }
31
31
  const data = validation.data;
32
32
 
@@ -1 +1 @@
1
- {"version":3,"names":["mdbid","createImplementation","Result","TenantContext","IdentityContext","EventPublisher","CreateUserUseCase","UseCaseAbstraction","AdminUsersRepository","createUserValidation","NotAuthorizedError","EmailTakenError","UserValidationError","UserBeforeCreateEvent","UserAfterCreateEvent","CreateUserUseCaseImpl","constructor","tenantContext","identityContext","eventPublisher","repository","execute","input","permission","getPermission","fail","validation","safeParse","success","error","errors","message","data","existingUserResult","get","email","isOk","code","id","displayName","getDisplayName","tenant","getTenant","identity","getIdentity","createdBy","type","user","createdOn","Date","toISOString","publish","result","create","isFail","value","ok","firstName","lastName","trim","abstraction","implementation","dependencies"],"sources":["CreateUserUseCase.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { CreateUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\nimport { createUserValidation } from \"./schema.js\";\nimport {\n NotAuthorizedError,\n EmailTakenError,\n UserValidationError\n} from \"~/features/users/shared/errors.js\";\nimport { UserBeforeCreateEvent, UserAfterCreateEvent } from \"./events.js\";\nimport type { AdminUser } from \"~/features/users/shared/types.js\";\nimport type { CreateUserInput } from \"~/features/users/shared/types.js\";\nimport type { CreatedBy } from \"~/types/users.js\";\n\nclass CreateUserUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: AdminUsersRepository.Interface\n ) {}\n\n async execute(input: CreateUserInput): Promise<Result<AdminUser, UseCaseAbstraction.Error>> {\n // 1. Check permission\n const permission = await this.identityContext.getPermission(\"adminUsers.user\");\n if (!permission) {\n return Result.fail(new NotAuthorizedError());\n }\n\n // 2. Validate input\n const validation = createUserValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new UserValidationError(validation.error.errors[0].message));\n }\n\n const data = validation.data;\n\n // 3. Check email uniqueness\n const existingUserResult = await this.repository.get({ email: data.email });\n if (existingUserResult.isOk()) {\n // This means the email is taken!\n return Result.fail(new EmailTakenError(data.email));\n }\n\n if (existingUserResult.error.code !== \"AdminUser/NotFound\") {\n return Result.fail(existingUserResult.error);\n }\n\n // 4. Generate ID if not provided\n const id = data.id || mdbid();\n\n // 5. Generate display name\n const displayName = this.getDisplayName(data);\n\n // 6. Get tenant and identity\n const tenant = this.tenantContext.getTenant().id;\n const identity = this.identityContext.getIdentity();\n\n let createdBy: CreatedBy | null = null;\n if (identity) {\n createdBy = {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n };\n }\n\n // 7. Create user entity\n const user: AdminUser = {\n ...data,\n id,\n email: data.email,\n displayName,\n createdOn: new Date().toISOString(),\n createdBy,\n tenant\n };\n\n // 8. Publish before event\n await this.eventPublisher.publish(new UserBeforeCreateEvent({ user, input: data }));\n\n // 10. Create user via repository\n const result = await this.repository.create(user);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n // 11. Publish after event\n await this.eventPublisher.publish(\n new UserAfterCreateEvent({ user: result.value, input: data })\n );\n\n return Result.ok(result.value);\n }\n\n private getDisplayName(data: CreateUserInput): string {\n // If display name is not set, try to get it from the first name and last name.\n // If first name and last name are not set, use the e-mail address.\n if (data.displayName) {\n return data.displayName;\n }\n\n if (data.firstName || data.lastName) {\n return `${data.firstName || \"\"} ${data.lastName || \"\"}`.trim();\n }\n\n if (data.email) {\n return data.email;\n }\n\n return \"Missing display name\";\n }\n}\n\nexport const CreateUserUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateUserUseCaseImpl,\n dependencies: [TenantContext, IdentityContext, EventPublisher, AdminUsersRepository]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["mdbid","createImplementation","Result","TenantContext","IdentityContext","EventPublisher","CreateUserUseCase","UseCaseAbstraction","AdminUsersRepository","createUserValidation","NotAuthorizedError","EmailTakenError","UserValidationError","UserBeforeCreateEvent","UserAfterCreateEvent","CreateUserUseCaseImpl","constructor","tenantContext","identityContext","eventPublisher","repository","execute","input","permission","getPermission","fail","validation","safeParse","success","error","issues","message","data","existingUserResult","get","email","isOk","code","id","displayName","getDisplayName","tenant","getTenant","identity","getIdentity","createdBy","type","user","createdOn","Date","toISOString","publish","result","create","isFail","value","ok","firstName","lastName","trim","abstraction","implementation","dependencies"],"sources":["CreateUserUseCase.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { CreateUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\nimport { createUserValidation } from \"./schema.js\";\nimport {\n NotAuthorizedError,\n EmailTakenError,\n UserValidationError\n} from \"~/features/users/shared/errors.js\";\nimport { UserBeforeCreateEvent, UserAfterCreateEvent } from \"./events.js\";\nimport type { AdminUser } from \"~/features/users/shared/types.js\";\nimport type { CreateUserInput } from \"~/features/users/shared/types.js\";\nimport type { CreatedBy } from \"~/types/users.js\";\n\nclass CreateUserUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: AdminUsersRepository.Interface\n ) {}\n\n async execute(input: CreateUserInput): Promise<Result<AdminUser, UseCaseAbstraction.Error>> {\n // 1. Check permission\n const permission = await this.identityContext.getPermission(\"adminUsers.user\");\n if (!permission) {\n return Result.fail(new NotAuthorizedError());\n }\n\n // 2. Validate input\n const validation = createUserValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new UserValidationError(validation.error.issues[0].message));\n }\n\n const data = validation.data;\n\n // 3. Check email uniqueness\n const existingUserResult = await this.repository.get({ email: data.email });\n if (existingUserResult.isOk()) {\n // This means the email is taken!\n return Result.fail(new EmailTakenError(data.email));\n }\n\n if (existingUserResult.error.code !== \"AdminUser/NotFound\") {\n return Result.fail(existingUserResult.error);\n }\n\n // 4. Generate ID if not provided\n const id = data.id || mdbid();\n\n // 5. Generate display name\n const displayName = this.getDisplayName(data);\n\n // 6. Get tenant and identity\n const tenant = this.tenantContext.getTenant().id;\n const identity = this.identityContext.getIdentity();\n\n let createdBy: CreatedBy | null = null;\n if (identity) {\n createdBy = {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n };\n }\n\n // 7. Create user entity\n const user: AdminUser = {\n ...data,\n id,\n email: data.email,\n displayName,\n createdOn: new Date().toISOString(),\n createdBy,\n tenant\n };\n\n // 8. Publish before event\n await this.eventPublisher.publish(new UserBeforeCreateEvent({ user, input: data }));\n\n // 10. Create user via repository\n const result = await this.repository.create(user);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n // 11. Publish after event\n await this.eventPublisher.publish(\n new UserAfterCreateEvent({ user: result.value, input: data })\n );\n\n return Result.ok(result.value);\n }\n\n private getDisplayName(data: CreateUserInput): string {\n // If display name is not set, try to get it from the first name and last name.\n // If first name and last name are not set, use the e-mail address.\n if (data.displayName) {\n return data.displayName;\n }\n\n if (data.firstName || data.lastName) {\n return `${data.firstName || \"\"} ${data.lastName || \"\"}`.trim();\n }\n\n if (data.email) {\n return data.email;\n }\n\n return \"Missing display name\";\n }\n}\n\nexport const CreateUserUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateUserUseCaseImpl,\n dependencies: [TenantContext, IdentityContext, EventPublisher, AdminUsersRepository]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ type CreateUserError = ICreateUserErrors[keyof ICreateUserErrors] | AdminUsersRe
12
12
  export interface ICreateUser {
13
13
  execute(input: CreateUserInput): Promise<Result<AdminUser, CreateUserError>>;
14
14
  }
15
+ /** Create a new admin user. */
15
16
  export declare const CreateUserUseCase: import("@webiny/di").Abstraction<ICreateUser>;
16
17
  export declare namespace CreateUserUseCase {
17
18
  type Interface = ICreateUser;
@@ -6,7 +6,7 @@ import { createAbstraction } from "@webiny/feature/api";
6
6
 
7
7
  // Use case interface
8
8
 
9
- // Abstraction constant
9
+ /** Create a new admin user. */
10
10
  export const CreateUserUseCase = createAbstraction("CreateUserUseCase");
11
11
 
12
12
  // Namespace exports
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","CreateUserUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { AdminUser } from \"~/features/users/shared/types.js\";\nimport type { CreateUserInput } from \"~/features/users/shared/types.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\nimport {\n NotAuthorizedError,\n EmailTakenError,\n UserValidationError\n} from \"~/features/users/shared/errors.js\";\n\n// Use case specific errors\nexport interface ICreateUserErrors {\n notAuthorized: NotAuthorizedError;\n userExists: EmailTakenError;\n validation: UserValidationError;\n}\n\n// Combined error type (use case errors + repository errors)\ntype CreateUserError = ICreateUserErrors[keyof ICreateUserErrors] | AdminUsersRepository.Error;\n\n// Use case interface\nexport interface ICreateUser {\n execute(input: CreateUserInput): Promise<Result<AdminUser, CreateUserError>>;\n}\n\n// Abstraction constant\nexport const CreateUserUseCase = createAbstraction<ICreateUser>(\"CreateUserUseCase\");\n\n// Namespace exports\nexport namespace CreateUserUseCase {\n export type Interface = ICreateUser;\n export type Input = CreateUserInput;\n export type Error = CreateUserError;\n}\n\n// Event payload types\nexport interface UserBeforeCreatePayload {\n user: AdminUser;\n input: CreateUserInput;\n}\n\nexport interface UserAfterCreatePayload {\n user: AdminUser;\n input: CreateUserInput;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAWvD;;AAOA;;AAGA;;AAKA;AACA,OAAO,MAAMC,iBAAiB,GAAGD,iBAAiB,CAAc,mBAAmB,CAAC;;AAEpF;;AAOA","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","CreateUserUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { AdminUser } from \"~/features/users/shared/types.js\";\nimport type { CreateUserInput } from \"~/features/users/shared/types.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\nimport {\n NotAuthorizedError,\n EmailTakenError,\n UserValidationError\n} from \"~/features/users/shared/errors.js\";\n\n// Use case specific errors\nexport interface ICreateUserErrors {\n notAuthorized: NotAuthorizedError;\n userExists: EmailTakenError;\n validation: UserValidationError;\n}\n\n// Combined error type (use case errors + repository errors)\ntype CreateUserError = ICreateUserErrors[keyof ICreateUserErrors] | AdminUsersRepository.Error;\n\n// Use case interface\nexport interface ICreateUser {\n execute(input: CreateUserInput): Promise<Result<AdminUser, CreateUserError>>;\n}\n\n/** Create a new admin user. */\nexport const CreateUserUseCase = createAbstraction<ICreateUser>(\"CreateUserUseCase\");\n\n// Namespace exports\nexport namespace CreateUserUseCase {\n export type Interface = ICreateUser;\n export type Input = CreateUserInput;\n export type Error = CreateUserError;\n}\n\n// Event payload types\nexport interface UserBeforeCreatePayload {\n user: AdminUser;\n input: CreateUserInput;\n}\n\nexport interface UserAfterCreatePayload {\n user: AdminUser;\n input: CreateUserInput;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAWvD;;AAOA;;AAGA;;AAKA;AACA,OAAO,MAAMC,iBAAiB,GAAGD,iBAAiB,CAAc,mBAAmB,CAAC;;AAEpF;;AAOA","ignoreList":[]}
@@ -5,6 +5,7 @@ export declare class UserBeforeCreateEvent extends DomainEvent<UserBeforeCreateP
5
5
  eventType: "user.beforeCreate";
6
6
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserBeforeCreateEvent>>;
7
7
  }
8
+ /** Hook into user lifecycle before a user is created. */
8
9
  export declare const UserBeforeCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserBeforeCreateEvent>>;
9
10
  export declare namespace UserBeforeCreateEventHandler {
10
11
  type Interface = IEventHandler<UserBeforeCreateEvent>;
@@ -14,6 +15,7 @@ export declare class UserAfterCreateEvent extends DomainEvent<UserAfterCreatePay
14
15
  eventType: "user.afterCreate";
15
16
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserAfterCreateEvent>>;
16
17
  }
18
+ /** Hook into user lifecycle after a user is created. */
17
19
  export declare const UserAfterCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserAfterCreateEvent>>;
18
20
  export declare namespace UserAfterCreateEventHandler {
19
21
  type Interface = IEventHandler<UserAfterCreateEvent>;
@@ -7,6 +7,8 @@ export class UserBeforeCreateEvent extends DomainEvent {
7
7
  return UserBeforeCreateEventHandler;
8
8
  }
9
9
  }
10
+
11
+ /** Hook into user lifecycle before a user is created. */
10
12
  export const UserBeforeCreateEventHandler = createAbstraction("UserBeforeCreateEventHandler");
11
13
  // After Create Event
12
14
  export class UserAfterCreateEvent extends DomainEvent {
@@ -15,6 +17,8 @@ export class UserAfterCreateEvent extends DomainEvent {
15
17
  return UserAfterCreateEventHandler;
16
18
  }
17
19
  }
20
+
21
+ /** Hook into user lifecycle after a user is created. */
18
22
  export const UserAfterCreateEventHandler = createAbstraction("UserAfterCreateEventHandler");
19
23
 
20
24
  //# sourceMappingURL=events.js.map