@webiny/api-core 0.0.0-unstable.ac6ebf63c6 → 0.0.0-unstable.c27f4d8a31

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 (325) hide show
  1. package/ApiCoreFeature.js +2 -0
  2. package/ApiCoreFeature.js.map +1 -1
  3. package/exports/api/{buildParams.js → build-params.js} +1 -1
  4. package/exports/api/build-params.js.map +1 -0
  5. package/exports/api/{eventPublisher.js → event-publisher.js} +1 -1
  6. package/exports/api/event-publisher.js.map +1 -0
  7. package/exports/api/{keyValueStore.js → key-value-store.js} +1 -1
  8. package/exports/api/key-value-store.js.map +1 -0
  9. package/exports/api/security/api-key.d.ts +7 -0
  10. package/exports/api/security/api-key.js +9 -0
  11. package/exports/api/security/api-key.js.map +1 -0
  12. package/exports/api/security/authentication.d.ts +1 -1
  13. package/exports/api/security/authentication.js +1 -1
  14. package/exports/api/security/authentication.js.map +1 -1
  15. package/exports/api/security/role.d.ts +3 -3
  16. package/exports/api/security/role.js +3 -3
  17. package/exports/api/security/role.js.map +1 -1
  18. package/exports/api/security/user.d.ts +3 -3
  19. package/exports/api/security/user.js +3 -3
  20. package/exports/api/security/user.js.map +1 -1
  21. package/exports/api/system.d.ts +1 -1
  22. package/exports/api/system.js +1 -1
  23. package/exports/api/system.js.map +1 -1
  24. package/exports/api/tenancy.d.ts +4 -4
  25. package/exports/api/tenancy.js +4 -4
  26. package/exports/api/tenancy.js.map +1 -1
  27. package/features/featureFlags/FeatureFlags.d.ts +12 -0
  28. package/features/featureFlags/FeatureFlags.js +18 -0
  29. package/features/featureFlags/FeatureFlags.js.map +1 -0
  30. package/features/featureFlags/abstractions.d.ts +8 -0
  31. package/features/featureFlags/abstractions.js +4 -0
  32. package/features/featureFlags/abstractions.js.map +1 -0
  33. package/features/featureFlags/feature.d.ts +1 -0
  34. package/features/featureFlags/feature.js +10 -0
  35. package/features/featureFlags/feature.js.map +1 -0
  36. package/features/security/IdentityContext/IdentityContext.js +1 -1
  37. package/features/security/IdentityContext/IdentityContext.js.map +1 -1
  38. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js +1 -1
  39. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js.map +1 -1
  40. package/features/security/apiKeys/CreateApiKey/events.d.ts +4 -4
  41. package/features/security/apiKeys/CreateApiKey/events.js +4 -4
  42. package/features/security/apiKeys/CreateApiKey/events.js.map +1 -1
  43. package/features/security/apiKeys/DeleteApiKey/events.d.ts +4 -4
  44. package/features/security/apiKeys/DeleteApiKey/events.js +4 -4
  45. package/features/security/apiKeys/DeleteApiKey/events.js.map +1 -1
  46. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js +1 -1
  47. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js.map +1 -1
  48. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js +1 -1
  49. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js.map +1 -1
  50. package/features/security/apiKeys/UpdateApiKey/events.d.ts +4 -4
  51. package/features/security/apiKeys/UpdateApiKey/events.js +4 -4
  52. package/features/security/apiKeys/UpdateApiKey/events.js.map +1 -1
  53. package/features/security/apiKeys/shared/schemas.d.ts +10 -71
  54. package/features/security/apiKeys/shared/schemas.js +4 -4
  55. package/features/security/apiKeys/shared/schemas.js.map +1 -1
  56. package/features/security/authentication/AuthenticationContext/SetIdTokenCookie.d.ts +2 -2
  57. package/features/security/authentication/AuthenticationContext/SetIdTokenCookie.js +2 -2
  58. package/features/security/authentication/AuthenticationContext/SetIdTokenCookie.js.map +1 -1
  59. package/features/security/authentication/AuthenticationContext/events.d.ts +4 -4
  60. package/features/security/authentication/AuthenticationContext/events.js +4 -4
  61. package/features/security/authentication/AuthenticationContext/events.js.map +1 -1
  62. package/features/security/login/abstractions.d.ts +2 -2
  63. package/features/security/login/abstractions.js +2 -2
  64. package/features/security/login/abstractions.js.map +1 -1
  65. package/features/security/permissions/createPermissions.d.ts +8 -0
  66. package/features/security/permissions/createPermissions.js +240 -0
  67. package/features/security/permissions/createPermissions.js.map +1 -0
  68. package/features/security/permissions/index.d.ts +2 -0
  69. package/features/security/permissions/index.js +3 -0
  70. package/features/security/permissions/index.js.map +1 -0
  71. package/features/security/permissions/types.d.ts +137 -0
  72. package/features/security/permissions/types.js +3 -0
  73. package/features/security/permissions/types.js.map +1 -0
  74. package/features/security/roles/CreateRole/CreateRoleUseCase.js +1 -1
  75. package/features/security/roles/CreateRole/CreateRoleUseCase.js.map +1 -1
  76. package/features/security/roles/CreateRole/events.d.ts +4 -4
  77. package/features/security/roles/CreateRole/events.js +4 -4
  78. package/features/security/roles/CreateRole/events.js.map +1 -1
  79. package/features/security/roles/CreateRole/schema.d.ts +2 -20
  80. package/features/security/roles/CreateRole/schema.js +2 -2
  81. package/features/security/roles/CreateRole/schema.js.map +1 -1
  82. package/features/security/roles/DeleteRole/events.d.ts +4 -4
  83. package/features/security/roles/DeleteRole/events.js +4 -4
  84. package/features/security/roles/DeleteRole/events.js.map +1 -1
  85. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js +1 -1
  86. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js.map +1 -1
  87. package/features/security/roles/UpdateRole/events.d.ts +4 -4
  88. package/features/security/roles/UpdateRole/events.js +4 -4
  89. package/features/security/roles/UpdateRole/events.js.map +1 -1
  90. package/features/security/roles/UpdateRole/schema.d.ts +2 -18
  91. package/features/security/roles/UpdateRole/schema.js +2 -2
  92. package/features/security/roles/UpdateRole/schema.js.map +1 -1
  93. package/features/security/teams/CreateTeam/CreateTeamUseCase.js +1 -1
  94. package/features/security/teams/CreateTeam/CreateTeamUseCase.js.map +1 -1
  95. package/features/security/teams/CreateTeam/events.d.ts +4 -4
  96. package/features/security/teams/CreateTeam/events.js +4 -4
  97. package/features/security/teams/CreateTeam/events.js.map +1 -1
  98. package/features/security/teams/CreateTeam/index.d.ts +1 -1
  99. package/features/security/teams/CreateTeam/index.js +1 -1
  100. package/features/security/teams/CreateTeam/index.js.map +1 -1
  101. package/features/security/teams/CreateTeam/schema.d.ts +2 -12
  102. package/features/security/teams/DeleteTeam/events.d.ts +4 -4
  103. package/features/security/teams/DeleteTeam/events.js +4 -4
  104. package/features/security/teams/DeleteTeam/events.js.map +1 -1
  105. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js +1 -1
  106. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js.map +1 -1
  107. package/features/security/teams/UpdateTeam/events.d.ts +4 -4
  108. package/features/security/teams/UpdateTeam/events.js +4 -4
  109. package/features/security/teams/UpdateTeam/events.js.map +1 -1
  110. package/features/security/teams/UpdateTeam/schema.d.ts +2 -10
  111. package/features/system/InstallSystem/abstractions.d.ts +2 -2
  112. package/features/system/InstallSystem/abstractions.js +1 -1
  113. package/features/system/InstallSystem/abstractions.js.map +1 -1
  114. package/features/system/InstallSystem/events.js +2 -2
  115. package/features/system/InstallSystem/events.js.map +1 -1
  116. package/features/system/InstallSystem/index.d.ts +1 -1
  117. package/features/system/InstallSystem/index.js +1 -1
  118. package/features/system/InstallSystem/index.js.map +1 -1
  119. package/features/tenancy/CreateTenant/abstractions.d.ts +4 -4
  120. package/features/tenancy/CreateTenant/abstractions.js +2 -2
  121. package/features/tenancy/CreateTenant/abstractions.js.map +1 -1
  122. package/features/tenancy/CreateTenant/events.js +3 -3
  123. package/features/tenancy/CreateTenant/events.js.map +1 -1
  124. package/features/tenancy/CreateTenant/index.d.ts +1 -1
  125. package/features/tenancy/CreateTenant/index.js +1 -1
  126. package/features/tenancy/CreateTenant/index.js.map +1 -1
  127. package/features/tenancy/DeleteTenant/abstractions.d.ts +4 -4
  128. package/features/tenancy/DeleteTenant/abstractions.js +2 -2
  129. package/features/tenancy/DeleteTenant/abstractions.js.map +1 -1
  130. package/features/tenancy/DeleteTenant/events.js +3 -3
  131. package/features/tenancy/DeleteTenant/events.js.map +1 -1
  132. package/features/tenancy/DeleteTenant/index.d.ts +1 -1
  133. package/features/tenancy/DeleteTenant/index.js +1 -1
  134. package/features/tenancy/DeleteTenant/index.js.map +1 -1
  135. package/features/tenancy/InstallTenant/abstractions.d.ts +2 -2
  136. package/features/tenancy/InstallTenant/abstractions.js +1 -1
  137. package/features/tenancy/InstallTenant/abstractions.js.map +1 -1
  138. package/features/tenancy/InstallTenant/events.js +2 -2
  139. package/features/tenancy/InstallTenant/events.js.map +1 -1
  140. package/features/tenancy/InstallTenant/index.d.ts +1 -1
  141. package/features/tenancy/InstallTenant/index.js +1 -1
  142. package/features/tenancy/InstallTenant/index.js.map +1 -1
  143. package/features/tenancy/UpdateTenant/abstractions.d.ts +4 -4
  144. package/features/tenancy/UpdateTenant/abstractions.js +2 -2
  145. package/features/tenancy/UpdateTenant/abstractions.js.map +1 -1
  146. package/features/tenancy/UpdateTenant/events.js +3 -3
  147. package/features/tenancy/UpdateTenant/events.js.map +1 -1
  148. package/features/tenancy/UpdateTenant/index.d.ts +1 -1
  149. package/features/tenancy/UpdateTenant/index.js +1 -1
  150. package/features/tenancy/UpdateTenant/index.js.map +1 -1
  151. package/features/users/CreateUser/CreateUserUseCase.js +1 -1
  152. package/features/users/CreateUser/CreateUserUseCase.js.map +1 -1
  153. package/features/users/CreateUser/events.d.ts +4 -4
  154. package/features/users/CreateUser/events.js +4 -4
  155. package/features/users/CreateUser/events.js.map +1 -1
  156. package/features/users/CreateUser/schema.d.ts +4 -36
  157. package/features/users/DeleteUser/events.d.ts +4 -4
  158. package/features/users/DeleteUser/events.js +4 -4
  159. package/features/users/DeleteUser/events.js.map +1 -1
  160. package/features/users/ExternalIdpUserSync/ExternalIdpUserSyncHandler.d.ts +3 -3
  161. package/features/users/ExternalIdpUserSync/ExternalIdpUserSyncHandler.js +2 -2
  162. package/features/users/ExternalIdpUserSync/ExternalIdpUserSyncHandler.js.map +1 -1
  163. package/features/users/UpdateUser/UpdateUserUseCase.js +1 -1
  164. package/features/users/UpdateUser/UpdateUserUseCase.js.map +1 -1
  165. package/features/users/UpdateUser/events.d.ts +4 -4
  166. package/features/users/UpdateUser/events.js +4 -4
  167. package/features/users/UpdateUser/events.js.map +1 -1
  168. package/features/users/UpdateUser/schema.d.ts +4 -30
  169. package/features/wcp/WcpContext/WcpContext.d.ts +2 -0
  170. package/features/wcp/WcpContext/WcpContext.js +6 -0
  171. package/features/wcp/WcpContext/WcpContext.js.map +1 -1
  172. package/features/wcp/WcpContext/abstractions.d.ts +1 -0
  173. package/features/wcp/WcpContext/abstractions.js.map +1 -1
  174. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.d.ts +79 -0
  175. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +120 -0
  176. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -0
  177. package/features/wcp/WcpFeature.js +2 -0
  178. package/features/wcp/WcpFeature.js.map +1 -1
  179. package/graphql/wcp/graphql.js +1 -1
  180. package/graphql/wcp/graphql.js.map +1 -1
  181. package/legacy/wcp/LegacyWcpContext.d.ts +2 -0
  182. package/legacy/wcp/LegacyWcpContext.js +6 -0
  183. package/legacy/wcp/LegacyWcpContext.js.map +1 -1
  184. package/models/base/BaseModel.js +2 -2
  185. package/models/base/BaseModel.js.map +1 -1
  186. package/models/base/ModelBuilder.d.ts +2 -2
  187. package/models/base/ModelBuilder.js +21 -2
  188. package/models/base/ModelBuilder.js.map +1 -1
  189. package/models/cms/FieldBuilder.d.ts +3 -2
  190. package/models/cms/FieldBuilder.js +12 -17
  191. package/models/cms/FieldBuilder.js.map +1 -1
  192. package/models/cms/FieldBuilderRegistry.d.ts +1 -1
  193. package/models/cms/FieldBuilderRegistry.js.map +1 -1
  194. package/models/cms/FieldDefinitionsBuilder.d.ts +1 -0
  195. package/models/cms/FieldDefinitionsBuilder.js +13 -15
  196. package/models/cms/FieldDefinitionsBuilder.js.map +1 -1
  197. package/models/cms/PrivateCmsModelBuilder.js.map +1 -1
  198. package/models/cms/abstractions.d.ts +1 -1
  199. package/models/cms/abstractions.js.map +1 -1
  200. package/models/cms/fieldsBuilder.md +1 -1
  201. package/models/simple/Page/abstractions.d.ts +1 -11
  202. package/package.json +19 -20
  203. package/exports/api/buildParams.js.map +0 -1
  204. package/exports/api/eventPublisher.js.map +0 -1
  205. package/exports/api/keyValueStore.js.map +0 -1
  206. package/exports/api/security/apiKey.d.ts +0 -7
  207. package/exports/api/security/apiKey.js +0 -9
  208. package/exports/api/security/apiKey.js.map +0 -1
  209. package/extensions/BuildParam.d.ts +0 -11
  210. package/extensions/BuildParam.js +0 -119
  211. package/extensions/BuildParam.js.map +0 -1
  212. package/extensions/GenericExtension.d.ts +0 -10
  213. package/extensions/GenericExtension.js +0 -7
  214. package/extensions/GenericExtension.js.map +0 -1
  215. package/extensions/eventHandlers/AfterAuthentication.d.ts +0 -10
  216. package/extensions/eventHandlers/AfterAuthentication.js +0 -9
  217. package/extensions/eventHandlers/AfterAuthentication.js.map +0 -1
  218. package/extensions/eventHandlers/ApiKeyAfterCreate.d.ts +0 -10
  219. package/extensions/eventHandlers/ApiKeyAfterCreate.js +0 -9
  220. package/extensions/eventHandlers/ApiKeyAfterCreate.js.map +0 -1
  221. package/extensions/eventHandlers/ApiKeyAfterDelete.d.ts +0 -10
  222. package/extensions/eventHandlers/ApiKeyAfterDelete.js +0 -9
  223. package/extensions/eventHandlers/ApiKeyAfterDelete.js.map +0 -1
  224. package/extensions/eventHandlers/ApiKeyAfterUpdate.d.ts +0 -10
  225. package/extensions/eventHandlers/ApiKeyAfterUpdate.js +0 -9
  226. package/extensions/eventHandlers/ApiKeyAfterUpdate.js.map +0 -1
  227. package/extensions/eventHandlers/ApiKeyBeforeCreate.d.ts +0 -10
  228. package/extensions/eventHandlers/ApiKeyBeforeCreate.js +0 -9
  229. package/extensions/eventHandlers/ApiKeyBeforeCreate.js.map +0 -1
  230. package/extensions/eventHandlers/ApiKeyBeforeDelete.d.ts +0 -10
  231. package/extensions/eventHandlers/ApiKeyBeforeDelete.js +0 -9
  232. package/extensions/eventHandlers/ApiKeyBeforeDelete.js.map +0 -1
  233. package/extensions/eventHandlers/ApiKeyBeforeUpdate.d.ts +0 -10
  234. package/extensions/eventHandlers/ApiKeyBeforeUpdate.js +0 -9
  235. package/extensions/eventHandlers/ApiKeyBeforeUpdate.js.map +0 -1
  236. package/extensions/eventHandlers/BeforeAuthentication.d.ts +0 -10
  237. package/extensions/eventHandlers/BeforeAuthentication.js +0 -9
  238. package/extensions/eventHandlers/BeforeAuthentication.js.map +0 -1
  239. package/extensions/eventHandlers/RoleAfterCreate.d.ts +0 -10
  240. package/extensions/eventHandlers/RoleAfterCreate.js +0 -9
  241. package/extensions/eventHandlers/RoleAfterCreate.js.map +0 -1
  242. package/extensions/eventHandlers/RoleAfterDelete.d.ts +0 -10
  243. package/extensions/eventHandlers/RoleAfterDelete.js +0 -9
  244. package/extensions/eventHandlers/RoleAfterDelete.js.map +0 -1
  245. package/extensions/eventHandlers/RoleAfterUpdate.d.ts +0 -10
  246. package/extensions/eventHandlers/RoleAfterUpdate.js +0 -9
  247. package/extensions/eventHandlers/RoleAfterUpdate.js.map +0 -1
  248. package/extensions/eventHandlers/RoleBeforeCreate.d.ts +0 -10
  249. package/extensions/eventHandlers/RoleBeforeCreate.js +0 -9
  250. package/extensions/eventHandlers/RoleBeforeCreate.js.map +0 -1
  251. package/extensions/eventHandlers/RoleBeforeDelete.d.ts +0 -10
  252. package/extensions/eventHandlers/RoleBeforeDelete.js +0 -9
  253. package/extensions/eventHandlers/RoleBeforeDelete.js.map +0 -1
  254. package/extensions/eventHandlers/RoleBeforeUpdate.d.ts +0 -10
  255. package/extensions/eventHandlers/RoleBeforeUpdate.js +0 -9
  256. package/extensions/eventHandlers/RoleBeforeUpdate.js.map +0 -1
  257. package/extensions/eventHandlers/SystemInstalled.d.ts +0 -10
  258. package/extensions/eventHandlers/SystemInstalled.js +0 -9
  259. package/extensions/eventHandlers/SystemInstalled.js.map +0 -1
  260. package/extensions/eventHandlers/TeamAfterCreate.d.ts +0 -10
  261. package/extensions/eventHandlers/TeamAfterCreate.js +0 -9
  262. package/extensions/eventHandlers/TeamAfterCreate.js.map +0 -1
  263. package/extensions/eventHandlers/TeamAfterDelete.d.ts +0 -10
  264. package/extensions/eventHandlers/TeamAfterDelete.js +0 -9
  265. package/extensions/eventHandlers/TeamAfterDelete.js.map +0 -1
  266. package/extensions/eventHandlers/TeamAfterUpdate.d.ts +0 -10
  267. package/extensions/eventHandlers/TeamAfterUpdate.js +0 -9
  268. package/extensions/eventHandlers/TeamAfterUpdate.js.map +0 -1
  269. package/extensions/eventHandlers/TeamBeforeCreate.d.ts +0 -10
  270. package/extensions/eventHandlers/TeamBeforeCreate.js +0 -9
  271. package/extensions/eventHandlers/TeamBeforeCreate.js.map +0 -1
  272. package/extensions/eventHandlers/TeamBeforeDelete.d.ts +0 -10
  273. package/extensions/eventHandlers/TeamBeforeDelete.js +0 -9
  274. package/extensions/eventHandlers/TeamBeforeDelete.js.map +0 -1
  275. package/extensions/eventHandlers/TeamBeforeUpdate.d.ts +0 -10
  276. package/extensions/eventHandlers/TeamBeforeUpdate.js +0 -9
  277. package/extensions/eventHandlers/TeamBeforeUpdate.js.map +0 -1
  278. package/extensions/eventHandlers/TenantAfterCreate.d.ts +0 -10
  279. package/extensions/eventHandlers/TenantAfterCreate.js +0 -9
  280. package/extensions/eventHandlers/TenantAfterCreate.js.map +0 -1
  281. package/extensions/eventHandlers/TenantAfterDelete.d.ts +0 -10
  282. package/extensions/eventHandlers/TenantAfterDelete.js +0 -9
  283. package/extensions/eventHandlers/TenantAfterDelete.js.map +0 -1
  284. package/extensions/eventHandlers/TenantAfterUpdate.d.ts +0 -10
  285. package/extensions/eventHandlers/TenantAfterUpdate.js +0 -9
  286. package/extensions/eventHandlers/TenantAfterUpdate.js.map +0 -1
  287. package/extensions/eventHandlers/TenantBeforeCreate.d.ts +0 -10
  288. package/extensions/eventHandlers/TenantBeforeCreate.js +0 -9
  289. package/extensions/eventHandlers/TenantBeforeCreate.js.map +0 -1
  290. package/extensions/eventHandlers/TenantBeforeDelete.d.ts +0 -10
  291. package/extensions/eventHandlers/TenantBeforeDelete.js +0 -9
  292. package/extensions/eventHandlers/TenantBeforeDelete.js.map +0 -1
  293. package/extensions/eventHandlers/TenantBeforeUpdate.d.ts +0 -10
  294. package/extensions/eventHandlers/TenantBeforeUpdate.js +0 -9
  295. package/extensions/eventHandlers/TenantBeforeUpdate.js.map +0 -1
  296. package/extensions/eventHandlers/TenantInstalled.d.ts +0 -10
  297. package/extensions/eventHandlers/TenantInstalled.js +0 -9
  298. package/extensions/eventHandlers/TenantInstalled.js.map +0 -1
  299. package/extensions/eventHandlers/UserAfterCreate.d.ts +0 -10
  300. package/extensions/eventHandlers/UserAfterCreate.js +0 -9
  301. package/extensions/eventHandlers/UserAfterCreate.js.map +0 -1
  302. package/extensions/eventHandlers/UserAfterDelete.d.ts +0 -10
  303. package/extensions/eventHandlers/UserAfterDelete.js +0 -9
  304. package/extensions/eventHandlers/UserAfterDelete.js.map +0 -1
  305. package/extensions/eventHandlers/UserAfterUpdate.d.ts +0 -10
  306. package/extensions/eventHandlers/UserAfterUpdate.js +0 -9
  307. package/extensions/eventHandlers/UserAfterUpdate.js.map +0 -1
  308. package/extensions/eventHandlers/UserBeforeCreate.d.ts +0 -10
  309. package/extensions/eventHandlers/UserBeforeCreate.js +0 -9
  310. package/extensions/eventHandlers/UserBeforeCreate.js.map +0 -1
  311. package/extensions/eventHandlers/UserBeforeDelete.d.ts +0 -10
  312. package/extensions/eventHandlers/UserBeforeDelete.js +0 -9
  313. package/extensions/eventHandlers/UserBeforeDelete.js.map +0 -1
  314. package/extensions/eventHandlers/UserBeforeUpdate.d.ts +0 -10
  315. package/extensions/eventHandlers/UserBeforeUpdate.js +0 -9
  316. package/extensions/eventHandlers/UserBeforeUpdate.js.map +0 -1
  317. package/extensions/eventHandlers/index.d.ts +0 -34
  318. package/extensions/eventHandlers/index.js +0 -49
  319. package/extensions/eventHandlers/index.js.map +0 -1
  320. package/extensions/index.d.ts +0 -58
  321. package/extensions/index.js +0 -49
  322. package/extensions/index.js.map +0 -1
  323. /package/exports/api/{buildParams.d.ts → build-params.d.ts} +0 -0
  324. /package/exports/api/{eventPublisher.d.ts → event-publisher.d.ts} +0 -0
  325. /package/exports/api/{keyValueStore.d.ts → key-value-store.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  export { DeleteTenantFeature } from "./feature.js";
2
- export { DeleteTenantUseCase, DeleteTenantRepository, DeleteTenantGateway, TenantBeforeDeleteHandler, TenantAfterDeleteHandler } from "./abstractions.js";
2
+ export { DeleteTenantUseCase, DeleteTenantRepository, DeleteTenantGateway, TenantBeforeDeleteEventHandler, TenantAfterDeleteEventHandler } from "./abstractions.js";
3
3
  export { TenantBeforeDeleteEvent, TenantAfterDeleteEvent } from "./events.js";
4
4
 
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DeleteTenantFeature","DeleteTenantUseCase","DeleteTenantRepository","DeleteTenantGateway","TenantBeforeDeleteHandler","TenantAfterDeleteHandler","TenantBeforeDeleteEvent","TenantAfterDeleteEvent"],"sources":["index.ts"],"sourcesContent":["export { DeleteTenantFeature } from \"./feature.js\";\nexport {\n DeleteTenantUseCase,\n DeleteTenantRepository,\n DeleteTenantGateway,\n TenantBeforeDeleteHandler,\n TenantAfterDeleteHandler\n} from \"./abstractions.js\";\nexport { TenantBeforeDeleteEvent, TenantAfterDeleteEvent } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,mBAAmB;AAC5B,SACIC,mBAAmB,EACnBC,sBAAsB,EACtBC,mBAAmB,EACnBC,yBAAyB,EACzBC,wBAAwB;AAE5B,SAASC,uBAAuB,EAAEC,sBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["DeleteTenantFeature","DeleteTenantUseCase","DeleteTenantRepository","DeleteTenantGateway","TenantBeforeDeleteEventHandler","TenantAfterDeleteEventHandler","TenantBeforeDeleteEvent","TenantAfterDeleteEvent"],"sources":["index.ts"],"sourcesContent":["export { DeleteTenantFeature } from \"./feature.js\";\nexport {\n DeleteTenantUseCase,\n DeleteTenantRepository,\n DeleteTenantGateway,\n TenantBeforeDeleteEventHandler,\n TenantAfterDeleteEventHandler\n} from \"./abstractions.js\";\nexport { TenantBeforeDeleteEvent, TenantAfterDeleteEvent } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,mBAAmB;AAC5B,SACIC,mBAAmB,EACnBC,sBAAsB,EACtBC,mBAAmB,EACnBC,8BAA8B,EAC9BC,6BAA6B;AAEjC,SAASC,uBAAuB,EAAEC,sBAAsB","ignoreList":[]}
@@ -59,8 +59,8 @@ export declare namespace InstallTenantUseCase {
59
59
  /**
60
60
  * Event Handler Abstraction
61
61
  */
62
- export declare const TenantInstalledHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantInstalledPayload>>>;
63
- export declare namespace TenantInstalledHandler {
62
+ export declare const TenantInstalledEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantInstalledPayload>>>;
63
+ export declare namespace TenantInstalledEventHandler {
64
64
  type Interface = IEventHandler<DomainEvent<TenantInstalledPayload>>;
65
65
  type Event = DomainEvent<TenantInstalledPayload>;
66
66
  }
@@ -22,6 +22,6 @@ export const InstallTenantUseCase = createAbstraction("InstallTenantUseCase");
22
22
  /**
23
23
  * Event Handler Abstraction
24
24
  */
25
- export const TenantInstalledHandler = createAbstraction("TenantInstalledHandler");
25
+ export const TenantInstalledEventHandler = createAbstraction("TenantInstalledEventHandler");
26
26
 
27
27
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","AppInstaller","InstallTenantUseCase","TenantInstalledHandler"],"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 TenantInstalledHandler =\n createAbstraction<IEventHandler<DomainEvent<TenantInstalledPayload>>>(\"TenantInstalledHandler\");\n\nexport namespace TenantInstalledHandler {\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,sBAAsB,GAC/BH,iBAAiB,CAAqD,wBAAwB,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\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,9 +1,9 @@
1
1
  import { DomainEvent } from "../../eventPublisher/index.js";
2
- import { TenantInstalledHandler } from "./abstractions.js";
2
+ import { TenantInstalledEventHandler } from "./abstractions.js";
3
3
  export class TenantInstalledEvent extends DomainEvent {
4
4
  eventType = "tenant.installed";
5
5
  getHandlerAbstraction() {
6
- return TenantInstalledHandler;
6
+ return TenantInstalledEventHandler;
7
7
  }
8
8
  }
9
9
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","TenantInstalledHandler","TenantInstalledEvent","eventType","getHandlerAbstraction"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport { TenantInstalledHandler } from \"./abstractions.js\";\n\nexport interface TenantInstalledPayload {\n tenant: Tenant;\n installedApps: string[];\n}\n\nexport class TenantInstalledEvent extends DomainEvent<TenantInstalledPayload> {\n eventType = \"tenant.installed\" as const;\n\n getHandlerAbstraction() {\n return TenantInstalledHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW;AAEpB,SAASC,sBAAsB;AAO/B,OAAO,MAAMC,oBAAoB,SAASF,WAAW,CAAyB;EAC1EG,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,sBAAsB;EACjC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","TenantInstalledEventHandler","TenantInstalledEvent","eventType","getHandlerAbstraction"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport { TenantInstalledEventHandler } from \"./abstractions.js\";\n\nexport interface TenantInstalledPayload {\n tenant: Tenant;\n installedApps: string[];\n}\n\nexport class TenantInstalledEvent extends DomainEvent<TenantInstalledPayload> {\n eventType = \"tenant.installed\" as const;\n\n getHandlerAbstraction() {\n return TenantInstalledEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW;AAEpB,SAASC,2BAA2B;AAOpC,OAAO,MAAMC,oBAAoB,SAASF,WAAW,CAAyB;EAC1EG,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,2BAA2B;EACtC;AACJ","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  export { InstallTenantFeature } from "./feature.js";
2
- export { InstallTenantUseCase, AppInstaller, TenantInstalledHandler, type AppInstallationData, type TenantInstallationInput } from "./abstractions.js";
2
+ export { InstallTenantUseCase, AppInstaller, TenantInstalledEventHandler, type AppInstallationData, type TenantInstallationInput } from "./abstractions.js";
3
3
  export { DependencyResolver } from "./DependencyResolver.js";
4
4
  export { InstallTenantError, InstallationDependencyError } from "./errors.js";
5
5
  export { TenantInstalledEvent, type TenantInstalledPayload } from "./events.js";
@@ -1,5 +1,5 @@
1
1
  export { InstallTenantFeature } from "./feature.js";
2
- export { InstallTenantUseCase, AppInstaller, TenantInstalledHandler } from "./abstractions.js";
2
+ export { InstallTenantUseCase, AppInstaller, TenantInstalledEventHandler } from "./abstractions.js";
3
3
  export { DependencyResolver } from "./DependencyResolver.js";
4
4
  export { InstallTenantError, InstallationDependencyError } from "./errors.js";
5
5
  export { TenantInstalledEvent } from "./events.js";
@@ -1 +1 @@
1
- {"version":3,"names":["InstallTenantFeature","InstallTenantUseCase","AppInstaller","TenantInstalledHandler","DependencyResolver","InstallTenantError","InstallationDependencyError","TenantInstalledEvent"],"sources":["index.ts"],"sourcesContent":["export { InstallTenantFeature } from \"./feature.js\";\nexport {\n InstallTenantUseCase,\n AppInstaller,\n TenantInstalledHandler,\n type AppInstallationData,\n type TenantInstallationInput\n} from \"./abstractions.js\";\nexport { DependencyResolver } from \"./DependencyResolver.js\";\nexport { InstallTenantError, InstallationDependencyError } from \"./errors.js\";\nexport { TenantInstalledEvent, type TenantInstalledPayload } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,oBAAoB;AAC7B,SACIC,oBAAoB,EACpBC,YAAY,EACZC,sBAAsB;AAI1B,SAASC,kBAAkB;AAC3B,SAASC,kBAAkB,EAAEC,2BAA2B;AACxD,SAASC,oBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["InstallTenantFeature","InstallTenantUseCase","AppInstaller","TenantInstalledEventHandler","DependencyResolver","InstallTenantError","InstallationDependencyError","TenantInstalledEvent"],"sources":["index.ts"],"sourcesContent":["export { InstallTenantFeature } from \"./feature.js\";\nexport {\n InstallTenantUseCase,\n AppInstaller,\n TenantInstalledEventHandler,\n type AppInstallationData,\n type TenantInstallationInput\n} from \"./abstractions.js\";\nexport { DependencyResolver } from \"./DependencyResolver.js\";\nexport { InstallTenantError, InstallationDependencyError } from \"./errors.js\";\nexport { TenantInstalledEvent, type TenantInstalledPayload } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,oBAAoB;AAC7B,SACIC,oBAAoB,EACpBC,YAAY,EACZC,2BAA2B;AAI/B,SAASC,kBAAkB;AAC3B,SAASC,kBAAkB,EAAEC,2BAA2B;AACxD,SAASC,oBAAoB","ignoreList":[]}
@@ -29,13 +29,13 @@ export declare const UpdateTenantGateway: import("@webiny/di").Abstraction<IUpda
29
29
  export declare namespace UpdateTenantGateway {
30
30
  type Interface = IUpdateTenantGateway;
31
31
  }
32
- export declare const TenantBeforeUpdateHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>>;
33
- export declare namespace TenantBeforeUpdateHandler {
32
+ export declare const TenantBeforeUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>>;
33
+ export declare namespace TenantBeforeUpdateEventHandler {
34
34
  type Interface = IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>;
35
35
  type Event = DomainEvent<TenantBeforeUpdatePayload>;
36
36
  }
37
- export declare const TenantAfterUpdateHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantAfterUpdatePayload>>>;
38
- export declare namespace TenantAfterUpdateHandler {
37
+ export declare const TenantAfterUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<TenantAfterUpdatePayload>>>;
38
+ export declare namespace TenantAfterUpdateEventHandler {
39
39
  type Interface = IEventHandler<DomainEvent<TenantAfterUpdatePayload>>;
40
40
  type Event = DomainEvent<TenantAfterUpdatePayload>;
41
41
  }
@@ -2,7 +2,7 @@ import { createAbstraction } from "@webiny/feature/api";
2
2
  export const UpdateTenantUseCase = createAbstraction("UpdateTenantUseCase");
3
3
  export const UpdateTenantRepository = createAbstraction("UpdateTenantRepository");
4
4
  export const UpdateTenantGateway = createAbstraction("UpdateTenantGateway");
5
- export const TenantBeforeUpdateHandler = createAbstraction("TenantBeforeUpdateHandler");
6
- export const TenantAfterUpdateHandler = createAbstraction("TenantAfterUpdateHandler");
5
+ export const TenantBeforeUpdateEventHandler = createAbstraction("TenantBeforeUpdateEventHandler");
6
+ export const TenantAfterUpdateEventHandler = createAbstraction("TenantAfterUpdateEventHandler");
7
7
 
8
8
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","UpdateTenantUseCase","UpdateTenantRepository","UpdateTenantGateway","TenantBeforeUpdateHandler","TenantAfterUpdateHandler"],"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 TenantBeforeUpdateHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>\n>(\"TenantBeforeUpdateHandler\");\n\nexport namespace TenantBeforeUpdateHandler {\n export type Interface = IEventHandler<DomainEvent<TenantBeforeUpdatePayload>>;\n export type Event = DomainEvent<TenantBeforeUpdatePayload>;\n}\n\nexport const TenantAfterUpdateHandler = createAbstraction<\n IEventHandler<DomainEvent<TenantAfterUpdatePayload>>\n>(\"TenantAfterUpdateHandler\");\n\nexport namespace TenantAfterUpdateHandler {\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,yBAAyB,GAAGJ,iBAAiB,CAExD,2BAA2B,CAAC;AAO9B,OAAO,MAAMK,wBAAwB,GAAGL,iBAAiB,CAEvD,0BAA0B,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\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,15 +1,15 @@
1
1
  import { DomainEvent } from "../../eventPublisher/index.js";
2
- import { TenantBeforeUpdateHandler, TenantAfterUpdateHandler } from "./abstractions.js";
2
+ import { TenantBeforeUpdateEventHandler, TenantAfterUpdateEventHandler } from "./abstractions.js";
3
3
  export class TenantBeforeUpdateEvent extends DomainEvent {
4
4
  eventType = "tenant.beforeUpdate";
5
5
  getHandlerAbstraction() {
6
- return TenantBeforeUpdateHandler;
6
+ return TenantBeforeUpdateEventHandler;
7
7
  }
8
8
  }
9
9
  export class TenantAfterUpdateEvent extends DomainEvent {
10
10
  eventType = "tenant.afterUpdate";
11
11
  getHandlerAbstraction() {
12
- return TenantAfterUpdateHandler;
12
+ return TenantAfterUpdateEventHandler;
13
13
  }
14
14
  }
15
15
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","TenantBeforeUpdateHandler","TenantAfterUpdateHandler","TenantBeforeUpdateEvent","eventType","getHandlerAbstraction","TenantAfterUpdateEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport { TenantBeforeUpdateHandler, TenantAfterUpdateHandler } from \"./abstractions.js\";\n\nexport interface TenantBeforeUpdatePayload {\n tenant: Tenant;\n inputData: Record<string, any>;\n updateData: Partial<Tenant>;\n}\n\nexport interface TenantAfterUpdatePayload {\n tenant: Tenant;\n inputData: Record<string, any>;\n}\n\nexport class TenantBeforeUpdateEvent extends DomainEvent<TenantBeforeUpdatePayload> {\n eventType = \"tenant.beforeUpdate\" as const;\n\n getHandlerAbstraction() {\n return TenantBeforeUpdateHandler;\n }\n}\n\nexport class TenantAfterUpdateEvent extends DomainEvent<TenantAfterUpdatePayload> {\n eventType = \"tenant.afterUpdate\" as const;\n\n getHandlerAbstraction() {\n return TenantAfterUpdateHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW;AAEpB,SAASC,yBAAyB,EAAEC,wBAAwB;AAa5D,OAAO,MAAMC,uBAAuB,SAASH,WAAW,CAA4B;EAChFI,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,yBAAyB;EACpC;AACJ;AAEA,OAAO,MAAMK,sBAAsB,SAASN,WAAW,CAA2B;EAC9EI,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,wBAAwB;EACnC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","TenantBeforeUpdateEventHandler","TenantAfterUpdateEventHandler","TenantBeforeUpdateEvent","eventType","getHandlerAbstraction","TenantAfterUpdateEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/types/tenancy.js\";\nimport { TenantBeforeUpdateEventHandler, TenantAfterUpdateEventHandler } from \"./abstractions.js\";\n\nexport interface TenantBeforeUpdatePayload {\n tenant: Tenant;\n inputData: Record<string, any>;\n updateData: Partial<Tenant>;\n}\n\nexport interface TenantAfterUpdatePayload {\n tenant: Tenant;\n inputData: Record<string, any>;\n}\n\nexport class TenantBeforeUpdateEvent extends DomainEvent<TenantBeforeUpdatePayload> {\n eventType = \"tenant.beforeUpdate\" as const;\n\n getHandlerAbstraction() {\n return TenantBeforeUpdateEventHandler;\n }\n}\n\nexport class TenantAfterUpdateEvent extends DomainEvent<TenantAfterUpdatePayload> {\n eventType = \"tenant.afterUpdate\" as const;\n\n getHandlerAbstraction() {\n return TenantAfterUpdateEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW;AAEpB,SAASC,8BAA8B,EAAEC,6BAA6B;AAatE,OAAO,MAAMC,uBAAuB,SAASH,WAAW,CAA4B;EAChFI,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,8BAA8B;EACzC;AACJ;AAEA,OAAO,MAAMK,sBAAsB,SAASN,WAAW,CAA2B;EAC9EI,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,6BAA6B;EACxC;AACJ","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  export { UpdateTenantFeature } from "./feature.js";
2
- export { UpdateTenantUseCase, UpdateTenantRepository, UpdateTenantGateway, TenantBeforeUpdateHandler, TenantAfterUpdateHandler } from "./abstractions.js";
2
+ export { UpdateTenantUseCase, UpdateTenantRepository, UpdateTenantGateway, TenantBeforeUpdateEventHandler, TenantAfterUpdateEventHandler } from "./abstractions.js";
3
3
  export { TenantBeforeUpdateEvent, TenantAfterUpdateEvent } from "./events.js";
@@ -1,5 +1,5 @@
1
1
  export { UpdateTenantFeature } from "./feature.js";
2
- export { UpdateTenantUseCase, UpdateTenantRepository, UpdateTenantGateway, TenantBeforeUpdateHandler, TenantAfterUpdateHandler } from "./abstractions.js";
2
+ export { UpdateTenantUseCase, UpdateTenantRepository, UpdateTenantGateway, TenantBeforeUpdateEventHandler, TenantAfterUpdateEventHandler } from "./abstractions.js";
3
3
  export { TenantBeforeUpdateEvent, TenantAfterUpdateEvent } from "./events.js";
4
4
 
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["UpdateTenantFeature","UpdateTenantUseCase","UpdateTenantRepository","UpdateTenantGateway","TenantBeforeUpdateHandler","TenantAfterUpdateHandler","TenantBeforeUpdateEvent","TenantAfterUpdateEvent"],"sources":["index.ts"],"sourcesContent":["export { UpdateTenantFeature } from \"./feature.js\";\nexport {\n UpdateTenantUseCase,\n UpdateTenantRepository,\n UpdateTenantGateway,\n TenantBeforeUpdateHandler,\n TenantAfterUpdateHandler\n} from \"./abstractions.js\";\nexport { TenantBeforeUpdateEvent, TenantAfterUpdateEvent } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,mBAAmB;AAC5B,SACIC,mBAAmB,EACnBC,sBAAsB,EACtBC,mBAAmB,EACnBC,yBAAyB,EACzBC,wBAAwB;AAE5B,SAASC,uBAAuB,EAAEC,sBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["UpdateTenantFeature","UpdateTenantUseCase","UpdateTenantRepository","UpdateTenantGateway","TenantBeforeUpdateEventHandler","TenantAfterUpdateEventHandler","TenantBeforeUpdateEvent","TenantAfterUpdateEvent"],"sources":["index.ts"],"sourcesContent":["export { UpdateTenantFeature } from \"./feature.js\";\nexport {\n UpdateTenantUseCase,\n UpdateTenantRepository,\n UpdateTenantGateway,\n TenantBeforeUpdateEventHandler,\n TenantAfterUpdateEventHandler\n} from \"./abstractions.js\";\nexport { TenantBeforeUpdateEvent, TenantAfterUpdateEvent } from \"./events.js\";\n"],"mappings":"AAAA,SAASA,mBAAmB;AAC5B,SACIC,mBAAmB,EACnBC,sBAAsB,EACtBC,mBAAmB,EACnBC,8BAA8B,EAC9BC,6BAA6B;AAEjC,SAASC,uBAAuB,EAAEC,sBAAsB","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":"AAAA,SAASA,KAAK,QAAQ,eAAe;AACrC,SAASC,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,aAAa;AACtB,SAASC,eAAe;AACxB,SAASC,cAAc;AACvB,SAASC,iBAAiB,IAAIC,kBAAkB;AAChD,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SACIC,kBAAkB,EAClBC,eAAe,EACfC,mBAAmB;AAEvB,SAASC,qBAAqB,EAAEC,oBAAoB;AAKpD,MAAMC,qBAAqB,CAAyC;EAChEC,WAAWA,CACCC,aAAsC,EACtCC,eAA0C,EAC1CC,cAAwC,EACxCC,UAA0C,EACpD;IAAA,KAJUH,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,UAA0C,GAA1CA,UAA0C;EACnD;EAEH,MAAMC,OAAOA,CAACC,KAAsB,EAAwD;IACxF;IACA,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACL,eAAe,CAACM,aAAa,CAAC,iBAAiB,CAAC;IAC9E,IAAI,CAACD,UAAU,EAAE;MACb,OAAOrB,MAAM,CAACuB,IAAI,CAAC,IAAIf,kBAAkB,CAAC,CAAC,CAAC;IAChD;;IAEA;IACA,MAAMgB,UAAU,GAAGjB,oBAAoB,CAACkB,SAAS,CAACL,KAAK,CAAC;IACxD,IAAI,CAACI,UAAU,CAACE,OAAO,EAAE;MACrB,OAAO1B,MAAM,CAACuB,IAAI,CAAC,IAAIb,mBAAmB,CAACc,UAAU,CAACG,KAAK,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;IACnF;IAEA,MAAMC,IAAI,GAAGN,UAAU,CAACM,IAAI;;IAE5B;IACA,MAAMC,kBAAkB,GAAG,MAAM,IAAI,CAACb,UAAU,CAACc,GAAG,CAAC;MAAEC,KAAK,EAAEH,IAAI,CAACG;IAAM,CAAC,CAAC;IAC3E,IAAIF,kBAAkB,CAACG,IAAI,CAAC,CAAC,EAAE;MAC3B;MACA,OAAOlC,MAAM,CAACuB,IAAI,CAAC,IAAId,eAAe,CAACqB,IAAI,CAACG,KAAK,CAAC,CAAC;IACvD;IAEA,IAAIF,kBAAkB,CAACJ,KAAK,CAACQ,IAAI,KAAK,oBAAoB,EAAE;MACxD,OAAOnC,MAAM,CAACuB,IAAI,CAACQ,kBAAkB,CAACJ,KAAK,CAAC;IAChD;;IAEA;IACA,MAAMS,EAAE,GAAGN,IAAI,CAACM,EAAE,IAAItC,KAAK,CAAC,CAAC;;IAE7B;IACA,MAAMuC,WAAW,GAAG,IAAI,CAACC,cAAc,CAACR,IAAI,CAAC;;IAE7C;IACA,MAAMS,MAAM,GAAG,IAAI,CAACxB,aAAa,CAACyB,SAAS,CAAC,CAAC,CAACJ,EAAE;IAChD,MAAMK,QAAQ,GAAG,IAAI,CAACzB,eAAe,CAAC0B,WAAW,CAAC,CAAC;IAEnD,IAAIC,SAA2B,GAAG,IAAI;IACtC,IAAIF,QAAQ,EAAE;MACVE,SAAS,GAAG;QACRP,EAAE,EAAEK,QAAQ,CAACL,EAAE;QACfC,WAAW,EAAEI,QAAQ,CAACJ,WAAW;QACjCO,IAAI,EAAEH,QAAQ,CAACG;MACnB,CAAC;IACL;;IAEA;IACA,MAAMC,IAAe,GAAG;MACpB,GAAGf,IAAI;MACPM,EAAE;MACFH,KAAK,EAAEH,IAAI,CAACG,KAAK;MACjBI,WAAW;MACXS,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACnCL,SAAS;MACTJ;IACJ,CAAC;;IAED;IACA,MAAM,IAAI,CAACtB,cAAc,CAACgC,OAAO,CAAC,IAAItC,qBAAqB,CAAC;MAAEkC,IAAI;MAAEzB,KAAK,EAAEU;IAAK,CAAC,CAAC,CAAC;;IAEnF;IACA,MAAMoB,MAAM,GAAG,MAAM,IAAI,CAAChC,UAAU,CAACiC,MAAM,CAACN,IAAI,CAAC;IACjD,IAAIK,MAAM,CAACE,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOpD,MAAM,CAACuB,IAAI,CAAC2B,MAAM,CAACvB,KAAK,CAAC;IACpC;;IAEA;IACA,MAAM,IAAI,CAACV,cAAc,CAACgC,OAAO,CAC7B,IAAIrC,oBAAoB,CAAC;MAAEiC,IAAI,EAAEK,MAAM,CAACG,KAAK;MAAEjC,KAAK,EAAEU;IAAK,CAAC,CAChE,CAAC;IAED,OAAO9B,MAAM,CAACsD,EAAE,CAACJ,MAAM,CAACG,KAAK,CAAC;EAClC;EAEQf,cAAcA,CAACR,IAAqB,EAAU;IAClD;IACA;IACA,IAAIA,IAAI,CAACO,WAAW,EAAE;MAClB,OAAOP,IAAI,CAACO,WAAW;IAC3B;IAEA,IAAIP,IAAI,CAACyB,SAAS,IAAIzB,IAAI,CAAC0B,QAAQ,EAAE;MACjC,OAAO,GAAG1B,IAAI,CAACyB,SAAS,IAAI,EAAE,IAAIzB,IAAI,CAAC0B,QAAQ,IAAI,EAAE,EAAE,CAACC,IAAI,CAAC,CAAC;IAClE;IAEA,IAAI3B,IAAI,CAACG,KAAK,EAAE;MACZ,OAAOH,IAAI,CAACG,KAAK;IACrB;IAEA,OAAO,sBAAsB;EACjC;AACJ;AAEA,OAAO,MAAM7B,iBAAiB,GAAGL,oBAAoB,CAAC;EAClD2D,WAAW,EAAErD,kBAAkB;EAC/BsD,cAAc,EAAE9C,qBAAqB;EACrC+C,YAAY,EAAE,CAAC3D,aAAa,EAAEC,eAAe,EAAEC,cAAc,EAAEG,oBAAoB;AACvF,CAAC,CAAC","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":[]}
@@ -5,8 +5,8 @@ export declare class UserBeforeCreateEvent extends DomainEvent<UserBeforeCreateP
5
5
  eventType: "user.beforeCreate";
6
6
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserBeforeCreateEvent>>;
7
7
  }
8
- export declare const UserBeforeCreateHandler: import("@webiny/di").Abstraction<IEventHandler<UserBeforeCreateEvent>>;
9
- export declare namespace UserBeforeCreateHandler {
8
+ export declare const UserBeforeCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserBeforeCreateEvent>>;
9
+ export declare namespace UserBeforeCreateEventHandler {
10
10
  type Interface = IEventHandler<UserBeforeCreateEvent>;
11
11
  type Event = UserBeforeCreateEvent;
12
12
  }
@@ -14,8 +14,8 @@ export declare class UserAfterCreateEvent extends DomainEvent<UserAfterCreatePay
14
14
  eventType: "user.afterCreate";
15
15
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserAfterCreateEvent>>;
16
16
  }
17
- export declare const UserAfterCreateHandler: import("@webiny/di").Abstraction<IEventHandler<UserAfterCreateEvent>>;
18
- export declare namespace UserAfterCreateHandler {
17
+ export declare const UserAfterCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserAfterCreateEvent>>;
18
+ export declare namespace UserAfterCreateEventHandler {
19
19
  type Interface = IEventHandler<UserAfterCreateEvent>;
20
20
  type Event = UserAfterCreateEvent;
21
21
  }
@@ -4,17 +4,17 @@ import { DomainEvent } from "../../eventPublisher/index.js";
4
4
  export class UserBeforeCreateEvent extends DomainEvent {
5
5
  eventType = "user.beforeCreate";
6
6
  getHandlerAbstraction() {
7
- return UserBeforeCreateHandler;
7
+ return UserBeforeCreateEventHandler;
8
8
  }
9
9
  }
10
- export const UserBeforeCreateHandler = createAbstraction("UserBeforeCreateHandler");
10
+ export const UserBeforeCreateEventHandler = createAbstraction("UserBeforeCreateEventHandler");
11
11
  // After Create Event
12
12
  export class UserAfterCreateEvent extends DomainEvent {
13
13
  eventType = "user.afterCreate";
14
14
  getHandlerAbstraction() {
15
- return UserAfterCreateHandler;
15
+ return UserAfterCreateEventHandler;
16
16
  }
17
17
  }
18
- export const UserAfterCreateHandler = createAbstraction("UserAfterCreateHandler");
18
+ export const UserAfterCreateEventHandler = createAbstraction("UserAfterCreateEventHandler");
19
19
 
20
20
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","DomainEvent","UserBeforeCreateEvent","eventType","getHandlerAbstraction","UserBeforeCreateHandler","UserAfterCreateEvent","UserAfterCreateHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { UserBeforeCreatePayload, UserAfterCreatePayload } from \"./abstractions.js\";\n\n// Before Create Event\nexport class UserBeforeCreateEvent extends DomainEvent<UserBeforeCreatePayload> {\n eventType = \"user.beforeCreate\" as const;\n\n getHandlerAbstraction() {\n return UserBeforeCreateHandler;\n }\n}\n\nexport const UserBeforeCreateHandler =\n createAbstraction<IEventHandler<UserBeforeCreateEvent>>(\"UserBeforeCreateHandler\");\n\nexport namespace UserBeforeCreateHandler {\n export type Interface = IEventHandler<UserBeforeCreateEvent>;\n export type Event = UserBeforeCreateEvent;\n}\n\n// After Create Event\nexport class UserAfterCreateEvent extends DomainEvent<UserAfterCreatePayload> {\n eventType = \"user.afterCreate\" as const;\n\n getHandlerAbstraction() {\n return UserAfterCreateHandler;\n }\n}\n\nexport const UserAfterCreateHandler =\n createAbstraction<IEventHandler<UserAfterCreateEvent>>(\"UserAfterCreateHandler\");\n\nexport namespace UserAfterCreateHandler {\n export type Interface = IEventHandler<UserAfterCreateEvent>;\n export type Event = UserAfterCreateEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB;AACA,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,uBAAuB;EAClC;AACJ;AAEA,OAAO,MAAMA,uBAAuB,GAChCL,iBAAiB,CAAuC,yBAAyB,CAAC;AAOtF;AACA,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,sBAAsB;EACjC;AACJ;AAEA,OAAO,MAAMA,sBAAsB,GAC/BP,iBAAiB,CAAsC,wBAAwB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","DomainEvent","UserBeforeCreateEvent","eventType","getHandlerAbstraction","UserBeforeCreateEventHandler","UserAfterCreateEvent","UserAfterCreateEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { UserBeforeCreatePayload, UserAfterCreatePayload } from \"./abstractions.js\";\n\n// Before Create Event\nexport class UserBeforeCreateEvent extends DomainEvent<UserBeforeCreatePayload> {\n eventType = \"user.beforeCreate\" as const;\n\n getHandlerAbstraction() {\n return UserBeforeCreateEventHandler;\n }\n}\n\nexport const UserBeforeCreateEventHandler = createAbstraction<IEventHandler<UserBeforeCreateEvent>>(\n \"UserBeforeCreateEventHandler\"\n);\n\nexport namespace UserBeforeCreateEventHandler {\n export type Interface = IEventHandler<UserBeforeCreateEvent>;\n export type Event = UserBeforeCreateEvent;\n}\n\n// After Create Event\nexport class UserAfterCreateEvent extends DomainEvent<UserAfterCreatePayload> {\n eventType = \"user.afterCreate\" as const;\n\n getHandlerAbstraction() {\n return UserAfterCreateEventHandler;\n }\n}\n\nexport const UserAfterCreateEventHandler = createAbstraction<IEventHandler<UserAfterCreateEvent>>(\n \"UserAfterCreateEventHandler\"\n);\n\nexport namespace UserAfterCreateEventHandler {\n export type Interface = IEventHandler<UserAfterCreateEvent>;\n export type Event = UserAfterCreateEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB;AACA,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;AAEA,OAAO,MAAMA,4BAA4B,GAAGL,iBAAiB,CACzD,8BACJ,CAAC;AAOD;AACA,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,2BAA2B;EACtC;AACJ;AAEA,OAAO,MAAMA,2BAA2B,GAAGP,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
@@ -8,40 +8,8 @@ export declare const createUserValidation: z.ZodObject<{
8
8
  avatar: z.ZodNullable<z.ZodOptional<z.ZodObject<{
9
9
  id: z.ZodString;
10
10
  src: z.ZodString;
11
- }, "strip", z.ZodTypeAny, {
12
- id: string;
13
- src: string;
14
- }, {
15
- id: string;
16
- src: string;
17
- }>>>;
18
- roles: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
19
- teams: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
11
+ }, z.core.$strip>>>;
12
+ roles: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
13
+ teams: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
20
14
  external: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
21
- }, "strip", z.ZodTypeAny, {
22
- email: string;
23
- external: boolean;
24
- roles: string[];
25
- teams: string[];
26
- firstName?: string | undefined;
27
- lastName?: string | undefined;
28
- id?: string | undefined;
29
- displayName?: string | undefined;
30
- avatar?: {
31
- id: string;
32
- src: string;
33
- } | null | undefined;
34
- }, {
35
- email: string;
36
- firstName?: string | undefined;
37
- lastName?: string | undefined;
38
- external?: boolean | undefined;
39
- id?: string | undefined;
40
- displayName?: string | undefined;
41
- roles?: string[] | undefined;
42
- teams?: string[] | undefined;
43
- avatar?: {
44
- id: string;
45
- src: string;
46
- } | null | undefined;
47
- }>;
15
+ }, z.core.$strip>;
@@ -5,8 +5,8 @@ export declare class UserBeforeDeleteEvent extends DomainEvent<UserBeforeDeleteP
5
5
  eventType: "user.beforeDelete";
6
6
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserBeforeDeleteEvent>>;
7
7
  }
8
- export declare const UserBeforeDeleteHandler: import("@webiny/di").Abstraction<IEventHandler<UserBeforeDeleteEvent>>;
9
- export declare namespace UserBeforeDeleteHandler {
8
+ export declare const UserBeforeDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserBeforeDeleteEvent>>;
9
+ export declare namespace UserBeforeDeleteEventHandler {
10
10
  type Interface = IEventHandler<UserBeforeDeleteEvent>;
11
11
  type Event = UserBeforeDeleteEvent;
12
12
  }
@@ -14,8 +14,8 @@ export declare class UserAfterDeleteEvent extends DomainEvent<UserAfterDeletePay
14
14
  eventType: "user.afterDelete";
15
15
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserAfterDeleteEvent>>;
16
16
  }
17
- export declare const UserAfterDeleteHandler: import("@webiny/di").Abstraction<IEventHandler<UserAfterDeleteEvent>>;
18
- export declare namespace UserAfterDeleteHandler {
17
+ export declare const UserAfterDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserAfterDeleteEvent>>;
18
+ export declare namespace UserAfterDeleteEventHandler {
19
19
  type Interface = IEventHandler<UserAfterDeleteEvent>;
20
20
  type Event = UserAfterDeleteEvent;
21
21
  }
@@ -4,17 +4,17 @@ import { DomainEvent } from "../../eventPublisher/index.js";
4
4
  export class UserBeforeDeleteEvent extends DomainEvent {
5
5
  eventType = "user.beforeDelete";
6
6
  getHandlerAbstraction() {
7
- return UserBeforeDeleteHandler;
7
+ return UserBeforeDeleteEventHandler;
8
8
  }
9
9
  }
10
- export const UserBeforeDeleteHandler = createAbstraction("UserBeforeDeleteHandler");
10
+ export const UserBeforeDeleteEventHandler = createAbstraction("UserBeforeDeleteEventHandler");
11
11
  // After Delete Event
12
12
  export class UserAfterDeleteEvent extends DomainEvent {
13
13
  eventType = "user.afterDelete";
14
14
  getHandlerAbstraction() {
15
- return UserAfterDeleteHandler;
15
+ return UserAfterDeleteEventHandler;
16
16
  }
17
17
  }
18
- export const UserAfterDeleteHandler = createAbstraction("UserAfterDeleteHandler");
18
+ export const UserAfterDeleteEventHandler = createAbstraction("UserAfterDeleteEventHandler");
19
19
 
20
20
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","DomainEvent","UserBeforeDeleteEvent","eventType","getHandlerAbstraction","UserBeforeDeleteHandler","UserAfterDeleteEvent","UserAfterDeleteHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { UserBeforeDeletePayload, UserAfterDeletePayload } from \"./abstractions.js\";\n\n// Before Delete Event\nexport class UserBeforeDeleteEvent extends DomainEvent<UserBeforeDeletePayload> {\n eventType = \"user.beforeDelete\" as const;\n\n getHandlerAbstraction() {\n return UserBeforeDeleteHandler;\n }\n}\n\nexport const UserBeforeDeleteHandler =\n createAbstraction<IEventHandler<UserBeforeDeleteEvent>>(\"UserBeforeDeleteHandler\");\n\nexport namespace UserBeforeDeleteHandler {\n export type Interface = IEventHandler<UserBeforeDeleteEvent>;\n export type Event = UserBeforeDeleteEvent;\n}\n\n// After Delete Event\nexport class UserAfterDeleteEvent extends DomainEvent<UserAfterDeletePayload> {\n eventType = \"user.afterDelete\" as const;\n\n getHandlerAbstraction() {\n return UserAfterDeleteHandler;\n }\n}\n\nexport const UserAfterDeleteHandler =\n createAbstraction<IEventHandler<UserAfterDeleteEvent>>(\"UserAfterDeleteHandler\");\n\nexport namespace UserAfterDeleteHandler {\n export type Interface = IEventHandler<UserAfterDeleteEvent>;\n export type Event = UserAfterDeleteEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB;AACA,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,uBAAuB;EAClC;AACJ;AAEA,OAAO,MAAMA,uBAAuB,GAChCL,iBAAiB,CAAuC,yBAAyB,CAAC;AAOtF;AACA,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,sBAAsB;EACjC;AACJ;AAEA,OAAO,MAAMA,sBAAsB,GAC/BP,iBAAiB,CAAsC,wBAAwB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","DomainEvent","UserBeforeDeleteEvent","eventType","getHandlerAbstraction","UserBeforeDeleteEventHandler","UserAfterDeleteEvent","UserAfterDeleteEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { UserBeforeDeletePayload, UserAfterDeletePayload } from \"./abstractions.js\";\n\n// Before Delete Event\nexport class UserBeforeDeleteEvent extends DomainEvent<UserBeforeDeletePayload> {\n eventType = \"user.beforeDelete\" as const;\n\n getHandlerAbstraction() {\n return UserBeforeDeleteEventHandler;\n }\n}\n\nexport const UserBeforeDeleteEventHandler = createAbstraction<IEventHandler<UserBeforeDeleteEvent>>(\n \"UserBeforeDeleteEventHandler\"\n);\n\nexport namespace UserBeforeDeleteEventHandler {\n export type Interface = IEventHandler<UserBeforeDeleteEvent>;\n export type Event = UserBeforeDeleteEvent;\n}\n\n// After Delete Event\nexport class UserAfterDeleteEvent extends DomainEvent<UserAfterDeletePayload> {\n eventType = \"user.afterDelete\" as const;\n\n getHandlerAbstraction() {\n return UserAfterDeleteEventHandler;\n }\n}\n\nexport const UserAfterDeleteEventHandler = createAbstraction<IEventHandler<UserAfterDeleteEvent>>(\n \"UserAfterDeleteEventHandler\"\n);\n\nexport namespace UserAfterDeleteEventHandler {\n export type Interface = IEventHandler<UserAfterDeleteEvent>;\n export type Event = UserAfterDeleteEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB;AACA,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;AAEA,OAAO,MAAMA,4BAA4B,GAAGL,iBAAiB,CACzD,8BACJ,CAAC;AAOD;AACA,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,2BAA2B;EACtC;AACJ;AAEA,OAAO,MAAMA,2BAA2B,GAAGP,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
@@ -1,11 +1,11 @@
1
- import { AfterLoginHandler } from "../../../features/security/login/index.js";
1
+ import { AfterLoginEventHandler } from "../../../features/security/login/index.js";
2
2
  import { IdentityContext } from "../../../features/security/IdentityContext/index.js";
3
3
  import { ListRolesUseCase } from "../../../features/security/roles/ListRoles/index.js";
4
4
  import { ListTeamsUseCase } from "../../../features/security/teams/ListTeams/index.js";
5
5
  import { GetUserUseCase } from "../../../features/users/GetUser/index.js";
6
6
  import { CreateUserUseCase } from "../../../features/users/CreateUser/index.js";
7
7
  import { UpdateUserUseCase } from "../../../features/users/UpdateUser/index.js";
8
- declare class ExternalIdpUserSyncHandlerImpl implements AfterLoginHandler.Interface {
8
+ declare class ExternalIdpUserSyncHandlerImpl implements AfterLoginEventHandler.Interface {
9
9
  private identityContext;
10
10
  private getUserUseCase;
11
11
  private createUserUseCase;
@@ -13,7 +13,7 @@ declare class ExternalIdpUserSyncHandlerImpl implements AfterLoginHandler.Interf
13
13
  private listRolesUseCase;
14
14
  private listTeamsUseCase;
15
15
  constructor(identityContext: IdentityContext.Interface, getUserUseCase: GetUserUseCase.Interface, createUserUseCase: CreateUserUseCase.Interface, updateUserUseCase: UpdateUserUseCase.Interface, listRolesUseCase: ListRolesUseCase.Interface, listTeamsUseCase: ListTeamsUseCase.Interface);
16
- handle(event: AfterLoginHandler.Event): Promise<void>;
16
+ handle(event: AfterLoginEventHandler.Event): Promise<void>;
17
17
  }
18
18
  export declare const ExternalIdpUserSyncHandler: import("@webiny/di").Implementation<typeof ExternalIdpUserSyncHandlerImpl>;
19
19
  export {};
@@ -1,5 +1,5 @@
1
1
  import { createImplementation } from "@webiny/feature/api";
2
- import { AfterLoginHandler } from "../../security/login/index.js";
2
+ import { AfterLoginEventHandler } from "../../security/login/index.js";
3
3
  import { IdentityContext } from "../../security/IdentityContext/index.js";
4
4
  import { ListRolesUseCase } from "../../security/roles/ListRoles/index.js";
5
5
  import { ListTeamsUseCase } from "../../security/teams/ListTeams/index.js";
@@ -81,7 +81,7 @@ class ExternalIdpUserSyncHandlerImpl {
81
81
  }
82
82
  }
83
83
  export const ExternalIdpUserSyncHandler = createImplementation({
84
- abstraction: AfterLoginHandler,
84
+ abstraction: AfterLoginEventHandler,
85
85
  implementation: ExternalIdpUserSyncHandlerImpl,
86
86
  dependencies: [IdentityContext, GetUserUseCase, CreateUserUseCase, UpdateUserUseCase, ListRolesUseCase, ListTeamsUseCase]
87
87
  });
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","AfterLoginHandler","IdentityContext","ListRolesUseCase","ListTeamsUseCase","GetUserUseCase","CreateUserUseCase","UpdateUserUseCase","ExternalIdpUserSyncHandlerImpl","constructor","identityContext","getUserUseCase","createUserUseCase","updateUserUseCase","listRolesUseCase","listTeamsUseCase","handle","event","identity","payload","profile","external","withoutAuthorization","getUserResult","execute","id","data","displayName","email","firstName","lastName","roles","teams","roleSlugs","length","listRolesResult","where","slug_in","isOk","value","map","role","teamSlugs","listTeamsResult","team","ExternalIdpUserSyncHandler","abstraction","implementation","dependencies"],"sources":["ExternalIdpUserSyncHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AfterLoginHandler } from \"~/features/security/login/index.js\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport { ListRolesUseCase } from \"~/features/security/roles/ListRoles/index.js\";\nimport { ListTeamsUseCase } from \"~/features/security/teams/ListTeams/index.js\";\nimport { GetUserUseCase } from \"~/features/users/GetUser/index.js\";\nimport { CreateUserUseCase } from \"~/features/users/CreateUser/index.js\";\nimport { UpdateUserUseCase } from \"~/features/users/UpdateUser/index.js\";\n\nclass ExternalIdpUserSyncHandlerImpl implements AfterLoginHandler.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private getUserUseCase: GetUserUseCase.Interface,\n private createUserUseCase: CreateUserUseCase.Interface,\n private updateUserUseCase: UpdateUserUseCase.Interface,\n private listRolesUseCase: ListRolesUseCase.Interface,\n private listTeamsUseCase: ListTeamsUseCase.Interface\n ) {}\n\n async handle(event: AfterLoginHandler.Event): Promise<void> {\n const { identity } = event.payload;\n\n // We only sync external identities\n if (!identity.profile.external) {\n return;\n }\n\n await this.identityContext.withoutAuthorization(async () => {\n // Check if user exists\n const getUserResult = await this.getUserUseCase.execute({ id: identity.id });\n\n // Prepare user data\n const id = identity.id;\n\n const data = {\n displayName: identity.displayName,\n email: identity.profile.email,\n firstName: identity.profile.firstName || \"\",\n lastName: identity.profile.lastName || \"\",\n roles: [] as string[],\n teams: [] as string[],\n external: true\n };\n\n // Resolve roles\n const roleSlugs = identity.roles;\n if (roleSlugs.length > 0) {\n const listRolesResult = await this.listRolesUseCase.execute({\n where: { slug_in: roleSlugs }\n });\n if (listRolesResult.isOk()) {\n data.roles = listRolesResult.value.map(role => role.id);\n }\n }\n\n // Resolve teams\n const teamSlugs = identity.teams;\n if (teamSlugs.length > 0) {\n const listTeamsResult = await this.listTeamsUseCase.execute({\n where: { slug_in: teamSlugs }\n });\n if (listTeamsResult.isOk()) {\n data.teams = listTeamsResult.value.map(team => team.id);\n }\n }\n\n // Update or create user\n if (getUserResult.isOk()) {\n await this.updateUserUseCase.execute(identity.id, data);\n return;\n }\n\n await this.createUserUseCase.execute({ id, ...data });\n });\n }\n}\n\nexport const ExternalIdpUserSyncHandler = createImplementation({\n abstraction: AfterLoginHandler,\n implementation: ExternalIdpUserSyncHandlerImpl,\n dependencies: [\n IdentityContext,\n GetUserUseCase,\n CreateUserUseCase,\n UpdateUserUseCase,\n ListRolesUseCase,\n ListTeamsUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createImplementation","AfterLoginEventHandler","IdentityContext","ListRolesUseCase","ListTeamsUseCase","GetUserUseCase","CreateUserUseCase","UpdateUserUseCase","ExternalIdpUserSyncHandlerImpl","constructor","identityContext","getUserUseCase","createUserUseCase","updateUserUseCase","listRolesUseCase","listTeamsUseCase","handle","event","identity","payload","profile","external","withoutAuthorization","getUserResult","execute","id","data","displayName","email","firstName","lastName","roles","teams","roleSlugs","length","listRolesResult","where","slug_in","isOk","value","map","role","teamSlugs","listTeamsResult","team","ExternalIdpUserSyncHandler","abstraction","implementation","dependencies"],"sources":["ExternalIdpUserSyncHandler.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AfterLoginEventHandler } from \"~/features/security/login/index.js\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport { ListRolesUseCase } from \"~/features/security/roles/ListRoles/index.js\";\nimport { ListTeamsUseCase } from \"~/features/security/teams/ListTeams/index.js\";\nimport { GetUserUseCase } from \"~/features/users/GetUser/index.js\";\nimport { CreateUserUseCase } from \"~/features/users/CreateUser/index.js\";\nimport { UpdateUserUseCase } from \"~/features/users/UpdateUser/index.js\";\n\nclass ExternalIdpUserSyncHandlerImpl implements AfterLoginEventHandler.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private getUserUseCase: GetUserUseCase.Interface,\n private createUserUseCase: CreateUserUseCase.Interface,\n private updateUserUseCase: UpdateUserUseCase.Interface,\n private listRolesUseCase: ListRolesUseCase.Interface,\n private listTeamsUseCase: ListTeamsUseCase.Interface\n ) {}\n\n async handle(event: AfterLoginEventHandler.Event): Promise<void> {\n const { identity } = event.payload;\n\n // We only sync external identities\n if (!identity.profile.external) {\n return;\n }\n\n await this.identityContext.withoutAuthorization(async () => {\n // Check if user exists\n const getUserResult = await this.getUserUseCase.execute({ id: identity.id });\n\n // Prepare user data\n const id = identity.id;\n\n const data = {\n displayName: identity.displayName,\n email: identity.profile.email,\n firstName: identity.profile.firstName || \"\",\n lastName: identity.profile.lastName || \"\",\n roles: [] as string[],\n teams: [] as string[],\n external: true\n };\n\n // Resolve roles\n const roleSlugs = identity.roles;\n if (roleSlugs.length > 0) {\n const listRolesResult = await this.listRolesUseCase.execute({\n where: { slug_in: roleSlugs }\n });\n if (listRolesResult.isOk()) {\n data.roles = listRolesResult.value.map(role => role.id);\n }\n }\n\n // Resolve teams\n const teamSlugs = identity.teams;\n if (teamSlugs.length > 0) {\n const listTeamsResult = await this.listTeamsUseCase.execute({\n where: { slug_in: teamSlugs }\n });\n if (listTeamsResult.isOk()) {\n data.teams = listTeamsResult.value.map(team => team.id);\n }\n }\n\n // Update or create user\n if (getUserResult.isOk()) {\n await this.updateUserUseCase.execute(identity.id, data);\n return;\n }\n\n await this.createUserUseCase.execute({ id, ...data });\n });\n }\n}\n\nexport const ExternalIdpUserSyncHandler = createImplementation({\n abstraction: AfterLoginEventHandler,\n implementation: ExternalIdpUserSyncHandlerImpl,\n dependencies: [\n IdentityContext,\n GetUserUseCase,\n CreateUserUseCase,\n UpdateUserUseCase,\n ListRolesUseCase,\n ListTeamsUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -23,7 +23,7 @@ class UpdateUserUseCaseImpl {
23
23
  // 2. Validate input
24
24
  const validation = updateUserValidation.safeParse(input);
25
25
  if (!validation.success) {
26
- return Result.fail(new UserValidationError(validation.error.errors[0].message));
26
+ return Result.fail(new UserValidationError(validation.error.issues[0].message));
27
27
  }
28
28
 
29
29
  // If the input contains email, check if it is free to use.
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","Result","IdentityContext","EventPublisher","UpdateUserUseCase","UseCaseAbstraction","AdminUsersRepository","updateUserValidation","NotAuthorizedError","EmailTakenError","UserValidationError","UserBeforeUpdateEvent","UserAfterUpdateEvent","UpdateUserUseCaseImpl","constructor","identityContext","eventPublisher","repository","execute","id","input","permission","getPermission","fail","validation","safeParse","success","error","errors","message","email","existingUserResult","get","isOk","value","getUserResult","isFail","originalUser","updateData","structuredClone","data","publish","user","updatedUser","result","update","ok","abstraction","implementation","dependencies"],"sources":["UpdateUserUseCase.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { UpdateUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\nimport { updateUserValidation } from \"./schema.js\";\nimport {\n NotAuthorizedError,\n EmailTakenError,\n UserValidationError\n} from \"~/features/users/shared/errors.js\";\nimport { UserBeforeUpdateEvent, UserAfterUpdateEvent } from \"./events.js\";\nimport type { AdminUser } from \"~/features/users/shared/types.js\";\nimport type { UpdateUserInput } from \"~/features/users/shared/types.js\";\n\nclass UpdateUserUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: AdminUsersRepository.Interface\n ) {}\n\n async execute(\n id: string,\n input: UpdateUserInput\n ): 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 = updateUserValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new UserValidationError(validation.error.errors[0].message));\n }\n\n // If the input contains email, check if it is free to use.\n if (input.email) {\n const existingUserResult = await this.repository.get({ email: input.email });\n if (existingUserResult.isOk()) {\n if (existingUserResult.value.id !== id) {\n return Result.fail(new EmailTakenError(input.email));\n }\n }\n }\n // 3. Get existing user\n const getUserResult = await this.repository.get({ id });\n if (getUserResult.isFail()) {\n return Result.fail(getUserResult.error);\n }\n\n const originalUser = getUserResult.value;\n\n // 4. Clone update data for event modification\n const updateData = structuredClone(validation.data);\n\n // 5. Publish before event\n await this.eventPublisher.publish(\n new UserBeforeUpdateEvent({ user: originalUser, updateData, input: validation.data })\n );\n\n // 6. Merge updates with existing user\n const updatedUser: AdminUser = {\n ...originalUser,\n ...updateData\n };\n\n // 7. Update user via repository\n const result = await this.repository.update(updatedUser);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n // 8. Publish after event\n await this.eventPublisher.publish(\n new UserAfterUpdateEvent({\n originalUser,\n updatedUser: result.value,\n input: validation.data\n })\n );\n\n return Result.ok(result.value);\n }\n}\n\nexport const UpdateUserUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UpdateUserUseCaseImpl,\n dependencies: [IdentityContext, EventPublisher, AdminUsersRepository]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createImplementation","Result","IdentityContext","EventPublisher","UpdateUserUseCase","UseCaseAbstraction","AdminUsersRepository","updateUserValidation","NotAuthorizedError","EmailTakenError","UserValidationError","UserBeforeUpdateEvent","UserAfterUpdateEvent","UpdateUserUseCaseImpl","constructor","identityContext","eventPublisher","repository","execute","id","input","permission","getPermission","fail","validation","safeParse","success","error","issues","message","email","existingUserResult","get","isOk","value","getUserResult","isFail","originalUser","updateData","structuredClone","data","publish","user","updatedUser","result","update","ok","abstraction","implementation","dependencies"],"sources":["UpdateUserUseCase.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { UpdateUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\nimport { updateUserValidation } from \"./schema.js\";\nimport {\n NotAuthorizedError,\n EmailTakenError,\n UserValidationError\n} from \"~/features/users/shared/errors.js\";\nimport { UserBeforeUpdateEvent, UserAfterUpdateEvent } from \"./events.js\";\nimport type { AdminUser } from \"~/features/users/shared/types.js\";\nimport type { UpdateUserInput } from \"~/features/users/shared/types.js\";\n\nclass UpdateUserUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: AdminUsersRepository.Interface\n ) {}\n\n async execute(\n id: string,\n input: UpdateUserInput\n ): 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 = updateUserValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new UserValidationError(validation.error.issues[0].message));\n }\n\n // If the input contains email, check if it is free to use.\n if (input.email) {\n const existingUserResult = await this.repository.get({ email: input.email });\n if (existingUserResult.isOk()) {\n if (existingUserResult.value.id !== id) {\n return Result.fail(new EmailTakenError(input.email));\n }\n }\n }\n // 3. Get existing user\n const getUserResult = await this.repository.get({ id });\n if (getUserResult.isFail()) {\n return Result.fail(getUserResult.error);\n }\n\n const originalUser = getUserResult.value;\n\n // 4. Clone update data for event modification\n const updateData = structuredClone(validation.data);\n\n // 5. Publish before event\n await this.eventPublisher.publish(\n new UserBeforeUpdateEvent({ user: originalUser, updateData, input: validation.data })\n );\n\n // 6. Merge updates with existing user\n const updatedUser: AdminUser = {\n ...originalUser,\n ...updateData\n };\n\n // 7. Update user via repository\n const result = await this.repository.update(updatedUser);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n // 8. Publish after event\n await this.eventPublisher.publish(\n new UserAfterUpdateEvent({\n originalUser,\n updatedUser: result.value,\n input: validation.data\n })\n );\n\n return Result.ok(result.value);\n }\n}\n\nexport const UpdateUserUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UpdateUserUseCaseImpl,\n dependencies: [IdentityContext, EventPublisher, AdminUsersRepository]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -5,8 +5,8 @@ export declare class UserBeforeUpdateEvent extends DomainEvent<UserBeforeUpdateP
5
5
  eventType: "user.beforeUpdate";
6
6
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserBeforeUpdateEvent>>;
7
7
  }
8
- export declare const UserBeforeUpdateHandler: import("@webiny/di").Abstraction<IEventHandler<UserBeforeUpdateEvent>>;
9
- export declare namespace UserBeforeUpdateHandler {
8
+ export declare const UserBeforeUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserBeforeUpdateEvent>>;
9
+ export declare namespace UserBeforeUpdateEventHandler {
10
10
  type Interface = IEventHandler<UserBeforeUpdateEvent>;
11
11
  type Event = UserBeforeUpdateEvent;
12
12
  }
@@ -14,8 +14,8 @@ export declare class UserAfterUpdateEvent extends DomainEvent<UserAfterUpdatePay
14
14
  eventType: "user.afterUpdate";
15
15
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<UserAfterUpdateEvent>>;
16
16
  }
17
- export declare const UserAfterUpdateHandler: import("@webiny/di").Abstraction<IEventHandler<UserAfterUpdateEvent>>;
18
- export declare namespace UserAfterUpdateHandler {
17
+ export declare const UserAfterUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<UserAfterUpdateEvent>>;
18
+ export declare namespace UserAfterUpdateEventHandler {
19
19
  type Interface = IEventHandler<UserAfterUpdateEvent>;
20
20
  type Event = UserAfterUpdateEvent;
21
21
  }