@webiny/tenant-manager 0.0.0-unstable.3c5210ad37

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 (255) hide show
  1. package/LICENSE +36 -0
  2. package/README.md +11 -0
  3. package/TenantManager.d.ts +2 -0
  4. package/TenantManager.js +12 -0
  5. package/TenantManager.js.map +1 -0
  6. package/admin/CurrentTenant/CurrentTenant.d.ts +6 -0
  7. package/admin/CurrentTenant/CurrentTenant.js +34 -0
  8. package/admin/CurrentTenant/CurrentTenant.js.map +1 -0
  9. package/admin/CurrentTenant/CurrentTenantGateway.d.ts +12 -0
  10. package/admin/CurrentTenant/CurrentTenantGateway.js +44 -0
  11. package/admin/CurrentTenant/CurrentTenantGateway.js.map +1 -0
  12. package/admin/CurrentTenant/CurrentTenantPresenter.d.ts +12 -0
  13. package/admin/CurrentTenant/CurrentTenantPresenter.js +30 -0
  14. package/admin/CurrentTenant/CurrentTenantPresenter.js.map +1 -0
  15. package/admin/CurrentTenant/CurrentTenantRepository.d.ts +15 -0
  16. package/admin/CurrentTenant/CurrentTenantRepository.js +37 -0
  17. package/admin/CurrentTenant/CurrentTenantRepository.js.map +1 -0
  18. package/admin/CurrentTenant/abstractions.d.ts +31 -0
  19. package/admin/CurrentTenant/abstractions.js +15 -0
  20. package/admin/CurrentTenant/abstractions.js.map +1 -0
  21. package/admin/CurrentTenant/feature.d.ts +3 -0
  22. package/admin/CurrentTenant/feature.js +20 -0
  23. package/admin/CurrentTenant/feature.js.map +1 -0
  24. package/admin/CurrentTenant/useCurrentTenant.d.ts +4 -0
  25. package/admin/CurrentTenant/useCurrentTenant.js +23 -0
  26. package/admin/CurrentTenant/useCurrentTenant.js.map +1 -0
  27. package/admin/CurrentTenantProvider.d.ts +2 -0
  28. package/admin/CurrentTenantProvider.js +12 -0
  29. package/admin/CurrentTenantProvider.js.map +1 -0
  30. package/admin/DisableTenant/DisableTenantGateway.d.ts +11 -0
  31. package/admin/DisableTenant/DisableTenantGateway.js +43 -0
  32. package/admin/DisableTenant/DisableTenantGateway.js.map +1 -0
  33. package/admin/DisableTenant/DisableTenantRepository.d.ts +10 -0
  34. package/admin/DisableTenant/DisableTenantRepository.js +15 -0
  35. package/admin/DisableTenant/DisableTenantRepository.js.map +1 -0
  36. package/admin/DisableTenant/DisableTenantUseCase.d.ts +10 -0
  37. package/admin/DisableTenant/DisableTenantUseCase.js +15 -0
  38. package/admin/DisableTenant/DisableTenantUseCase.js.map +1 -0
  39. package/admin/DisableTenant/abstractions.d.ts +21 -0
  40. package/admin/DisableTenant/abstractions.js +15 -0
  41. package/admin/DisableTenant/abstractions.js.map +1 -0
  42. package/admin/DisableTenant/feature.d.ts +3 -0
  43. package/admin/DisableTenant/feature.js +20 -0
  44. package/admin/DisableTenant/feature.js.map +1 -0
  45. package/admin/DisableTenant/index.d.ts +2 -0
  46. package/admin/DisableTenant/index.js +4 -0
  47. package/admin/DisableTenant/index.js.map +1 -0
  48. package/admin/DisableTenant/useDisableTenant.d.ts +4 -0
  49. package/admin/DisableTenant/useDisableTenant.js +27 -0
  50. package/admin/DisableTenant/useDisableTenant.js.map +1 -0
  51. package/admin/EnableTenant/EnableTenantGateway.d.ts +11 -0
  52. package/admin/EnableTenant/EnableTenantGateway.js +43 -0
  53. package/admin/EnableTenant/EnableTenantGateway.js.map +1 -0
  54. package/admin/EnableTenant/EnableTenantRepository.d.ts +10 -0
  55. package/admin/EnableTenant/EnableTenantRepository.js +15 -0
  56. package/admin/EnableTenant/EnableTenantRepository.js.map +1 -0
  57. package/admin/EnableTenant/EnableTenantUseCase.d.ts +10 -0
  58. package/admin/EnableTenant/EnableTenantUseCase.js +15 -0
  59. package/admin/EnableTenant/EnableTenantUseCase.js.map +1 -0
  60. package/admin/EnableTenant/abstractions.d.ts +21 -0
  61. package/admin/EnableTenant/abstractions.js +15 -0
  62. package/admin/EnableTenant/abstractions.js.map +1 -0
  63. package/admin/EnableTenant/feature.d.ts +3 -0
  64. package/admin/EnableTenant/feature.js +20 -0
  65. package/admin/EnableTenant/feature.js.map +1 -0
  66. package/admin/EnableTenant/index.d.ts +2 -0
  67. package/admin/EnableTenant/index.js +4 -0
  68. package/admin/EnableTenant/index.js.map +1 -0
  69. package/admin/EnableTenant/useEnableTenant.d.ts +4 -0
  70. package/admin/EnableTenant/useEnableTenant.js +23 -0
  71. package/admin/EnableTenant/useEnableTenant.js.map +1 -0
  72. package/admin/Extension.d.ts +2 -0
  73. package/admin/Extension.js +47 -0
  74. package/admin/Extension.js.map +1 -0
  75. package/admin/IsRootTenant.d.ts +13 -0
  76. package/admin/IsRootTenant.js +37 -0
  77. package/admin/IsRootTenant.js.map +1 -0
  78. package/admin/SecurityPermission.d.ts +2 -0
  79. package/admin/SecurityPermission.js +20 -0
  80. package/admin/SecurityPermission.js.map +1 -0
  81. package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.d.ts +8 -0
  82. package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js +42 -0
  83. package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js.map +1 -0
  84. package/admin/TenantEntryList/EnableTenant/EnableTenant.d.ts +7 -0
  85. package/admin/TenantEntryList/EnableTenant/EnableTenant.js +19 -0
  86. package/admin/TenantEntryList/EnableTenant/EnableTenant.js.map +1 -0
  87. package/admin/TenantEntryList/EnableTenant/useEnableTenant.d.ts +5 -0
  88. package/admin/TenantEntryList/EnableTenant/useEnableTenant.js +39 -0
  89. package/admin/TenantEntryList/EnableTenant/useEnableTenant.js.map +1 -0
  90. package/admin/TenantEntryList/FolderNameCell.d.ts +7 -0
  91. package/admin/TenantEntryList/FolderNameCell.js +29 -0
  92. package/admin/TenantEntryList/FolderNameCell.js.map +1 -0
  93. package/admin/TenantEntryList/InstallTenantButton/InstallTenant.d.ts +7 -0
  94. package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js +19 -0
  95. package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js.map +1 -0
  96. package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.d.ts +16 -0
  97. package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js +17 -0
  98. package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js.map +1 -0
  99. package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.d.ts +5 -0
  100. package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js +46 -0
  101. package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js.map +1 -0
  102. package/admin/TenantEntryList/ManageTenant.d.ts +7 -0
  103. package/admin/TenantEntryList/ManageTenant.js +21 -0
  104. package/admin/TenantEntryList/ManageTenant.js.map +1 -0
  105. package/admin/TenantEntryList/TenantCell.d.ts +2 -0
  106. package/admin/TenantEntryList/TenantCell.js +39 -0
  107. package/admin/TenantEntryList/TenantCell.js.map +1 -0
  108. package/admin/TenantEntryList/TenantNameCell.d.ts +2 -0
  109. package/admin/TenantEntryList/TenantNameCell.js +54 -0
  110. package/admin/TenantEntryList/TenantNameCell.js.map +1 -0
  111. package/admin/TenantEntryList.d.ts +2 -0
  112. package/admin/TenantEntryList.js +71 -0
  113. package/admin/TenantEntryList.js.map +1 -0
  114. package/admin/TenantSelector.d.ts +2 -0
  115. package/admin/TenantSelector.js +39 -0
  116. package/admin/TenantSelector.js.map +1 -0
  117. package/admin/types.d.ts +7 -0
  118. package/admin/types.js +3 -0
  119. package/admin/types.js.map +1 -0
  120. package/api/Extension.d.ts +1 -0
  121. package/api/Extension.js +42 -0
  122. package/api/Extension.js.map +1 -0
  123. package/api/domain/TenantId.d.ts +3 -0
  124. package/api/domain/TenantId.js +12 -0
  125. package/api/domain/TenantId.js.map +1 -0
  126. package/api/domain/TenantModel.d.ts +11 -0
  127. package/api/domain/TenantModel.js +46 -0
  128. package/api/domain/TenantModel.js.map +1 -0
  129. package/api/domain/TenantModelExtension.d.ts +10 -0
  130. package/api/domain/TenantModelExtension.js +4 -0
  131. package/api/domain/TenantModelExtension.js.map +1 -0
  132. package/api/domain/errors.d.ts +33 -0
  133. package/api/domain/errors.js +63 -0
  134. package/api/domain/errors.js.map +1 -0
  135. package/api/features/AddCmsPermissions/AddCmsPermissions.d.ts +8 -0
  136. package/api/features/AddCmsPermissions/AddCmsPermissions.js +34 -0
  137. package/api/features/AddCmsPermissions/AddCmsPermissions.js.map +1 -0
  138. package/api/features/AddCmsPermissions/feature.d.ts +1 -0
  139. package/api/features/AddCmsPermissions/feature.js +10 -0
  140. package/api/features/AddCmsPermissions/feature.js.map +1 -0
  141. package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.d.ts +24 -0
  142. package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js +99 -0
  143. package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js.map +1 -0
  144. package/api/features/CreateAndInstallTenant/abstractions.d.ts +26 -0
  145. package/api/features/CreateAndInstallTenant/abstractions.js +9 -0
  146. package/api/features/CreateAndInstallTenant/abstractions.js.map +1 -0
  147. package/api/features/CreateAndInstallTenant/feature.d.ts +1 -0
  148. package/api/features/CreateAndInstallTenant/feature.js +11 -0
  149. package/api/features/CreateAndInstallTenant/feature.js.map +1 -0
  150. package/api/features/CreateTenant/CreateTenantRepository.d.ts +15 -0
  151. package/api/features/CreateTenant/CreateTenantRepository.js +48 -0
  152. package/api/features/CreateTenant/CreateTenantRepository.js.map +1 -0
  153. package/api/features/CreateTenant/CreateTenantUseCase.d.ts +14 -0
  154. package/api/features/CreateTenant/CreateTenantUseCase.js +43 -0
  155. package/api/features/CreateTenant/CreateTenantUseCase.js.map +1 -0
  156. package/api/features/CreateTenant/abstractions.d.ts +41 -0
  157. package/api/features/CreateTenant/abstractions.js +11 -0
  158. package/api/features/CreateTenant/abstractions.js.map +1 -0
  159. package/api/features/CreateTenant/feature.d.ts +1 -0
  160. package/api/features/CreateTenant/feature.js +15 -0
  161. package/api/features/CreateTenant/feature.js.map +1 -0
  162. package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.d.ts +11 -0
  163. package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js +37 -0
  164. package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js.map +1 -0
  165. package/api/features/DeleteTenantOnEntryDelete/feature.d.ts +1 -0
  166. package/api/features/DeleteTenantOnEntryDelete/feature.js +11 -0
  167. package/api/features/DeleteTenantOnEntryDelete/feature.js.map +1 -0
  168. package/api/features/DisableTenant/DisableTenantUseCase.d.ts +20 -0
  169. package/api/features/DisableTenant/DisableTenantUseCase.js +65 -0
  170. package/api/features/DisableTenant/DisableTenantUseCase.js.map +1 -0
  171. package/api/features/DisableTenant/abstractions.d.ts +19 -0
  172. package/api/features/DisableTenant/abstractions.js +4 -0
  173. package/api/features/DisableTenant/abstractions.js.map +1 -0
  174. package/api/features/DisableTenant/events.d.ts +27 -0
  175. package/api/features/DisableTenant/events.js +18 -0
  176. package/api/features/DisableTenant/events.js.map +1 -0
  177. package/api/features/DisableTenant/feature.d.ts +1 -0
  178. package/api/features/DisableTenant/feature.js +11 -0
  179. package/api/features/DisableTenant/feature.js.map +1 -0
  180. package/api/features/EnableTenant/EnableTenantUseCase.d.ts +20 -0
  181. package/api/features/EnableTenant/EnableTenantUseCase.js +67 -0
  182. package/api/features/EnableTenant/EnableTenantUseCase.js.map +1 -0
  183. package/api/features/EnableTenant/abstractions.d.ts +19 -0
  184. package/api/features/EnableTenant/abstractions.js +4 -0
  185. package/api/features/EnableTenant/abstractions.js.map +1 -0
  186. package/api/features/EnableTenant/events.d.ts +27 -0
  187. package/api/features/EnableTenant/events.js +18 -0
  188. package/api/features/EnableTenant/events.js.map +1 -0
  189. package/api/features/EnableTenant/feature.d.ts +1 -0
  190. package/api/features/EnableTenant/feature.js +11 -0
  191. package/api/features/EnableTenant/feature.js.map +1 -0
  192. package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.d.ts +17 -0
  193. package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js +35 -0
  194. package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js.map +1 -0
  195. package/api/features/GetCurrentTenant/abstractions.d.ts +24 -0
  196. package/api/features/GetCurrentTenant/abstractions.js +10 -0
  197. package/api/features/GetCurrentTenant/abstractions.js.map +1 -0
  198. package/api/features/GetCurrentTenant/feature.d.ts +1 -0
  199. package/api/features/GetCurrentTenant/feature.js +11 -0
  200. package/api/features/GetCurrentTenant/feature.js.map +1 -0
  201. package/api/features/GetTenantById/GetTenantByIdRepository.d.ts +17 -0
  202. package/api/features/GetTenantById/GetTenantByIdRepository.js +49 -0
  203. package/api/features/GetTenantById/GetTenantByIdRepository.js.map +1 -0
  204. package/api/features/GetTenantById/GetTenantByIdUseCase.d.ts +12 -0
  205. package/api/features/GetTenantById/GetTenantByIdUseCase.js +27 -0
  206. package/api/features/GetTenantById/GetTenantByIdUseCase.js.map +1 -0
  207. package/api/features/GetTenantById/abstractions.d.ts +38 -0
  208. package/api/features/GetTenantById/abstractions.js +15 -0
  209. package/api/features/GetTenantById/abstractions.js.map +1 -0
  210. package/api/features/GetTenantById/feature.d.ts +1 -0
  211. package/api/features/GetTenantById/feature.js +15 -0
  212. package/api/features/GetTenantById/feature.js.map +1 -0
  213. package/api/features/UpdateTenant/UpdateTenantRepository.d.ts +17 -0
  214. package/api/features/UpdateTenant/UpdateTenantRepository.js +58 -0
  215. package/api/features/UpdateTenant/UpdateTenantRepository.js.map +1 -0
  216. package/api/features/UpdateTenant/UpdateTenantUseCase.d.ts +12 -0
  217. package/api/features/UpdateTenant/UpdateTenantUseCase.js +21 -0
  218. package/api/features/UpdateTenant/UpdateTenantUseCase.js.map +1 -0
  219. package/api/features/UpdateTenant/abstractions.d.ts +39 -0
  220. package/api/features/UpdateTenant/abstractions.js +15 -0
  221. package/api/features/UpdateTenant/abstractions.js.map +1 -0
  222. package/api/features/UpdateTenant/feature.d.ts +1 -0
  223. package/api/features/UpdateTenant/feature.js +15 -0
  224. package/api/features/UpdateTenant/feature.js.map +1 -0
  225. package/api/graphql/CreateTenantSchema.d.ts +14 -0
  226. package/api/graphql/CreateTenantSchema.js +77 -0
  227. package/api/graphql/CreateTenantSchema.js.map +1 -0
  228. package/api/graphql/DisableTenantSchema.d.ts +8 -0
  229. package/api/graphql/DisableTenantSchema.js +35 -0
  230. package/api/graphql/DisableTenantSchema.js.map +1 -0
  231. package/api/graphql/EnableTenantSchema.d.ts +8 -0
  232. package/api/graphql/EnableTenantSchema.js +35 -0
  233. package/api/graphql/EnableTenantSchema.js.map +1 -0
  234. package/api/graphql/GetCurrentTenantSchema.d.ts +8 -0
  235. package/api/graphql/GetCurrentTenantSchema.js +53 -0
  236. package/api/graphql/GetCurrentTenantSchema.js.map +1 -0
  237. package/api/graphql/InstallTenantSchema.d.ts +8 -0
  238. package/api/graphql/InstallTenantSchema.js +50 -0
  239. package/api/graphql/InstallTenantSchema.js.map +1 -0
  240. package/exports/admin/tenancy.d.ts +7 -0
  241. package/exports/admin/tenancy.js +8 -0
  242. package/exports/admin/tenancy.js.map +1 -0
  243. package/exports/api/tenant-manager.d.ts +2 -0
  244. package/exports/api/tenant-manager.js +3 -0
  245. package/exports/api/tenant-manager.js.map +1 -0
  246. package/index.d.ts +1 -0
  247. package/index.js +3 -0
  248. package/index.js.map +1 -0
  249. package/package.json +44 -0
  250. package/shared/Tenant.d.ts +21 -0
  251. package/shared/Tenant.js +26 -0
  252. package/shared/Tenant.js.map +1 -0
  253. package/shared/constants.d.ts +1 -0
  254. package/shared/constants.js +3 -0
  255. package/shared/constants.js.map +1 -0
@@ -0,0 +1,43 @@
1
+ import { CreateTenantUseCase as UseCaseAbstraction, CreateTenantRepository } from "./abstractions.js";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
4
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
5
+ import { Tenant } from "../../../shared/Tenant.js";
6
+ import { TenantId } from "../../domain/TenantId.js";
7
+ class CreateTenantUseCase {
8
+ constructor(identityContext, repository) {
9
+ this.identityContext = identityContext;
10
+ this.repository = repository;
11
+ }
12
+ async execute(input) {
13
+ // Authorization checks
14
+ if (!this.identityContext.getPermission("tm.tenant")) {
15
+ return Result.fail(new NotAuthorizedError({
16
+ message: "Not authorized to create tenants!"
17
+ }));
18
+ }
19
+ const tenant = Tenant.from({
20
+ id: TenantId.from(input.id),
21
+ values: {
22
+ name: input.name,
23
+ description: input.description || "(no description)",
24
+ extensions: input.extensions ?? {},
25
+ status: "disabled",
26
+ isInstalled: false
27
+ }
28
+ });
29
+
30
+ // Create the tenant
31
+ const result = await this.repository.execute(tenant);
32
+ if (result.isFail()) {
33
+ return Result.fail(result.error);
34
+ }
35
+ return Result.ok(result.value);
36
+ }
37
+ }
38
+ export default UseCaseAbstraction.createImplementation({
39
+ implementation: CreateTenantUseCase,
40
+ dependencies: [IdentityContext, CreateTenantRepository]
41
+ });
42
+
43
+ //# sourceMappingURL=CreateTenantUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CreateTenantUseCase","UseCaseAbstraction","CreateTenantRepository","Result","IdentityContext","NotAuthorizedError","Tenant","TenantId","constructor","identityContext","repository","execute","input","getPermission","fail","message","tenant","from","id","values","name","description","extensions","status","isInstalled","result","isFail","error","ok","value","createImplementation","implementation","dependencies"],"sources":["CreateTenantUseCase.ts"],"sourcesContent":["import {\n CreateTenantUseCase as UseCaseAbstraction,\n ICreateTenantInput,\n CreateTenantRepository\n} from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { Tenant } from \"~/shared/Tenant.js\";\nimport { TenantId } from \"~/api/domain/TenantId.js\";\n\nclass CreateTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private repository: CreateTenantRepository.Interface\n ) {}\n\n async execute(input: ICreateTenantInput): Promise<Result<Tenant, UseCaseAbstraction.Error>> {\n // Authorization checks\n if (!this.identityContext.getPermission(\"tm.tenant\")) {\n return Result.fail(\n new NotAuthorizedError({\n message: \"Not authorized to create tenants!\"\n })\n );\n }\n\n const tenant = Tenant.from({\n id: TenantId.from(input.id),\n values: {\n name: input.name,\n description: input.description || \"(no description)\",\n extensions: input.extensions ?? {},\n status: \"disabled\",\n isInstalled: false\n }\n });\n\n // Create the tenant\n const result = await this.repository.execute(tenant);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok(result.value);\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: CreateTenantUseCase,\n dependencies: [IdentityContext, CreateTenantRepository]\n});\n"],"mappings":"AAAA,SACIA,mBAAmB,IAAIC,kBAAkB,EAEzCC,sBAAsB;AAE1B,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,eAAe,QAAQ,0CAA0C;AAC1E,SAASC,kBAAkB,QAAQ,qDAAqD;AACxF,SAASC,MAAM;AACf,SAASC,QAAQ;AAEjB,MAAMP,mBAAmB,CAAyC;EAC9DQ,WAAWA,CACCC,eAA0C,EAC1CC,UAA4C,EACtD;IAAA,KAFUD,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,UAA4C,GAA5CA,UAA4C;EACrD;EAEH,MAAMC,OAAOA,CAACC,KAAyB,EAAqD;IACxF;IACA,IAAI,CAAC,IAAI,CAACH,eAAe,CAACI,aAAa,CAAC,WAAW,CAAC,EAAE;MAClD,OAAOV,MAAM,CAACW,IAAI,CACd,IAAIT,kBAAkB,CAAC;QACnBU,OAAO,EAAE;MACb,CAAC,CACL,CAAC;IACL;IAEA,MAAMC,MAAM,GAAGV,MAAM,CAACW,IAAI,CAAC;MACvBC,EAAE,EAAEX,QAAQ,CAACU,IAAI,CAACL,KAAK,CAACM,EAAE,CAAC;MAC3BC,MAAM,EAAE;QACJC,IAAI,EAAER,KAAK,CAACQ,IAAI;QAChBC,WAAW,EAAET,KAAK,CAACS,WAAW,IAAI,kBAAkB;QACpDC,UAAU,EAAEV,KAAK,CAACU,UAAU,IAAI,CAAC,CAAC;QAClCC,MAAM,EAAE,UAAU;QAClBC,WAAW,EAAE;MACjB;IACJ,CAAC,CAAC;;IAEF;IACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACf,UAAU,CAACC,OAAO,CAACK,MAAM,CAAC;IACpD,IAAIS,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOvB,MAAM,CAACW,IAAI,CAACW,MAAM,CAACE,KAAK,CAAC;IACpC;IAEA,OAAOxB,MAAM,CAACyB,EAAE,CAACH,MAAM,CAACI,KAAK,CAAC;EAClC;AACJ;AAEA,eAAe5B,kBAAkB,CAAC6B,oBAAoB,CAAC;EACnDC,cAAc,EAAE/B,mBAAmB;EACnCgC,YAAY,EAAE,CAAC5B,eAAe,EAAEF,sBAAsB;AAC1D,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,41 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
3
+ import { TenantCreationError, TenantModelNotFoundError, type TenantPersistenceError } from "../../../api/domain/errors.js";
4
+ import type { Tenant, TenantExtensions } from "../../../shared/Tenant.js";
5
+ export interface ICreateTenantInput {
6
+ id?: string;
7
+ name: string;
8
+ description?: string;
9
+ extensions: TenantExtensions;
10
+ }
11
+ export interface ICreateTenantUseCaseErrors {
12
+ persistence: TenantPersistenceError;
13
+ modelNotFoundError: TenantModelNotFoundError;
14
+ notAuthorized: NotAuthorizedError;
15
+ tenantCreation: TenantCreationError;
16
+ }
17
+ export type ICreateTenantUseCaseError = ICreateTenantUseCaseErrors[keyof ICreateTenantUseCaseErrors];
18
+ export interface ICreateTenantUseCase {
19
+ execute(input: ICreateTenantInput): Promise<Result<Tenant, ICreateTenantUseCaseError>>;
20
+ }
21
+ export declare const CreateTenantUseCase: import("@webiny/di").Abstraction<ICreateTenantUseCase>;
22
+ export declare namespace CreateTenantUseCase {
23
+ type Interface = ICreateTenantUseCase;
24
+ type Input = ICreateTenantInput;
25
+ type Error = ICreateTenantUseCaseError;
26
+ }
27
+ export interface ICreateTenantRepositoryErrors {
28
+ persistence: TenantPersistenceError;
29
+ modelNotFoundError: TenantModelNotFoundError;
30
+ tenantCreation: TenantCreationError;
31
+ }
32
+ type IRepositoryError = ICreateTenantRepositoryErrors[keyof ICreateTenantRepositoryErrors];
33
+ export interface ICreateTenantRepository {
34
+ execute(tenant: Tenant): Promise<Result<Tenant, IRepositoryError>>;
35
+ }
36
+ export declare const CreateTenantRepository: import("@webiny/di").Abstraction<ICreateTenantRepository>;
37
+ export declare namespace CreateTenantRepository {
38
+ type Interface = ICreateTenantRepository;
39
+ type Error = IRepositoryError;
40
+ }
41
+ export {};
@@ -0,0 +1,11 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+
3
+ // USE CASE
4
+
5
+ export const CreateTenantUseCase = createAbstraction("TenantManager/CreateTenantUseCase");
6
+
7
+ // REPOSITORY
8
+
9
+ export const CreateTenantRepository = createAbstraction("TenantManager/CreateTenantRepository");
10
+
11
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","CreateTenantUseCase","CreateTenantRepository"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport {\n TenantCreationError,\n TenantModelNotFoundError,\n type TenantPersistenceError\n} from \"~/api/domain/errors.js\";\nimport type { Tenant, TenantExtensions } from \"~/shared/Tenant.js\";\n\n// USE CASE\n\nexport interface ICreateTenantInput {\n id?: string;\n name: string;\n description?: string;\n extensions: TenantExtensions;\n}\n\nexport interface ICreateTenantUseCaseErrors {\n persistence: TenantPersistenceError;\n modelNotFoundError: TenantModelNotFoundError;\n notAuthorized: NotAuthorizedError;\n tenantCreation: TenantCreationError;\n}\n\nexport type ICreateTenantUseCaseError =\n ICreateTenantUseCaseErrors[keyof ICreateTenantUseCaseErrors];\n\nexport interface ICreateTenantUseCase {\n execute(input: ICreateTenantInput): Promise<Result<Tenant, ICreateTenantUseCaseError>>;\n}\n\nexport const CreateTenantUseCase = createAbstraction<ICreateTenantUseCase>(\n \"TenantManager/CreateTenantUseCase\"\n);\n\nexport namespace CreateTenantUseCase {\n export type Interface = ICreateTenantUseCase;\n export type Input = ICreateTenantInput;\n export type Error = ICreateTenantUseCaseError;\n}\n\n// REPOSITORY\n\nexport interface ICreateTenantRepositoryErrors {\n persistence: TenantPersistenceError;\n modelNotFoundError: TenantModelNotFoundError;\n tenantCreation: TenantCreationError;\n}\n\ntype IRepositoryError = ICreateTenantRepositoryErrors[keyof ICreateTenantRepositoryErrors];\n\nexport interface ICreateTenantRepository {\n execute(tenant: Tenant): Promise<Result<Tenant, IRepositoryError>>;\n}\n\nexport const CreateTenantRepository = createAbstraction<ICreateTenantRepository>(\n \"TenantManager/CreateTenantRepository\"\n);\n\nexport namespace CreateTenantRepository {\n export type Interface = ICreateTenantRepository;\n export type Error = IRepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAUvD;;AAuBA,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAChD,mCACJ,CAAC;;AAQD;;AAcA,OAAO,MAAME,sBAAsB,GAAGF,iBAAiB,CACnD,sCACJ,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const CreateTenantFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,15 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import CreateTenantUseCase from "./CreateTenantUseCase.js";
3
+ import CreateTenantRepository from "./CreateTenantRepository.js";
4
+ export const CreateTenantFeature = createFeature({
5
+ name: "CreateTenant",
6
+ register(container) {
7
+ // Register use case (transient scope)
8
+ container.register(CreateTenantUseCase);
9
+
10
+ // Register repository (singleton scope)
11
+ container.register(CreateTenantRepository).inSingletonScope();
12
+ }
13
+ });
14
+
15
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","CreateTenantUseCase","CreateTenantRepository","CreateTenantFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport CreateTenantUseCase from \"./CreateTenantUseCase.js\";\nimport CreateTenantRepository from \"./CreateTenantRepository.js\";\n\nexport const CreateTenantFeature = createFeature({\n name: \"CreateTenant\",\n register(container) {\n // Register use case (transient scope)\n container.register(CreateTenantUseCase);\n\n // Register repository (singleton scope)\n container.register(CreateTenantRepository).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,OAAOC,mBAAmB;AAC1B,OAAOC,sBAAsB;AAE7B,OAAO,MAAMC,mBAAmB,GAAGH,aAAa,CAAC;EAC7CI,IAAI,EAAE,cAAc;EACpBC,QAAQA,CAACC,SAAS,EAAE;IAChB;IACAA,SAAS,CAACD,QAAQ,CAACJ,mBAAmB,CAAC;;IAEvC;IACAK,SAAS,CAACD,QAAQ,CAACH,sBAAsB,CAAC,CAACK,gBAAgB,CAAC,CAAC;EACjE;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events.js";
2
+ import { DeleteTenantUseCase } from "@webiny/api-core/features/tenancy/DeleteTenant";
3
+ declare class DeleteTenantOnEntryDeleteHandler implements EntryAfterDeleteEventHandler.Interface {
4
+ private deleteTenant;
5
+ constructor(deleteTenant: DeleteTenantUseCase.Interface);
6
+ handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
7
+ }
8
+ declare const _default: typeof DeleteTenantOnEntryDeleteHandler & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/EventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events.js").EntryAfterDeleteEvent>>;
10
+ };
11
+ export default _default;
@@ -0,0 +1,37 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events.js";
2
+ import { DeleteTenantUseCase } from "@webiny/api-core/features/tenancy/DeleteTenant";
3
+ import { TENANT_MODEL_ID } from "../../../shared/constants.js";
4
+ class DeleteTenantOnEntryDeleteHandler {
5
+ constructor(deleteTenant) {
6
+ this.deleteTenant = deleteTenant;
7
+ }
8
+ async handle(event) {
9
+ const {
10
+ entry,
11
+ model
12
+ } = event.payload;
13
+
14
+ // Only handle tenant model deletions
15
+ if (model.modelId !== TENANT_MODEL_ID) {
16
+ return;
17
+ }
18
+
19
+ // Only handle permanent deletions
20
+ if (!event.payload.permanent) {
21
+ return;
22
+ }
23
+ try {
24
+ // Delete the tenant from api-core
25
+ await this.deleteTenant.execute(entry.entryId);
26
+ } catch (error) {
27
+ // Log error but don't throw - we don't want to prevent CMS deletion
28
+ console.error(`Failed to delete tenant ${entry.entryId}!`, error);
29
+ }
30
+ }
31
+ }
32
+ export default EntryAfterDeleteEventHandler.createImplementation({
33
+ implementation: DeleteTenantOnEntryDeleteHandler,
34
+ dependencies: [DeleteTenantUseCase]
35
+ });
36
+
37
+ //# sourceMappingURL=DeleteTenantOnEntryDeleteHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EntryAfterDeleteEventHandler","DeleteTenantUseCase","TENANT_MODEL_ID","DeleteTenantOnEntryDeleteHandler","constructor","deleteTenant","handle","event","entry","model","payload","modelId","permanent","execute","entryId","error","console","createImplementation","implementation","dependencies"],"sources":["DeleteTenantOnEntryDeleteHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events.js\";\nimport { DeleteTenantUseCase } from \"@webiny/api-core/features/tenancy/DeleteTenant\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass DeleteTenantOnEntryDeleteHandler implements EntryAfterDeleteEventHandler.Interface {\n constructor(private deleteTenant: DeleteTenantUseCase.Interface) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Only handle tenant model deletions\n if (model.modelId !== TENANT_MODEL_ID) {\n return;\n }\n\n // Only handle permanent deletions\n if (!event.payload.permanent) {\n return;\n }\n\n try {\n // Delete the tenant from api-core\n await this.deleteTenant.execute(entry.entryId);\n } catch (error) {\n // Log error but don't throw - we don't want to prevent CMS deletion\n console.error(`Failed to delete tenant ${entry.entryId}!`, error);\n }\n }\n}\n\nexport default EntryAfterDeleteEventHandler.createImplementation({\n implementation: DeleteTenantOnEntryDeleteHandler,\n dependencies: [DeleteTenantUseCase]\n});\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,sEAAsE;AACnH,SAASC,mBAAmB,QAAQ,gDAAgD;AACpF,SAASC,eAAe;AAExB,MAAMC,gCAAgC,CAAmD;EACrFC,WAAWA,CAASC,YAA2C,EAAE;IAAA,KAA7CA,YAA2C,GAA3CA,YAA2C;EAAG;EAElE,MAAMC,MAAMA,CAACC,KAAyC,EAAiB;IACnE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,OAAO,KAAKT,eAAe,EAAE;MACnC;IACJ;;IAEA;IACA,IAAI,CAACK,KAAK,CAACG,OAAO,CAACE,SAAS,EAAE;MAC1B;IACJ;IAEA,IAAI;MACA;MACA,MAAM,IAAI,CAACP,YAAY,CAACQ,OAAO,CAACL,KAAK,CAACM,OAAO,CAAC;IAClD,CAAC,CAAC,OAAOC,KAAK,EAAE;MACZ;MACAC,OAAO,CAACD,KAAK,CAAC,2BAA2BP,KAAK,CAACM,OAAO,GAAG,EAAEC,KAAK,CAAC;IACrE;EACJ;AACJ;AAEA,eAAef,4BAA4B,CAACiB,oBAAoB,CAAC;EAC7DC,cAAc,EAAEf,gCAAgC;EAChDgB,YAAY,EAAE,CAAClB,mBAAmB;AACtC,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const DeleteTenantOnEntryDeleteFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import DeleteTenantOnEntryDeleteHandler from "./DeleteTenantOnEntryDeleteHandler.js";
3
+ export const DeleteTenantOnEntryDeleteFeature = createFeature({
4
+ name: "DeleteTenantOnEntryDelete",
5
+ register(container) {
6
+ // Register the event handler
7
+ container.register(DeleteTenantOnEntryDeleteHandler);
8
+ }
9
+ });
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","DeleteTenantOnEntryDeleteHandler","DeleteTenantOnEntryDeleteFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport DeleteTenantOnEntryDeleteHandler from \"./DeleteTenantOnEntryDeleteHandler.js\";\n\nexport const DeleteTenantOnEntryDeleteFeature = createFeature({\n name: \"DeleteTenantOnEntryDelete\",\n register(container) {\n // Register the event handler\n container.register(DeleteTenantOnEntryDeleteHandler);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,OAAOC,gCAAgC;AAEvC,OAAO,MAAMC,gCAAgC,GAAGF,aAAa,CAAC;EAC1DG,IAAI,EAAE,2BAA2B;EACjCC,QAAQA,CAACC,SAAS,EAAE;IAChB;IACAA,SAAS,CAACD,QAAQ,CAACH,gCAAgC,CAAC;EACxD;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ import { DisableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
4
+ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
5
+ import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
6
+ import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
7
+ import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
8
+ declare class DisableTenantUseCase implements UseCaseAbstraction.Interface {
9
+ private identityContext;
10
+ private eventPublisher;
11
+ private coreUpdateTenant;
12
+ private tmUpdateTenant;
13
+ private tmGetTenantById;
14
+ constructor(identityContext: IdentityContext.Interface, eventPublisher: EventPublisher.Interface, coreUpdateTenant: ApiCoreUpdateTenant.Interface, tmUpdateTenant: TenantManagerUpdateTenant.Interface, tmGetTenantById: GetTenantByIdUseCase.Interface);
15
+ execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>>;
16
+ }
17
+ declare const _default: typeof DisableTenantUseCase & {
18
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IDisableTenantUseCase>;
19
+ };
20
+ export default _default;
@@ -0,0 +1,65 @@
1
+ import { DisableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
4
+ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
5
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
6
+ import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
7
+ import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
8
+ import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
9
+ import { TenantBeforeDisableEvent, TenantAfterDisableEvent } from "./events.js";
10
+ import { TenantPersistenceError } from "../../domain/errors.js";
11
+ class DisableTenantUseCase {
12
+ constructor(identityContext, eventPublisher, coreUpdateTenant, tmUpdateTenant, tmGetTenantById) {
13
+ this.identityContext = identityContext;
14
+ this.eventPublisher = eventPublisher;
15
+ this.coreUpdateTenant = coreUpdateTenant;
16
+ this.tmUpdateTenant = tmUpdateTenant;
17
+ this.tmGetTenantById = tmGetTenantById;
18
+ }
19
+ async execute(tenantId) {
20
+ // Authorization checks
21
+ if (!this.identityContext.getPermission("tm.tenant")) {
22
+ return Result.fail(new NotAuthorizedError());
23
+ }
24
+
25
+ // Get current tenant to verify it exists
26
+ const getTenantResult = await this.tmGetTenantById.execute(tenantId);
27
+ if (getTenantResult.isFail()) {
28
+ return Result.fail(getTenantResult.error);
29
+ }
30
+ const tenant = getTenantResult.value;
31
+
32
+ // Publish before event
33
+ await this.eventPublisher.publish(new TenantBeforeDisableEvent({
34
+ tenant
35
+ }));
36
+
37
+ // Update api-core tenant first
38
+ const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {
39
+ status: "disabled"
40
+ });
41
+ if (apiCoreResult.isFail()) {
42
+ return Result.fail(new TenantPersistenceError(new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)));
43
+ }
44
+
45
+ // Update tenant-manager CMS entry
46
+ const updateResult = await this.tmUpdateTenant.execute(tenantId, {
47
+ status: "disabled"
48
+ });
49
+ if (updateResult.isFail()) {
50
+ return Result.fail(updateResult.error);
51
+ }
52
+
53
+ // Publish after event
54
+ await this.eventPublisher.publish(new TenantAfterDisableEvent({
55
+ tenant: updateResult.value
56
+ }));
57
+ return Result.ok();
58
+ }
59
+ }
60
+ export default UseCaseAbstraction.createImplementation({
61
+ implementation: DisableTenantUseCase,
62
+ dependencies: [IdentityContext, EventPublisher, ApiCoreUpdateTenant, TenantManagerUpdateTenant, GetTenantByIdUseCase]
63
+ });
64
+
65
+ //# sourceMappingURL=DisableTenantUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DisableTenantUseCase","UseCaseAbstraction","Result","IdentityContext","EventPublisher","NotAuthorizedError","UpdateTenantUseCase","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase","TenantBeforeDisableEvent","TenantAfterDisableEvent","TenantPersistenceError","constructor","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","execute","tenantId","getPermission","fail","getTenantResult","isFail","error","tenant","value","publish","apiCoreResult","status","Error","updateResult","ok","createImplementation","implementation","dependencies"],"sources":["DisableTenantUseCase.ts"],"sourcesContent":["import { DisableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/EventPublisher\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { UpdateTenantUseCase as ApiCoreUpdateTenant } from \"@webiny/api-core/features/tenancy/UpdateTenant\";\nimport { UpdateTenantUseCase as TenantManagerUpdateTenant } from \"../UpdateTenant/abstractions.js\";\nimport { GetTenantByIdUseCase } from \"../GetTenantById/abstractions.js\";\nimport { TenantBeforeDisableEvent, TenantAfterDisableEvent } from \"./events.js\";\nimport { TenantPersistenceError } from \"../../domain/errors.js\";\n\nclass DisableTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private coreUpdateTenant: ApiCoreUpdateTenant.Interface,\n private tmUpdateTenant: TenantManagerUpdateTenant.Interface,\n private tmGetTenantById: GetTenantByIdUseCase.Interface\n ) {}\n\n async execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Authorization checks\n if (!this.identityContext.getPermission(\"tm.tenant\")) {\n return Result.fail(new NotAuthorizedError());\n }\n\n // Get current tenant to verify it exists\n const getTenantResult = await this.tmGetTenantById.execute(tenantId);\n if (getTenantResult.isFail()) {\n return Result.fail(getTenantResult.error);\n }\n\n const tenant = getTenantResult.value;\n\n // Publish before event\n await this.eventPublisher.publish(new TenantBeforeDisableEvent({ tenant }));\n\n // Update api-core tenant first\n const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {\n status: \"disabled\"\n });\n if (apiCoreResult.isFail()) {\n return Result.fail(\n new TenantPersistenceError(\n new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)\n )\n );\n }\n\n // Update tenant-manager CMS entry\n const updateResult = await this.tmUpdateTenant.execute(tenantId, {\n status: \"disabled\"\n });\n\n if (updateResult.isFail()) {\n return Result.fail(updateResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new TenantAfterDisableEvent({ tenant: updateResult.value })\n );\n\n return Result.ok();\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: DisableTenantUseCase,\n dependencies: [\n IdentityContext,\n EventPublisher,\n ApiCoreUpdateTenant,\n TenantManagerUpdateTenant,\n GetTenantByIdUseCase\n ]\n});\n"],"mappings":"AAAA,SAASA,oBAAoB,IAAIC,kBAAkB;AACnD,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,eAAe,QAAQ,0CAA0C;AAC1E,SAASC,cAAc,QAAQ,0CAA0C;AACzE,SAASC,kBAAkB,QAAQ,qDAAqD;AACxF,SAASC,mBAAmB,IAAIC,mBAAmB,QAAQ,gDAAgD;AAC3G,SAASD,mBAAmB,IAAIE,yBAAyB;AACzD,SAASC,oBAAoB;AAC7B,SAASC,wBAAwB,EAAEC,uBAAuB;AAC1D,SAASC,sBAAsB;AAE/B,MAAMZ,oBAAoB,CAAyC;EAC/Da,WAAWA,CACCC,eAA0C,EAC1CC,cAAwC,EACxCC,gBAA+C,EAC/CC,cAAmD,EACnDC,eAA+C,EACzD;IAAA,KALUJ,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,gBAA+C,GAA/CA,gBAA+C;IAAA,KAC/CC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,eAA+C,GAA/CA,eAA+C;EACxD;EAEH,MAAMC,OAAOA,CAACC,QAAgB,EAAmD;IAC7E;IACA,IAAI,CAAC,IAAI,CAACN,eAAe,CAACO,aAAa,CAAC,WAAW,CAAC,EAAE;MAClD,OAAOnB,MAAM,CAACoB,IAAI,CAAC,IAAIjB,kBAAkB,CAAC,CAAC,CAAC;IAChD;;IAEA;IACA,MAAMkB,eAAe,GAAG,MAAM,IAAI,CAACL,eAAe,CAACC,OAAO,CAACC,QAAQ,CAAC;IACpE,IAAIG,eAAe,CAACC,MAAM,CAAC,CAAC,EAAE;MAC1B,OAAOtB,MAAM,CAACoB,IAAI,CAACC,eAAe,CAACE,KAAK,CAAC;IAC7C;IAEA,MAAMC,MAAM,GAAGH,eAAe,CAACI,KAAK;;IAEpC;IACA,MAAM,IAAI,CAACZ,cAAc,CAACa,OAAO,CAAC,IAAIlB,wBAAwB,CAAC;MAAEgB;IAAO,CAAC,CAAC,CAAC;;IAE3E;IACA,MAAMG,aAAa,GAAG,MAAM,IAAI,CAACb,gBAAgB,CAACG,OAAO,CAACC,QAAQ,EAAE;MAChEU,MAAM,EAAE;IACZ,CAAC,CAAC;IACF,IAAID,aAAa,CAACL,MAAM,CAAC,CAAC,EAAE;MACxB,OAAOtB,MAAM,CAACoB,IAAI,CACd,IAAIV,sBAAsB,CACtB,IAAImB,KAAK,CAAC,qCAAqCF,aAAa,CAACJ,KAAK,EAAE,CACxE,CACJ,CAAC;IACL;;IAEA;IACA,MAAMO,YAAY,GAAG,MAAM,IAAI,CAACf,cAAc,CAACE,OAAO,CAACC,QAAQ,EAAE;MAC7DU,MAAM,EAAE;IACZ,CAAC,CAAC;IAEF,IAAIE,YAAY,CAACR,MAAM,CAAC,CAAC,EAAE;MACvB,OAAOtB,MAAM,CAACoB,IAAI,CAACU,YAAY,CAACP,KAAK,CAAC;IAC1C;;IAEA;IACA,MAAM,IAAI,CAACV,cAAc,CAACa,OAAO,CAC7B,IAAIjB,uBAAuB,CAAC;MAAEe,MAAM,EAAEM,YAAY,CAACL;IAAM,CAAC,CAC9D,CAAC;IAED,OAAOzB,MAAM,CAAC+B,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,eAAehC,kBAAkB,CAACiC,oBAAoB,CAAC;EACnDC,cAAc,EAAEnC,oBAAoB;EACpCoC,YAAY,EAAE,CACVjC,eAAe,EACfC,cAAc,EACdG,mBAAmB,EACnBC,yBAAyB,EACzBC,oBAAoB;AAE5B,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
3
+ import { TenantModelNotFoundError, TenantNotFoundError, TenantPersistenceError } from "../../domain/errors.js";
4
+ export interface IDisableTenantUseCase {
5
+ execute(tenantId: string): Promise<Result<void, DisableTenantUseCase.Error>>;
6
+ }
7
+ export interface IDisableTenantUseCaseErrors {
8
+ notAuthorized: NotAuthorizedError;
9
+ notFound: TenantNotFoundError;
10
+ persistence: TenantPersistenceError;
11
+ modelNotFound: TenantModelNotFoundError;
12
+ }
13
+ type UseCaseError = IDisableTenantUseCaseErrors[keyof IDisableTenantUseCaseErrors];
14
+ export declare const DisableTenantUseCase: import("@webiny/di").Abstraction<IDisableTenantUseCase>;
15
+ export declare namespace DisableTenantUseCase {
16
+ type Interface = IDisableTenantUseCase;
17
+ type Error = UseCaseError;
18
+ }
19
+ export {};
@@ -0,0 +1,4 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ export const DisableTenantUseCase = createAbstraction("TenantManager/DisableTenantUseCase");
3
+
4
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","DisableTenantUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport {\n TenantModelNotFoundError,\n TenantNotFoundError,\n TenantPersistenceError\n} from \"../../domain/errors.js\";\n\nexport interface IDisableTenantUseCase {\n execute(tenantId: string): Promise<Result<void, DisableTenantUseCase.Error>>;\n}\n\nexport interface IDisableTenantUseCaseErrors {\n notAuthorized: NotAuthorizedError;\n notFound: TenantNotFoundError;\n persistence: TenantPersistenceError;\n modelNotFound: TenantModelNotFoundError;\n}\n\ntype UseCaseError = IDisableTenantUseCaseErrors[keyof IDisableTenantUseCaseErrors];\n\nexport const DisableTenantUseCase = createAbstraction<IDisableTenantUseCase>(\n \"TenantManager/DisableTenantUseCase\"\n);\n\nexport namespace DisableTenantUseCase {\n export type Interface = IDisableTenantUseCase;\n export type Error = UseCaseError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAsBvD,OAAO,MAAMC,oBAAoB,GAAGD,iBAAiB,CACjD,oCACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
+ import type { IEventHandler } from "@webiny/api-core/features/EventPublisher";
3
+ import type { Tenant } from "../../../shared/Tenant.js";
4
+ export interface TenantBeforeDisablePayload {
5
+ tenant: Tenant;
6
+ }
7
+ export interface TenantAfterDisablePayload {
8
+ tenant: Tenant;
9
+ }
10
+ export declare class TenantBeforeDisableEvent extends DomainEvent<TenantBeforeDisablePayload> {
11
+ eventType: "tenant.beforeDisable";
12
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TenantBeforeDisableEvent>>;
13
+ }
14
+ export declare const TenantBeforeDisableEventHandler: import("@webiny/di").Abstraction<IEventHandler<TenantBeforeDisableEvent>>;
15
+ export declare namespace TenantBeforeDisableEventHandler {
16
+ type Interface = IEventHandler<TenantBeforeDisableEvent>;
17
+ type Event = TenantBeforeDisableEvent;
18
+ }
19
+ export declare class TenantAfterDisableEvent extends DomainEvent<TenantAfterDisablePayload> {
20
+ eventType: "tenant.afterDisable";
21
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TenantAfterDisableEvent>>;
22
+ }
23
+ export declare const TenantAfterDisableEventHandler: import("@webiny/di").Abstraction<IEventHandler<TenantAfterDisableEvent>>;
24
+ export declare namespace TenantAfterDisableEventHandler {
25
+ type Interface = IEventHandler<TenantAfterDisableEvent>;
26
+ type Event = TenantAfterDisableEvent;
27
+ }
@@ -0,0 +1,18 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
3
+ export class TenantBeforeDisableEvent extends DomainEvent {
4
+ eventType = "tenant.beforeDisable";
5
+ getHandlerAbstraction() {
6
+ return TenantBeforeDisableEventHandler;
7
+ }
8
+ }
9
+ export const TenantBeforeDisableEventHandler = createAbstraction("TenantManager/TenantBeforeDisableEventHandler");
10
+ export class TenantAfterDisableEvent extends DomainEvent {
11
+ eventType = "tenant.afterDisable";
12
+ getHandlerAbstraction() {
13
+ return TenantAfterDisableEventHandler;
14
+ }
15
+ }
16
+ export const TenantAfterDisableEventHandler = createAbstraction("TenantManager/TenantAfterDisableEventHandler");
17
+
18
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","DomainEvent","TenantBeforeDisableEvent","eventType","getHandlerAbstraction","TenantBeforeDisableEventHandler","TenantAfterDisableEvent","TenantAfterDisableEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { Tenant } from \"~/shared/Tenant.js\";\n\nexport interface TenantBeforeDisablePayload {\n tenant: Tenant;\n}\n\nexport interface TenantAfterDisablePayload {\n tenant: Tenant;\n}\n\nexport class TenantBeforeDisableEvent extends DomainEvent<TenantBeforeDisablePayload> {\n eventType = \"tenant.beforeDisable\" as const;\n\n getHandlerAbstraction() {\n return TenantBeforeDisableEventHandler;\n }\n}\n\nexport const TenantBeforeDisableEventHandler = createAbstraction<\n IEventHandler<TenantBeforeDisableEvent>\n>(\"TenantManager/TenantBeforeDisableEventHandler\");\n\nexport namespace TenantBeforeDisableEventHandler {\n export type Interface = IEventHandler<TenantBeforeDisableEvent>;\n export type Event = TenantBeforeDisableEvent;\n}\n\nexport class TenantAfterDisableEvent extends DomainEvent<TenantAfterDisablePayload> {\n eventType = \"tenant.afterDisable\" as const;\n\n getHandlerAbstraction() {\n return TenantAfterDisableEventHandler;\n }\n}\n\nexport const TenantAfterDisableEventHandler = createAbstraction<\n IEventHandler<TenantAfterDisableEvent>\n>(\"TenantManager/TenantAfterDisableEventHandler\");\n\nexport namespace TenantAfterDisableEventHandler {\n export type Interface = IEventHandler<TenantAfterDisableEvent>;\n export type Event = TenantAfterDisableEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW,QAAQ,0CAA0C;AAYtE,OAAO,MAAMC,wBAAwB,SAASD,WAAW,CAA6B;EAClFE,SAAS,GAAG,sBAAsB;EAElCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,+BAA+B;EAC1C;AACJ;AAEA,OAAO,MAAMA,+BAA+B,GAAGL,iBAAiB,CAE9D,+CAA+C,CAAC;AAOlD,OAAO,MAAMM,uBAAuB,SAASL,WAAW,CAA4B;EAChFE,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,8BAA8B;EACzC;AACJ;AAEA,OAAO,MAAMA,8BAA8B,GAAGP,iBAAiB,CAE7D,8CAA8C,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const DisableTenantFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import DisableTenantUseCase from "./DisableTenantUseCase.js";
3
+ export const DisableTenantFeature = createFeature({
4
+ name: "DisableTenant",
5
+ register(container) {
6
+ // Register use case (transient scope)
7
+ container.register(DisableTenantUseCase);
8
+ }
9
+ });
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","DisableTenantUseCase","DisableTenantFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport DisableTenantUseCase from \"./DisableTenantUseCase.js\";\n\nexport const DisableTenantFeature = createFeature({\n name: \"DisableTenant\",\n register(container) {\n // Register use case (transient scope)\n container.register(DisableTenantUseCase);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,OAAOC,oBAAoB;AAE3B,OAAO,MAAMC,oBAAoB,GAAGF,aAAa,CAAC;EAC9CG,IAAI,EAAE,eAAe;EACrBC,QAAQA,CAACC,SAAS,EAAE;IAChB;IACAA,SAAS,CAACD,QAAQ,CAACH,oBAAoB,CAAC;EAC5C;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ import { EnableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
4
+ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
5
+ import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
6
+ import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
7
+ import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
8
+ declare class EnableTenantUseCase implements UseCaseAbstraction.Interface {
9
+ private identityContext;
10
+ private eventPublisher;
11
+ private coreUpdateTenant;
12
+ private tmUpdateTenant;
13
+ private tmGetTenantById;
14
+ constructor(identityContext: IdentityContext.Interface, eventPublisher: EventPublisher.Interface, coreUpdateTenant: ApiCoreUpdateTenant.Interface, tmUpdateTenant: TenantManagerUpdateTenant.Interface, tmGetTenantById: GetTenantByIdUseCase.Interface);
15
+ execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>>;
16
+ }
17
+ declare const _default: typeof EnableTenantUseCase & {
18
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IEnableTenantUseCase>;
19
+ };
20
+ export default _default;
@@ -0,0 +1,67 @@
1
+ import { EnableTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
4
+ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
5
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
6
+ import { UpdateTenantUseCase as ApiCoreUpdateTenant } from "@webiny/api-core/features/tenancy/UpdateTenant";
7
+ import { UpdateTenantUseCase as TenantManagerUpdateTenant } from "../UpdateTenant/abstractions.js";
8
+ import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
9
+ import { TenantBeforeEnableEvent, TenantAfterEnableEvent } from "./events.js";
10
+ import { TenantPersistenceError } from "../../domain/errors.js";
11
+ class EnableTenantUseCase {
12
+ constructor(identityContext, eventPublisher, coreUpdateTenant, tmUpdateTenant, tmGetTenantById) {
13
+ this.identityContext = identityContext;
14
+ this.eventPublisher = eventPublisher;
15
+ this.coreUpdateTenant = coreUpdateTenant;
16
+ this.tmUpdateTenant = tmUpdateTenant;
17
+ this.tmGetTenantById = tmGetTenantById;
18
+ }
19
+ async execute(tenantId) {
20
+ // Authorization checks
21
+ if (!this.identityContext.getPermission("tm.tenant")) {
22
+ return Result.fail(new NotAuthorizedError({
23
+ message: "Not authorized to enable tenants."
24
+ }));
25
+ }
26
+
27
+ // Get current tenant to verify it exists
28
+ const getTenantResult = await this.tmGetTenantById.execute(tenantId);
29
+ if (getTenantResult.isFail()) {
30
+ return Result.fail(getTenantResult.error);
31
+ }
32
+ const tenant = getTenantResult.value;
33
+
34
+ // Publish before event
35
+ await this.eventPublisher.publish(new TenantBeforeEnableEvent({
36
+ tenant
37
+ }));
38
+
39
+ // Update api-core tenant first
40
+ const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {
41
+ status: "enabled"
42
+ });
43
+ if (apiCoreResult.isFail()) {
44
+ return Result.fail(new TenantPersistenceError(new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)));
45
+ }
46
+
47
+ // Update tenant-manager CMS entry
48
+ const updatedTenantResult = await this.tmUpdateTenant.execute(tenantId, {
49
+ status: "enabled"
50
+ });
51
+ if (updatedTenantResult.isFail()) {
52
+ return Result.fail(updatedTenantResult.error);
53
+ }
54
+
55
+ // Publish after event
56
+ await this.eventPublisher.publish(new TenantAfterEnableEvent({
57
+ tenant: updatedTenantResult.value
58
+ }));
59
+ return Result.ok();
60
+ }
61
+ }
62
+ export default UseCaseAbstraction.createImplementation({
63
+ implementation: EnableTenantUseCase,
64
+ dependencies: [IdentityContext, EventPublisher, ApiCoreUpdateTenant, TenantManagerUpdateTenant, GetTenantByIdUseCase]
65
+ });
66
+
67
+ //# sourceMappingURL=EnableTenantUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EnableTenantUseCase","UseCaseAbstraction","Result","IdentityContext","EventPublisher","NotAuthorizedError","UpdateTenantUseCase","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase","TenantBeforeEnableEvent","TenantAfterEnableEvent","TenantPersistenceError","constructor","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","execute","tenantId","getPermission","fail","message","getTenantResult","isFail","error","tenant","value","publish","apiCoreResult","status","Error","updatedTenantResult","ok","createImplementation","implementation","dependencies"],"sources":["EnableTenantUseCase.ts"],"sourcesContent":["import { EnableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/EventPublisher\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { UpdateTenantUseCase as ApiCoreUpdateTenant } from \"@webiny/api-core/features/tenancy/UpdateTenant\";\nimport { UpdateTenantUseCase as TenantManagerUpdateTenant } from \"../UpdateTenant/abstractions.js\";\nimport { GetTenantByIdUseCase } from \"../GetTenantById/abstractions.js\";\nimport { TenantBeforeEnableEvent, TenantAfterEnableEvent } from \"./events.js\";\nimport { TenantPersistenceError } from \"../../domain/errors.js\";\n\nclass EnableTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private coreUpdateTenant: ApiCoreUpdateTenant.Interface,\n private tmUpdateTenant: TenantManagerUpdateTenant.Interface,\n private tmGetTenantById: GetTenantByIdUseCase.Interface\n ) {}\n\n async execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Authorization checks\n if (!this.identityContext.getPermission(\"tm.tenant\")) {\n return Result.fail(\n new NotAuthorizedError({ message: \"Not authorized to enable tenants.\" })\n );\n }\n\n // Get current tenant to verify it exists\n const getTenantResult = await this.tmGetTenantById.execute(tenantId);\n if (getTenantResult.isFail()) {\n return Result.fail(getTenantResult.error);\n }\n\n const tenant = getTenantResult.value;\n\n // Publish before event\n await this.eventPublisher.publish(new TenantBeforeEnableEvent({ tenant }));\n\n // Update api-core tenant first\n const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {\n status: \"enabled\"\n });\n\n if (apiCoreResult.isFail()) {\n return Result.fail(\n new TenantPersistenceError(\n new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)\n )\n );\n }\n\n // Update tenant-manager CMS entry\n const updatedTenantResult = await this.tmUpdateTenant.execute(tenantId, {\n status: \"enabled\"\n });\n\n if (updatedTenantResult.isFail()) {\n return Result.fail(updatedTenantResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new TenantAfterEnableEvent({ tenant: updatedTenantResult.value })\n );\n\n return Result.ok();\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: EnableTenantUseCase,\n dependencies: [\n IdentityContext,\n EventPublisher,\n ApiCoreUpdateTenant,\n TenantManagerUpdateTenant,\n GetTenantByIdUseCase\n ]\n});\n"],"mappings":"AAAA,SAASA,mBAAmB,IAAIC,kBAAkB;AAClD,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,eAAe,QAAQ,0CAA0C;AAC1E,SAASC,cAAc,QAAQ,0CAA0C;AACzE,SAASC,kBAAkB,QAAQ,qDAAqD;AACxF,SAASC,mBAAmB,IAAIC,mBAAmB,QAAQ,gDAAgD;AAC3G,SAASD,mBAAmB,IAAIE,yBAAyB;AACzD,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB,EAAEC,sBAAsB;AACxD,SAASC,sBAAsB;AAE/B,MAAMZ,mBAAmB,CAAyC;EAC9Da,WAAWA,CACCC,eAA0C,EAC1CC,cAAwC,EACxCC,gBAA+C,EAC/CC,cAAmD,EACnDC,eAA+C,EACzD;IAAA,KALUJ,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,gBAA+C,GAA/CA,gBAA+C;IAAA,KAC/CC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,eAA+C,GAA/CA,eAA+C;EACxD;EAEH,MAAMC,OAAOA,CAACC,QAAgB,EAAmD;IAC7E;IACA,IAAI,CAAC,IAAI,CAACN,eAAe,CAACO,aAAa,CAAC,WAAW,CAAC,EAAE;MAClD,OAAOnB,MAAM,CAACoB,IAAI,CACd,IAAIjB,kBAAkB,CAAC;QAAEkB,OAAO,EAAE;MAAoC,CAAC,CAC3E,CAAC;IACL;;IAEA;IACA,MAAMC,eAAe,GAAG,MAAM,IAAI,CAACN,eAAe,CAACC,OAAO,CAACC,QAAQ,CAAC;IACpE,IAAII,eAAe,CAACC,MAAM,CAAC,CAAC,EAAE;MAC1B,OAAOvB,MAAM,CAACoB,IAAI,CAACE,eAAe,CAACE,KAAK,CAAC;IAC7C;IAEA,MAAMC,MAAM,GAAGH,eAAe,CAACI,KAAK;;IAEpC;IACA,MAAM,IAAI,CAACb,cAAc,CAACc,OAAO,CAAC,IAAInB,uBAAuB,CAAC;MAAEiB;IAAO,CAAC,CAAC,CAAC;;IAE1E;IACA,MAAMG,aAAa,GAAG,MAAM,IAAI,CAACd,gBAAgB,CAACG,OAAO,CAACC,QAAQ,EAAE;MAChEW,MAAM,EAAE;IACZ,CAAC,CAAC;IAEF,IAAID,aAAa,CAACL,MAAM,CAAC,CAAC,EAAE;MACxB,OAAOvB,MAAM,CAACoB,IAAI,CACd,IAAIV,sBAAsB,CACtB,IAAIoB,KAAK,CAAC,qCAAqCF,aAAa,CAACJ,KAAK,EAAE,CACxE,CACJ,CAAC;IACL;;IAEA;IACA,MAAMO,mBAAmB,GAAG,MAAM,IAAI,CAAChB,cAAc,CAACE,OAAO,CAACC,QAAQ,EAAE;MACpEW,MAAM,EAAE;IACZ,CAAC,CAAC;IAEF,IAAIE,mBAAmB,CAACR,MAAM,CAAC,CAAC,EAAE;MAC9B,OAAOvB,MAAM,CAACoB,IAAI,CAACW,mBAAmB,CAACP,KAAK,CAAC;IACjD;;IAEA;IACA,MAAM,IAAI,CAACX,cAAc,CAACc,OAAO,CAC7B,IAAIlB,sBAAsB,CAAC;MAAEgB,MAAM,EAAEM,mBAAmB,CAACL;IAAM,CAAC,CACpE,CAAC;IAED,OAAO1B,MAAM,CAACgC,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,eAAejC,kBAAkB,CAACkC,oBAAoB,CAAC;EACnDC,cAAc,EAAEpC,mBAAmB;EACnCqC,YAAY,EAAE,CACVlC,eAAe,EACfC,cAAc,EACdG,mBAAmB,EACnBC,yBAAyB,EACzBC,oBAAoB;AAE5B,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
3
+ import { TenantModelNotFoundError, TenantNotFoundError, TenantPersistenceError } from "../../domain/errors.js";
4
+ export interface IEnableTenantUseCase {
5
+ execute(tenantId: string): Promise<Result<void, EnableTenantUseCase.Error>>;
6
+ }
7
+ export interface IEnableTenantUseCaseErrors {
8
+ notAuthorized: NotAuthorizedError;
9
+ notFound: TenantNotFoundError;
10
+ persistence: TenantPersistenceError;
11
+ modelNotFound: TenantModelNotFoundError;
12
+ }
13
+ type UseCaseError = IEnableTenantUseCaseErrors[keyof IEnableTenantUseCaseErrors];
14
+ export declare const EnableTenantUseCase: import("@webiny/di").Abstraction<IEnableTenantUseCase>;
15
+ export declare namespace EnableTenantUseCase {
16
+ type Interface = IEnableTenantUseCase;
17
+ type Error = UseCaseError;
18
+ }
19
+ export {};
@@ -0,0 +1,4 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ export const EnableTenantUseCase = createAbstraction("TenantManager/EnableTenantUseCase");
3
+
4
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","EnableTenantUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport {\n TenantModelNotFoundError,\n TenantNotFoundError,\n TenantPersistenceError\n} from \"../../domain/errors.js\";\n\nexport interface IEnableTenantUseCase {\n execute(tenantId: string): Promise<Result<void, EnableTenantUseCase.Error>>;\n}\n\nexport interface IEnableTenantUseCaseErrors {\n notAuthorized: NotAuthorizedError;\n notFound: TenantNotFoundError;\n persistence: TenantPersistenceError;\n modelNotFound: TenantModelNotFoundError;\n}\n\ntype UseCaseError = IEnableTenantUseCaseErrors[keyof IEnableTenantUseCaseErrors];\n\nexport const EnableTenantUseCase = createAbstraction<IEnableTenantUseCase>(\n \"TenantManager/EnableTenantUseCase\"\n);\n\nexport namespace EnableTenantUseCase {\n export type Interface = IEnableTenantUseCase;\n export type Error = UseCaseError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAsBvD,OAAO,MAAMC,mBAAmB,GAAGD,iBAAiB,CAChD,mCACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
+ import type { IEventHandler } from "@webiny/api-core/features/EventPublisher";
3
+ import type { Tenant } from "../../../shared/Tenant.js";
4
+ export interface TenantBeforeEnablePayload {
5
+ tenant: Tenant;
6
+ }
7
+ export interface TenantAfterEnablePayload {
8
+ tenant: Tenant;
9
+ }
10
+ export declare class TenantBeforeEnableEvent extends DomainEvent<TenantBeforeEnablePayload> {
11
+ eventType: "tenant.beforeEnable";
12
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TenantBeforeEnableEvent>>;
13
+ }
14
+ export declare const TenantBeforeEnableEventHandler: import("@webiny/di").Abstraction<IEventHandler<TenantBeforeEnableEvent>>;
15
+ export declare namespace TenantBeforeEnableEventHandler {
16
+ type Interface = IEventHandler<TenantBeforeEnableEvent>;
17
+ type Event = TenantBeforeEnableEvent;
18
+ }
19
+ export declare class TenantAfterEnableEvent extends DomainEvent<TenantAfterEnablePayload> {
20
+ eventType: "tenant.afterEnable";
21
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TenantAfterEnableEvent>>;
22
+ }
23
+ export declare const TenantAfterEnableEventHandler: import("@webiny/di").Abstraction<IEventHandler<TenantAfterEnableEvent>>;
24
+ export declare namespace TenantAfterEnableEventHandler {
25
+ type Interface = IEventHandler<TenantAfterEnableEvent>;
26
+ type Event = TenantAfterEnableEvent;
27
+ }
@@ -0,0 +1,18 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
3
+ export class TenantBeforeEnableEvent extends DomainEvent {
4
+ eventType = "tenant.beforeEnable";
5
+ getHandlerAbstraction() {
6
+ return TenantBeforeEnableEventHandler;
7
+ }
8
+ }
9
+ export const TenantBeforeEnableEventHandler = createAbstraction("TenantManager/TenantBeforeEnableEventHandler");
10
+ export class TenantAfterEnableEvent extends DomainEvent {
11
+ eventType = "tenant.afterEnable";
12
+ getHandlerAbstraction() {
13
+ return TenantAfterEnableEventHandler;
14
+ }
15
+ }
16
+ export const TenantAfterEnableEventHandler = createAbstraction("TenantManager/TenantAfterEnableEventHandler");
17
+
18
+ //# sourceMappingURL=events.js.map