@webiny/cognito 0.0.0-unstable.0d717d18dd

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 (369) hide show
  1. package/Cognito.d.ts +55 -0
  2. package/Cognito.js +102 -0
  3. package/Cognito.js.map +1 -0
  4. package/LICENSE +21 -0
  5. package/README.md +11 -0
  6. package/admin/Cognito.d.ts +8 -0
  7. package/admin/Cognito.js +50 -0
  8. package/admin/Cognito.js.map +1 -0
  9. package/admin/CognitoLogin.d.ts +7 -0
  10. package/admin/CognitoLogin.js +13 -0
  11. package/admin/CognitoLogin.js.map +1 -0
  12. package/admin/DefaultCognitoSignInConfig.d.ts +23 -0
  13. package/admin/DefaultCognitoSignInConfig.js +51 -0
  14. package/admin/DefaultCognitoSignInConfig.js.map +1 -0
  15. package/admin/Extension.d.ts +2 -0
  16. package/admin/Extension.js +45 -0
  17. package/admin/Extension.js.map +1 -0
  18. package/admin/SecurityPermission.d.ts +2 -0
  19. package/admin/SecurityPermission.js +15 -0
  20. package/admin/SecurityPermission.js.map +1 -0
  21. package/admin/SignInExtension.d.ts +2 -0
  22. package/admin/SignInExtension.js +9 -0
  23. package/admin/SignInExtension.js.map +1 -0
  24. package/admin/domain/permissionsSchema.d.ts +10 -0
  25. package/admin/domain/permissionsSchema.js +18 -0
  26. package/admin/domain/permissionsSchema.js.map +1 -0
  27. package/admin/features/account/getCurrentUser/GetCurrentUserGateway.d.ts +11 -0
  28. package/admin/features/account/getCurrentUser/GetCurrentUserGateway.js +44 -0
  29. package/admin/features/account/getCurrentUser/GetCurrentUserGateway.js.map +1 -0
  30. package/admin/features/account/getCurrentUser/GetCurrentUserUseCase.d.ts +10 -0
  31. package/admin/features/account/getCurrentUser/GetCurrentUserUseCase.js +19 -0
  32. package/admin/features/account/getCurrentUser/GetCurrentUserUseCase.js.map +1 -0
  33. package/admin/features/account/getCurrentUser/abstractions/GetCurrentUserGateway.d.ts +16 -0
  34. package/admin/features/account/getCurrentUser/abstractions/GetCurrentUserGateway.js +5 -0
  35. package/admin/features/account/getCurrentUser/abstractions/GetCurrentUserGateway.js.map +1 -0
  36. package/admin/features/account/getCurrentUser/abstractions/GetCurrentUserUseCase.d.ts +10 -0
  37. package/admin/features/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js +5 -0
  38. package/admin/features/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js.map +1 -0
  39. package/admin/features/account/getCurrentUser/abstractions/index.d.ts +6 -0
  40. package/admin/features/account/getCurrentUser/abstractions/index.js +2 -0
  41. package/admin/features/account/getCurrentUser/feature.d.ts +3 -0
  42. package/admin/features/account/getCurrentUser/feature.js +19 -0
  43. package/admin/features/account/getCurrentUser/feature.js.map +1 -0
  44. package/admin/features/account/getCurrentUser/index.d.ts +1 -0
  45. package/admin/features/account/getCurrentUser/index.js +1 -0
  46. package/admin/features/account/updateCurrentUser/UpdateCurrentUserGateway.d.ts +11 -0
  47. package/admin/features/account/updateCurrentUser/UpdateCurrentUserGateway.js +48 -0
  48. package/admin/features/account/updateCurrentUser/UpdateCurrentUserGateway.js.map +1 -0
  49. package/admin/features/account/updateCurrentUser/UpdateCurrentUserUseCase.d.ts +10 -0
  50. package/admin/features/account/updateCurrentUser/UpdateCurrentUserUseCase.js +19 -0
  51. package/admin/features/account/updateCurrentUser/UpdateCurrentUserUseCase.js.map +1 -0
  52. package/admin/features/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.d.ts +26 -0
  53. package/admin/features/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js +5 -0
  54. package/admin/features/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js.map +1 -0
  55. package/admin/features/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.d.ts +13 -0
  56. package/admin/features/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js +5 -0
  57. package/admin/features/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js.map +1 -0
  58. package/admin/features/account/updateCurrentUser/abstractions/index.d.ts +8 -0
  59. package/admin/features/account/updateCurrentUser/abstractions/index.js +2 -0
  60. package/admin/features/account/updateCurrentUser/feature.d.ts +3 -0
  61. package/admin/features/account/updateCurrentUser/feature.js +19 -0
  62. package/admin/features/account/updateCurrentUser/feature.js.map +1 -0
  63. package/admin/features/account/updateCurrentUser/index.d.ts +1 -0
  64. package/admin/features/account/updateCurrentUser/index.js +1 -0
  65. package/admin/features/permissions/abstractions.d.ts +17 -0
  66. package/admin/features/permissions/abstractions.js +6 -0
  67. package/admin/features/permissions/abstractions.js.map +1 -0
  68. package/admin/features/permissions/feature.d.ts +14 -0
  69. package/admin/features/permissions/feature.js +7 -0
  70. package/admin/features/permissions/feature.js.map +1 -0
  71. package/admin/features/users/createUser/CreateUserGateway.d.ts +11 -0
  72. package/admin/features/users/createUser/CreateUserGateway.js +49 -0
  73. package/admin/features/users/createUser/CreateUserGateway.js.map +1 -0
  74. package/admin/features/users/createUser/CreateUserUseCase.d.ts +10 -0
  75. package/admin/features/users/createUser/CreateUserUseCase.js +18 -0
  76. package/admin/features/users/createUser/CreateUserUseCase.js.map +1 -0
  77. package/admin/features/users/createUser/abstractions/CreateUserGateway.d.ts +21 -0
  78. package/admin/features/users/createUser/abstractions/CreateUserGateway.js +5 -0
  79. package/admin/features/users/createUser/abstractions/CreateUserGateway.js.map +1 -0
  80. package/admin/features/users/createUser/abstractions/CreateUserUseCase.d.ts +14 -0
  81. package/admin/features/users/createUser/abstractions/CreateUserUseCase.js +5 -0
  82. package/admin/features/users/createUser/abstractions/CreateUserUseCase.js.map +1 -0
  83. package/admin/features/users/createUser/abstractions/index.d.ts +2 -0
  84. package/admin/features/users/createUser/abstractions/index.js +2 -0
  85. package/admin/features/users/createUser/feature.d.ts +3 -0
  86. package/admin/features/users/createUser/feature.js +19 -0
  87. package/admin/features/users/createUser/feature.js.map +1 -0
  88. package/admin/features/users/createUser/index.d.ts +2 -0
  89. package/admin/features/users/createUser/index.js +2 -0
  90. package/admin/features/users/deleteUser/DeleteUserGateway.d.ts +11 -0
  91. package/admin/features/users/deleteUser/DeleteUserGateway.js +40 -0
  92. package/admin/features/users/deleteUser/DeleteUserGateway.js.map +1 -0
  93. package/admin/features/users/deleteUser/DeleteUserUseCase.d.ts +10 -0
  94. package/admin/features/users/deleteUser/DeleteUserUseCase.js +18 -0
  95. package/admin/features/users/deleteUser/DeleteUserUseCase.js.map +1 -0
  96. package/admin/features/users/deleteUser/abstractions/DeleteUserGateway.d.ts +11 -0
  97. package/admin/features/users/deleteUser/abstractions/DeleteUserGateway.js +5 -0
  98. package/admin/features/users/deleteUser/abstractions/DeleteUserGateway.js.map +1 -0
  99. package/admin/features/users/deleteUser/abstractions/DeleteUserUseCase.d.ts +11 -0
  100. package/admin/features/users/deleteUser/abstractions/DeleteUserUseCase.js +5 -0
  101. package/admin/features/users/deleteUser/abstractions/DeleteUserUseCase.js.map +1 -0
  102. package/admin/features/users/deleteUser/abstractions/index.d.ts +2 -0
  103. package/admin/features/users/deleteUser/abstractions/index.js +2 -0
  104. package/admin/features/users/deleteUser/feature.d.ts +3 -0
  105. package/admin/features/users/deleteUser/feature.js +19 -0
  106. package/admin/features/users/deleteUser/feature.js.map +1 -0
  107. package/admin/features/users/deleteUser/index.d.ts +2 -0
  108. package/admin/features/users/deleteUser/index.js +2 -0
  109. package/admin/features/users/getUser/GetUserGateway.d.ts +11 -0
  110. package/admin/features/users/getUser/GetUserGateway.js +57 -0
  111. package/admin/features/users/getUser/GetUserGateway.js.map +1 -0
  112. package/admin/features/users/getUser/GetUserUseCase.d.ts +10 -0
  113. package/admin/features/users/getUser/GetUserUseCase.js +18 -0
  114. package/admin/features/users/getUser/GetUserUseCase.js.map +1 -0
  115. package/admin/features/users/getUser/abstractions/GetUserGateway.d.ts +32 -0
  116. package/admin/features/users/getUser/abstractions/GetUserGateway.js +5 -0
  117. package/admin/features/users/getUser/abstractions/GetUserGateway.js.map +1 -0
  118. package/admin/features/users/getUser/abstractions/GetUserUseCase.d.ts +14 -0
  119. package/admin/features/users/getUser/abstractions/GetUserUseCase.js +5 -0
  120. package/admin/features/users/getUser/abstractions/GetUserUseCase.js.map +1 -0
  121. package/admin/features/users/getUser/abstractions/index.d.ts +2 -0
  122. package/admin/features/users/getUser/abstractions/index.js +2 -0
  123. package/admin/features/users/getUser/feature.d.ts +3 -0
  124. package/admin/features/users/getUser/feature.js +19 -0
  125. package/admin/features/users/getUser/feature.js.map +1 -0
  126. package/admin/features/users/getUser/index.d.ts +2 -0
  127. package/admin/features/users/getUser/index.js +2 -0
  128. package/admin/features/users/listUsers/ListUsersGateway.d.ts +11 -0
  129. package/admin/features/users/listUsers/ListUsersGateway.js +39 -0
  130. package/admin/features/users/listUsers/ListUsersGateway.js.map +1 -0
  131. package/admin/features/users/listUsers/ListUsersUseCase.d.ts +10 -0
  132. package/admin/features/users/listUsers/ListUsersUseCase.js +18 -0
  133. package/admin/features/users/listUsers/ListUsersUseCase.js.map +1 -0
  134. package/admin/features/users/listUsers/abstractions/ListUsersGateway.d.ts +17 -0
  135. package/admin/features/users/listUsers/abstractions/ListUsersGateway.js +5 -0
  136. package/admin/features/users/listUsers/abstractions/ListUsersGateway.js.map +1 -0
  137. package/admin/features/users/listUsers/abstractions/ListUsersUseCase.d.ts +10 -0
  138. package/admin/features/users/listUsers/abstractions/ListUsersUseCase.js +5 -0
  139. package/admin/features/users/listUsers/abstractions/ListUsersUseCase.js.map +1 -0
  140. package/admin/features/users/listUsers/abstractions/index.d.ts +2 -0
  141. package/admin/features/users/listUsers/abstractions/index.js +2 -0
  142. package/admin/features/users/listUsers/feature.d.ts +3 -0
  143. package/admin/features/users/listUsers/feature.js +19 -0
  144. package/admin/features/users/listUsers/feature.js.map +1 -0
  145. package/admin/features/users/listUsers/index.d.ts +2 -0
  146. package/admin/features/users/listUsers/index.js +2 -0
  147. package/admin/features/users/updateUser/UpdateUserGateway.d.ts +11 -0
  148. package/admin/features/users/updateUser/UpdateUserGateway.js +59 -0
  149. package/admin/features/users/updateUser/UpdateUserGateway.js.map +1 -0
  150. package/admin/features/users/updateUser/UpdateUserUseCase.d.ts +10 -0
  151. package/admin/features/users/updateUser/UpdateUserUseCase.js +18 -0
  152. package/admin/features/users/updateUser/UpdateUserUseCase.js.map +1 -0
  153. package/admin/features/users/updateUser/abstractions/UpdateUserGateway.d.ts +33 -0
  154. package/admin/features/users/updateUser/abstractions/UpdateUserGateway.js +5 -0
  155. package/admin/features/users/updateUser/abstractions/UpdateUserGateway.js.map +1 -0
  156. package/admin/features/users/updateUser/abstractions/UpdateUserUseCase.d.ts +15 -0
  157. package/admin/features/users/updateUser/abstractions/UpdateUserUseCase.js +5 -0
  158. package/admin/features/users/updateUser/abstractions/UpdateUserUseCase.js.map +1 -0
  159. package/admin/features/users/updateUser/abstractions/index.d.ts +2 -0
  160. package/admin/features/users/updateUser/abstractions/index.js +2 -0
  161. package/admin/features/users/updateUser/feature.d.ts +3 -0
  162. package/admin/features/users/updateUser/feature.js +19 -0
  163. package/admin/features/users/updateUser/feature.js.map +1 -0
  164. package/admin/features/users/updateUser/index.d.ts +2 -0
  165. package/admin/features/users/updateUser/index.js +2 -0
  166. package/admin/federatedIdentityProviders.d.ts +9 -0
  167. package/admin/federatedIdentityProviders.js +10 -0
  168. package/admin/federatedIdentityProviders.js.map +1 -0
  169. package/admin/index.d.ts +2 -0
  170. package/admin/index.js +2 -0
  171. package/admin/presentation/Cognito/CognitoLoginScreen.d.ts +10 -0
  172. package/admin/presentation/Cognito/CognitoLoginScreen.js +60 -0
  173. package/admin/presentation/Cognito/CognitoLoginScreen.js.map +1 -0
  174. package/admin/presentation/Cognito/CognitoPresenter.d.ts +81 -0
  175. package/admin/presentation/Cognito/CognitoPresenter.js +386 -0
  176. package/admin/presentation/Cognito/CognitoPresenter.js.map +1 -0
  177. package/admin/presentation/Cognito/CognitoSignInConfig.d.ts +31 -0
  178. package/admin/presentation/Cognito/CognitoSignInConfig.js +5 -0
  179. package/admin/presentation/Cognito/CognitoSignInConfig.js.map +1 -0
  180. package/admin/presentation/Cognito/abstractions.d.ts +91 -0
  181. package/admin/presentation/Cognito/abstractions.js +5 -0
  182. package/admin/presentation/Cognito/abstractions.js.map +1 -0
  183. package/admin/presentation/Cognito/components/ConfirmTotpCode.d.ts +26 -0
  184. package/admin/presentation/Cognito/components/ConfirmTotpCode.js +45 -0
  185. package/admin/presentation/Cognito/components/ConfirmTotpCode.js.map +1 -0
  186. package/admin/presentation/Cognito/components/Divider.d.ts +20 -0
  187. package/admin/presentation/Cognito/components/Divider.js +16 -0
  188. package/admin/presentation/Cognito/components/Divider.js.map +1 -0
  189. package/admin/presentation/Cognito/components/FederatedLogin.d.ts +24 -0
  190. package/admin/presentation/Cognito/components/FederatedLogin.js +43 -0
  191. package/admin/presentation/Cognito/components/FederatedLogin.js.map +1 -0
  192. package/admin/presentation/Cognito/components/FederatedProviders.d.ts +44 -0
  193. package/admin/presentation/Cognito/components/FederatedProviders.js +11 -0
  194. package/admin/presentation/Cognito/components/FederatedProviders.js.map +1 -0
  195. package/admin/presentation/Cognito/components/FooterSignIn.d.ts +23 -0
  196. package/admin/presentation/Cognito/components/FooterSignIn.js +13 -0
  197. package/admin/presentation/Cognito/components/FooterSignIn.js.map +1 -0
  198. package/admin/presentation/Cognito/components/PasswordResetCodeSent.d.ts +27 -0
  199. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js +40 -0
  200. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js.map +1 -0
  201. package/admin/presentation/Cognito/components/RequestPasswordResetCode.d.ts +26 -0
  202. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js +42 -0
  203. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js.map +1 -0
  204. package/admin/presentation/Cognito/components/RequireNewPassword.d.ts +26 -0
  205. package/admin/presentation/Cognito/components/RequireNewPassword.js +52 -0
  206. package/admin/presentation/Cognito/components/RequireNewPassword.js.map +1 -0
  207. package/admin/presentation/Cognito/components/SetNewPassword.d.ts +26 -0
  208. package/admin/presentation/Cognito/components/SetNewPassword.js +79 -0
  209. package/admin/presentation/Cognito/components/SetNewPassword.js.map +1 -0
  210. package/admin/presentation/Cognito/components/SetupTotp.d.ts +25 -0
  211. package/admin/presentation/Cognito/components/SetupTotp.js +60 -0
  212. package/admin/presentation/Cognito/components/SetupTotp.js.map +1 -0
  213. package/admin/presentation/Cognito/components/SignIn.d.ts +26 -0
  214. package/admin/presentation/Cognito/components/SignIn.js +64 -0
  215. package/admin/presentation/Cognito/components/SignIn.js.map +1 -0
  216. package/admin/presentation/Cognito/components/View.d.ts +98 -0
  217. package/admin/presentation/Cognito/components/View.js +48 -0
  218. package/admin/presentation/Cognito/components/View.js.map +1 -0
  219. package/admin/presentation/Cognito/components/index.d.ts +292 -0
  220. package/admin/presentation/Cognito/components/index.js +29 -0
  221. package/admin/presentation/Cognito/components/index.js.map +1 -0
  222. package/admin/presentation/Cognito/feature.d.ts +3 -0
  223. package/admin/presentation/Cognito/feature.js +17 -0
  224. package/admin/presentation/Cognito/feature.js.map +1 -0
  225. package/admin/presentation/Cognito/signInFeature.d.ts +1 -0
  226. package/admin/presentation/Cognito/signInFeature.js +11 -0
  227. package/admin/presentation/Cognito/signInFeature.js.map +1 -0
  228. package/admin/presentation/shared/createPasswordValidator.d.ts +8 -0
  229. package/admin/presentation/shared/createPasswordValidator.js +16 -0
  230. package/admin/presentation/shared/createPasswordValidator.js.map +1 -0
  231. package/admin/presentation/shared/usePasswordValidator.d.ts +1 -0
  232. package/admin/presentation/shared/usePasswordValidator.js +16 -0
  233. package/admin/presentation/shared/usePasswordValidator.js.map +1 -0
  234. package/admin/presentation/userMenu/AccountDetails.d.ts +6 -0
  235. package/admin/presentation/userMenu/AccountDetails.js +20 -0
  236. package/admin/presentation/userMenu/AccountDetails.js.map +1 -0
  237. package/admin/presentation/userMenu/useIsDefaultTenant.d.ts +1 -0
  238. package/admin/presentation/userMenu/useIsDefaultTenant.js +9 -0
  239. package/admin/presentation/userMenu/useIsDefaultTenant.js.map +1 -0
  240. package/admin/routes.d.ts +10 -0
  241. package/admin/routes.js +20 -0
  242. package/admin/routes.js.map +1 -0
  243. package/admin/ui/UserItem.d.ts +10 -0
  244. package/admin/ui/UserItem.js +0 -0
  245. package/admin/ui/components/AvatarImage/AvatarImage.d.ts +3 -0
  246. package/admin/ui/components/AvatarImage/AvatarImage.js +31 -0
  247. package/admin/ui/components/AvatarImage/AvatarImage.js.map +1 -0
  248. package/admin/ui/components/AvatarImage/AvatarImagePreview.d.ts +10 -0
  249. package/admin/ui/components/AvatarImage/AvatarImagePreview.js +53 -0
  250. package/admin/ui/components/AvatarImage/AvatarImagePreview.js.map +1 -0
  251. package/admin/ui/components/AvatarImage/AvatarImageTrigger.d.ts +7 -0
  252. package/admin/ui/components/AvatarImage/AvatarImageTrigger.js +28 -0
  253. package/admin/ui/components/AvatarImage/AvatarImageTrigger.js.map +1 -0
  254. package/admin/ui/components/AvatarImage/index.d.ts +1 -0
  255. package/admin/ui/components/AvatarImage/index.js +1 -0
  256. package/admin/ui/views/Account/Account.d.ts +2 -0
  257. package/admin/ui/views/Account/Account.js +137 -0
  258. package/admin/ui/views/Account/Account.js.map +1 -0
  259. package/admin/ui/views/Account/index.d.ts +1 -0
  260. package/admin/ui/views/Account/index.js +1 -0
  261. package/admin/ui/views/Users/UsersDataList.d.ts +3 -0
  262. package/admin/ui/views/Users/UsersDataList.js +177 -0
  263. package/admin/ui/views/Users/UsersDataList.js.map +1 -0
  264. package/admin/ui/views/Users/UsersForm.d.ts +5 -0
  265. package/admin/ui/views/Users/UsersForm.js +169 -0
  266. package/admin/ui/views/Users/UsersForm.js.map +1 -0
  267. package/admin/ui/views/Users/UsersView.d.ts +2 -0
  268. package/admin/ui/views/Users/UsersView.js +14 -0
  269. package/admin/ui/views/Users/UsersView.js.map +1 -0
  270. package/admin/ui/views/Users/components/DeleteAction.d.ts +7 -0
  271. package/admin/ui/views/Users/components/DeleteAction.js +29 -0
  272. package/admin/ui/views/Users/components/DeleteAction.js.map +1 -0
  273. package/admin/ui/views/Users/hooks/useUserForm.d.ts +27 -0
  274. package/admin/ui/views/Users/hooks/useUserForm.js +101 -0
  275. package/admin/ui/views/Users/hooks/useUserForm.js.map +1 -0
  276. package/admin/ui/views/Users/search.js +21 -0
  277. package/admin/ui/views/Users/search.js.map +1 -0
  278. package/admin/ui/views/Users/search.svg +20 -0
  279. package/admin/ui/views/utils.d.ts +3 -0
  280. package/admin/ui/views/utils.js +12 -0
  281. package/admin/ui/views/utils.js.map +1 -0
  282. package/api/CognitoApiFeature.d.ts +4 -0
  283. package/api/CognitoApiFeature.js +26 -0
  284. package/api/CognitoApiFeature.js.map +1 -0
  285. package/api/domain/Username.d.ts +4 -0
  286. package/api/domain/Username.js +8 -0
  287. package/api/domain/Username.js.map +1 -0
  288. package/api/domain/errors.d.ts +37 -0
  289. package/api/domain/errors.js +44 -0
  290. package/api/domain/errors.js.map +1 -0
  291. package/api/features/CognitoIdp/CognitoIdentityProvider.d.ts +15 -0
  292. package/api/features/CognitoIdp/CognitoIdentityProvider.js +63 -0
  293. package/api/features/CognitoIdp/CognitoIdentityProvider.js.map +1 -0
  294. package/api/features/CognitoIdp/abstractions.d.ts +15 -0
  295. package/api/features/CognitoIdp/abstractions.js +5 -0
  296. package/api/features/CognitoIdp/abstractions.js.map +1 -0
  297. package/api/features/CognitoIdp/feature.d.ts +4 -0
  298. package/api/features/CognitoIdp/feature.js +11 -0
  299. package/api/features/CognitoIdp/feature.js.map +1 -0
  300. package/api/features/CognitoIdp/index.d.ts +2 -0
  301. package/api/features/CognitoIdp/index.js +2 -0
  302. package/api/features/CognitoService/CognitoService.d.ts +20 -0
  303. package/api/features/CognitoService/CognitoService.js +100 -0
  304. package/api/features/CognitoService/CognitoService.js.map +1 -0
  305. package/api/features/CognitoService/abstractions.d.ts +54 -0
  306. package/api/features/CognitoService/abstractions.js +6 -0
  307. package/api/features/CognitoService/abstractions.js.map +1 -0
  308. package/api/features/CognitoService/feature.d.ts +8 -0
  309. package/api/features/CognitoService/feature.js +13 -0
  310. package/api/features/CognitoService/feature.js.map +1 -0
  311. package/api/features/CognitoService/index.d.ts +1 -0
  312. package/api/features/CognitoService/index.js +1 -0
  313. package/api/features/CreateUser/CreateUserUseCase.d.ts +22 -0
  314. package/api/features/CreateUser/CreateUserUseCase.js +80 -0
  315. package/api/features/CreateUser/CreateUserUseCase.js.map +1 -0
  316. package/api/features/CreateUser/abstractions.d.ts +35 -0
  317. package/api/features/CreateUser/abstractions.js +5 -0
  318. package/api/features/CreateUser/abstractions.js.map +1 -0
  319. package/api/features/CreateUser/feature.d.ts +4 -0
  320. package/api/features/CreateUser/feature.js +11 -0
  321. package/api/features/CreateUser/feature.js.map +1 -0
  322. package/api/features/CreateUser/index.d.ts +2 -0
  323. package/api/features/CreateUser/index.js +2 -0
  324. package/api/features/CreateUser/schema.d.ts +15 -0
  325. package/api/features/CreateUser/schema.js +18 -0
  326. package/api/features/CreateUser/schema.js.map +1 -0
  327. package/api/features/DeleteUser/DeleteUserUseCase.d.ts +16 -0
  328. package/api/features/DeleteUser/DeleteUserUseCase.js +47 -0
  329. package/api/features/DeleteUser/DeleteUserUseCase.js.map +1 -0
  330. package/api/features/DeleteUser/abstractions.d.ts +19 -0
  331. package/api/features/DeleteUser/abstractions.js +5 -0
  332. package/api/features/DeleteUser/abstractions.js.map +1 -0
  333. package/api/features/DeleteUser/feature.d.ts +4 -0
  334. package/api/features/DeleteUser/feature.js +11 -0
  335. package/api/features/DeleteUser/feature.js.map +1 -0
  336. package/api/features/DeleteUser/index.d.ts +2 -0
  337. package/api/features/DeleteUser/index.js +2 -0
  338. package/api/features/UpdateUser/UpdateUserUseCase.d.ts +21 -0
  339. package/api/features/UpdateUser/UpdateUserUseCase.js +66 -0
  340. package/api/features/UpdateUser/UpdateUserUseCase.js.map +1 -0
  341. package/api/features/UpdateUser/abstractions.d.ts +33 -0
  342. package/api/features/UpdateUser/abstractions.js +5 -0
  343. package/api/features/UpdateUser/abstractions.js.map +1 -0
  344. package/api/features/UpdateUser/feature.d.ts +4 -0
  345. package/api/features/UpdateUser/feature.js +11 -0
  346. package/api/features/UpdateUser/feature.js.map +1 -0
  347. package/api/features/UpdateUser/index.d.ts +2 -0
  348. package/api/features/UpdateUser/index.js +2 -0
  349. package/api/features/UpdateUser/schema.d.ts +14 -0
  350. package/api/features/UpdateUser/schema.js +17 -0
  351. package/api/features/UpdateUser/schema.js.map +1 -0
  352. package/api/features/UserInstaller/UserInstaller.d.ts +27 -0
  353. package/api/features/UserInstaller/UserInstaller.js +48 -0
  354. package/api/features/UserInstaller/UserInstaller.js.map +1 -0
  355. package/api/features/UserInstaller/feature.d.ts +4 -0
  356. package/api/features/UserInstaller/feature.js +11 -0
  357. package/api/features/UserInstaller/feature.js.map +1 -0
  358. package/api/graphql/user.gql.d.ts +8 -0
  359. package/api/graphql/user.gql.js +143 -0
  360. package/api/graphql/user.gql.js.map +1 -0
  361. package/api/index.d.ts +1 -0
  362. package/api/index.js +1 -0
  363. package/index.d.ts +1 -0
  364. package/index.js +1 -0
  365. package/infra/CognitoFederationPulumi.d.ts +8 -0
  366. package/infra/CognitoFederationPulumi.js +17 -0
  367. package/infra/CognitoFederationPulumi.js.map +1 -0
  368. package/package.json +51 -0
  369. package/static/svg/search.43fa797c.svg +20 -0
@@ -0,0 +1,44 @@
1
+ import { BaseError } from "@webiny/feature/api";
2
+ class CognitoAccountExistsError extends BaseError {
3
+ constructor(email){
4
+ super({
5
+ message: "An account with this email already exists in your Cognito User Pool.",
6
+ data: {
7
+ email
8
+ }
9
+ }), this.code = "Cognito/Account/Exists";
10
+ }
11
+ }
12
+ class CognitoCreateUserError extends BaseError {
13
+ constructor(error){
14
+ super({
15
+ message: `Failed to create user in Cognito: ${error.message}`,
16
+ data: {
17
+ error
18
+ }
19
+ }), this.code = "Cognito/User/Create";
20
+ }
21
+ }
22
+ class CognitoUpdateUserError extends BaseError {
23
+ constructor(error){
24
+ super({
25
+ message: `Failed to update user in Cognito: ${error.message}`,
26
+ data: {
27
+ error
28
+ }
29
+ }), this.code = "Cognito/User/Update";
30
+ }
31
+ }
32
+ class CognitoDeleteUserError extends BaseError {
33
+ constructor(error){
34
+ super({
35
+ message: `Failed to delete user from Cognito: ${error.message}`,
36
+ data: {
37
+ error
38
+ }
39
+ }), this.code = "Cognito/User/Delete";
40
+ }
41
+ }
42
+ export { CognitoAccountExistsError, CognitoCreateUserError, CognitoDeleteUserError, CognitoUpdateUserError };
43
+
44
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/domain/errors.js","sources":["../../../src/api/domain/errors.ts"],"sourcesContent":["import { BaseError } from \"@webiny/feature/api\";\n\n/**\n * Error when a user already exists in Cognito User Pool\n */\nexport class CognitoAccountExistsError extends BaseError<{ email: string }> {\n override readonly code = \"Cognito/Account/Exists\" as const;\n\n constructor(email: string) {\n super({\n message: `An account with this email already exists in your Cognito User Pool.`,\n data: { email }\n });\n }\n}\n\n/**\n * Error when creating a user in Cognito fails\n */\nexport class CognitoCreateUserError extends BaseError<{ error: Error }> {\n override readonly code = \"Cognito/User/Create\" as const;\n\n constructor(error: Error) {\n super({\n message: `Failed to create user in Cognito: ${error.message}`,\n data: { error }\n });\n }\n}\n\n/**\n * Error when updating a user in Cognito fails\n */\nexport class CognitoUpdateUserError extends BaseError<{ error: Error }> {\n override readonly code = \"Cognito/User/Update\" as const;\n\n constructor(error: Error) {\n super({\n message: `Failed to update user in Cognito: ${error.message}`,\n data: { error }\n });\n }\n}\n\n/**\n * Error when deleting a user from Cognito fails\n */\nexport class CognitoDeleteUserError extends BaseError<{ error: Error }> {\n override readonly code = \"Cognito/User/Delete\" as const;\n\n constructor(error: Error) {\n super({\n message: `Failed to delete user from Cognito: ${error.message}`,\n data: { error }\n });\n }\n}\n"],"names":["CognitoAccountExistsError","BaseError","email","CognitoCreateUserError","error","CognitoUpdateUserError","CognitoDeleteUserError"],"mappings":";AAKO,MAAMA,kCAAkCC;IAG3C,YAAYC,KAAa,CAAE;QACvB,KAAK,CAAC;YACF,SAAS;YACT,MAAM;gBAAEA;YAAM;QAClB,SANc,IAAI,GAAG;IAOzB;AACJ;AAKO,MAAMC,+BAA+BF;IAGxC,YAAYG,KAAY,CAAE;QACtB,KAAK,CAAC;YACF,SAAS,CAAC,kCAAkC,EAAEA,MAAM,OAAO,EAAE;YAC7D,MAAM;gBAAEA;YAAM;QAClB,SANc,IAAI,GAAG;IAOzB;AACJ;AAKO,MAAMC,+BAA+BJ;IAGxC,YAAYG,KAAY,CAAE;QACtB,KAAK,CAAC;YACF,SAAS,CAAC,kCAAkC,EAAEA,MAAM,OAAO,EAAE;YAC7D,MAAM;gBAAEA;YAAM;QAClB,SANc,IAAI,GAAG;IAOzB;AACJ;AAKO,MAAME,+BAA+BL;IAGxC,YAAYG,KAAY,CAAE;QACtB,KAAK,CAAC;YACF,SAAS,CAAC,oCAAoC,EAAEA,MAAM,OAAO,EAAE;YAC/D,MAAM;gBAAEA;YAAM;QAClB,SANc,IAAI,GAAG;IAOzB;AACJ"}
@@ -0,0 +1,15 @@
1
+ import { OidcIdentityProvider } from "@webiny/api-core/idp";
2
+ import { CognitoIdpConfig } from "./abstractions.js";
3
+ declare class CognitoIdentityProviderImpl implements OidcIdentityProvider.Interface {
4
+ private config;
5
+ clientId: string;
6
+ issuer: string;
7
+ constructor(config: CognitoIdpConfig.Interface | undefined);
8
+ isApplicable(token: OidcIdentityProvider.JwtPayload): boolean;
9
+ getIdentity(token: OidcIdentityProvider.JwtPayload): Promise<OidcIdentityProvider.IdentityData>;
10
+ verifyTokenClaims(token: OidcIdentityProvider.JwtPayload): Promise<void>;
11
+ }
12
+ export declare const CognitoIdentityProvider: typeof CognitoIdentityProviderImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/idp/abstractions.js").IOidcIdentityProvider>;
14
+ };
15
+ export {};
@@ -0,0 +1,63 @@
1
+ import { OidcIdentityProvider } from "@webiny/api-core/idp";
2
+ import { CognitoIdpConfig } from "./abstractions.js";
3
+ class CognitoIdentityProviderImpl {
4
+ constructor(config){
5
+ this.config = config;
6
+ const region = String(process.env.COGNITO_REGION);
7
+ const userPoolId = String(process.env.COGNITO_USER_POOL_ID);
8
+ this.clientId = String(process.env.COGNITO_CLIENT_ID);
9
+ this.issuer = `https://cognito-idp.${region}.amazonaws.com/${userPoolId}`;
10
+ }
11
+ isApplicable(token) {
12
+ const issuer = token.iss;
13
+ if (!issuer) return false;
14
+ return issuer === this.issuer;
15
+ }
16
+ async getIdentity(token) {
17
+ const isFederated = Array.isArray(token.identities) && token.identities.length > 0;
18
+ const customId = token["custom:id"];
19
+ const givenName = token["given_name"];
20
+ const familyName = token["family_name"];
21
+ const email = token["email"];
22
+ const defaultIdentity = {
23
+ id: customId || token.sub || "",
24
+ displayName: `${givenName || ""} ${familyName || ""}`.trim() || email || "Unknown User",
25
+ type: "admin",
26
+ profile: {
27
+ email: email || "",
28
+ firstName: givenName || "",
29
+ lastName: familyName || "",
30
+ external: isFederated
31
+ }
32
+ };
33
+ const customIdentity = this.config ? await this.config.getIdentity(token) : null;
34
+ if (!customIdentity) return defaultIdentity;
35
+ return {
36
+ ...defaultIdentity,
37
+ ...customIdentity,
38
+ type: "admin",
39
+ profile: {
40
+ ...defaultIdentity.profile,
41
+ ...customIdentity.profile,
42
+ external: isFederated
43
+ }
44
+ };
45
+ }
46
+ async verifyTokenClaims(token) {
47
+ if (this.config?.verifyTokenClaims) await this.config.verifyTokenClaims(token);
48
+ }
49
+ }
50
+ const CognitoIdentityProvider = OidcIdentityProvider.createImplementation({
51
+ implementation: CognitoIdentityProviderImpl,
52
+ dependencies: [
53
+ [
54
+ CognitoIdpConfig,
55
+ {
56
+ optional: true
57
+ }
58
+ ]
59
+ ]
60
+ });
61
+ export { CognitoIdentityProvider };
62
+
63
+ //# sourceMappingURL=CognitoIdentityProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CognitoIdp/CognitoIdentityProvider.js","sources":["../../../../src/api/features/CognitoIdp/CognitoIdentityProvider.ts"],"sourcesContent":["import { OidcIdentityProvider } from \"@webiny/api-core/idp\";\nimport { CognitoIdpConfig } from \"./abstractions.js\";\n\nclass CognitoIdentityProviderImpl implements OidcIdentityProvider.Interface {\n public clientId: string;\n public issuer: string;\n\n constructor(private config: CognitoIdpConfig.Interface | undefined) {\n const region = String(process.env.COGNITO_REGION);\n const userPoolId = String(process.env.COGNITO_USER_POOL_ID);\n this.clientId = String(process.env.COGNITO_CLIENT_ID);\n this.issuer = `https://cognito-idp.${region}.amazonaws.com/${userPoolId}`;\n }\n\n isApplicable(token: OidcIdentityProvider.JwtPayload) {\n const issuer = token.iss as string;\n if (!issuer) {\n return false;\n }\n\n return issuer === this.issuer;\n }\n\n async getIdentity(\n token: OidcIdentityProvider.JwtPayload\n ): Promise<OidcIdentityProvider.IdentityData> {\n const isFederated = Array.isArray(token.identities) && token.identities.length > 0;\n\n const customId = token[\"custom:id\"] as string | undefined;\n const givenName = token[\"given_name\"] as string | undefined;\n const familyName = token[\"family_name\"] as string | undefined;\n const email = token[\"email\"] as string | undefined;\n\n const defaultIdentity: OidcIdentityProvider.IdentityData = {\n id: customId || token.sub || \"\",\n displayName: `${givenName || \"\"} ${familyName || \"\"}`.trim() || email || \"Unknown User\",\n type: \"admin\",\n profile: {\n email: email || \"\",\n firstName: givenName || \"\",\n lastName: familyName || \"\",\n external: isFederated\n }\n };\n\n const customIdentity = this.config ? await this.config.getIdentity(token) : null;\n\n if (!customIdentity) {\n return defaultIdentity;\n }\n\n return {\n ...defaultIdentity,\n ...customIdentity,\n type: \"admin\",\n profile: {\n ...defaultIdentity.profile,\n ...customIdentity.profile,\n external: isFederated\n }\n };\n }\n\n async verifyTokenClaims(token: OidcIdentityProvider.JwtPayload): Promise<void> {\n if (this.config?.verifyTokenClaims) {\n await this.config.verifyTokenClaims(token);\n }\n }\n}\n\nexport const CognitoIdentityProvider = OidcIdentityProvider.createImplementation({\n implementation: CognitoIdentityProviderImpl,\n dependencies: [[CognitoIdpConfig, { optional: true }]]\n});\n"],"names":["CognitoIdentityProviderImpl","config","region","String","process","userPoolId","token","issuer","isFederated","Array","customId","givenName","familyName","email","defaultIdentity","customIdentity","CognitoIdentityProvider","OidcIdentityProvider","CognitoIdpConfig"],"mappings":";;AAGA,MAAMA;IAIF,YAAoBC,MAA8C,CAAE;aAAhDA,MAAM,GAANA;QAChB,MAAMC,SAASC,OAAOC,QAAQ,GAAG,CAAC,cAAc;QAChD,MAAMC,aAAaF,OAAOC,QAAQ,GAAG,CAAC,oBAAoB;QAC1D,IAAI,CAAC,QAAQ,GAAGD,OAAOC,QAAQ,GAAG,CAAC,iBAAiB;QACpD,IAAI,CAAC,MAAM,GAAG,CAAC,oBAAoB,EAAEF,OAAO,eAAe,EAAEG,YAAY;IAC7E;IAEA,aAAaC,KAAsC,EAAE;QACjD,MAAMC,SAASD,MAAM,GAAG;QACxB,IAAI,CAACC,QACD,OAAO;QAGX,OAAOA,WAAW,IAAI,CAAC,MAAM;IACjC;IAEA,MAAM,YACFD,KAAsC,EACI;QAC1C,MAAME,cAAcC,MAAM,OAAO,CAACH,MAAM,UAAU,KAAKA,MAAM,UAAU,CAAC,MAAM,GAAG;QAEjF,MAAMI,WAAWJ,KAAK,CAAC,YAAY;QACnC,MAAMK,YAAYL,KAAK,CAAC,aAAa;QACrC,MAAMM,aAAaN,KAAK,CAAC,cAAc;QACvC,MAAMO,QAAQP,KAAK,CAAC,QAAQ;QAE5B,MAAMQ,kBAAqD;YACvD,IAAIJ,YAAYJ,MAAM,GAAG,IAAI;YAC7B,aAAa,GAAGK,aAAa,GAAG,CAAC,EAAEC,cAAc,IAAI,CAAC,IAAI,MAAMC,SAAS;YACzE,MAAM;YACN,SAAS;gBACL,OAAOA,SAAS;gBAChB,WAAWF,aAAa;gBACxB,UAAUC,cAAc;gBACxB,UAAUJ;YACd;QACJ;QAEA,MAAMO,iBAAiB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAACT,SAAS;QAE5E,IAAI,CAACS,gBACD,OAAOD;QAGX,OAAO;YACH,GAAGA,eAAe;YAClB,GAAGC,cAAc;YACjB,MAAM;YACN,SAAS;gBACL,GAAGD,gBAAgB,OAAO;gBAC1B,GAAGC,eAAe,OAAO;gBACzB,UAAUP;YACd;QACJ;IACJ;IAEA,MAAM,kBAAkBF,KAAsC,EAAiB;QAC3E,IAAI,IAAI,CAAC,MAAM,EAAE,mBACb,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAACA;IAE5C;AACJ;AAEO,MAAMU,0BAA0BC,qBAAqB,oBAAoB,CAAC;IAC7E,gBAAgBjB;IAChB,cAAc;QAAC;YAACkB;YAAkB;gBAAE,UAAU;YAAK;SAAE;KAAC;AAC1D"}
@@ -0,0 +1,15 @@
1
+ import type jwt from "jsonwebtoken";
2
+ import type { IdentityData } from "@webiny/api-core/idp";
3
+ export type CognitoIdentity = Omit<IdentityData, "type"> & {
4
+ profile?: Omit<IdentityData["profile"], "external">;
5
+ };
6
+ export interface ICognitoIdpConfig {
7
+ getIdentity(token: jwt.JwtPayload): Promise<CognitoIdentity> | CognitoIdentity;
8
+ verifyTokenClaims?(token: jwt.JwtPayload): Promise<void> | void;
9
+ }
10
+ export declare const CognitoIdpConfig: import("@webiny/di").Abstraction<ICognitoIdpConfig>;
11
+ export declare namespace CognitoIdpConfig {
12
+ type Interface = ICognitoIdpConfig;
13
+ type IdentityData = CognitoIdentity;
14
+ type JwtPayload = jwt.JwtPayload;
15
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const CognitoIdpConfig = createAbstraction("CognitoIdpConfig");
3
+ export { CognitoIdpConfig };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CognitoIdp/abstractions.js","sources":["../../../../src/api/features/CognitoIdp/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type jwt from \"jsonwebtoken\";\nimport type { IdentityData } from \"@webiny/api-core/idp\";\n\nexport type CognitoIdentity = Omit<IdentityData, \"type\"> & {\n profile?: Omit<IdentityData[\"profile\"], \"external\">;\n};\n\nexport interface ICognitoIdpConfig {\n getIdentity(token: jwt.JwtPayload): Promise<CognitoIdentity> | CognitoIdentity;\n verifyTokenClaims?(token: jwt.JwtPayload): Promise<void> | void;\n}\n\nexport const CognitoIdpConfig = createAbstraction<ICognitoIdpConfig>(\"CognitoIdpConfig\");\n\nexport namespace CognitoIdpConfig {\n export type Interface = ICognitoIdpConfig;\n export type IdentityData = CognitoIdentity;\n export type JwtPayload = jwt.JwtPayload;\n}\n"],"names":["CognitoIdpConfig","createAbstraction"],"mappings":";AAaO,MAAMA,mBAAmBC,kBAAqC"}
@@ -0,0 +1,4 @@
1
+ export declare const CognitoIdpFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { CognitoIdentityProvider } from "./CognitoIdentityProvider.js";
3
+ const CognitoIdpFeature = createFeature({
4
+ name: "CognitoIdp",
5
+ register (container) {
6
+ container.register(CognitoIdentityProvider).inSingletonScope();
7
+ }
8
+ });
9
+ export { CognitoIdpFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CognitoIdp/feature.js","sources":["../../../../src/api/features/CognitoIdp/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CognitoIdentityProvider } from \"./CognitoIdentityProvider.js\";\n\nexport const CognitoIdpFeature = createFeature({\n name: \"CognitoIdp\",\n register(container) {\n container.register(CognitoIdentityProvider).inSingletonScope();\n }\n});\n"],"names":["CognitoIdpFeature","createFeature","container","CognitoIdentityProvider"],"mappings":";;AAGO,MAAMA,oBAAoBC,cAAc;IAC3C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,yBAAyB,gBAAgB;IAChE;AACJ"}
@@ -0,0 +1,2 @@
1
+ export { CognitoIdpConfig } from "./abstractions.js";
2
+ export { CognitoIdpFeature } from "./feature.js";
@@ -0,0 +1,2 @@
1
+ export { CognitoIdpConfig } from "./abstractions.js";
2
+ export { CognitoIdpFeature } from "./feature.js";
@@ -0,0 +1,20 @@
1
+ import { CognitoConfig, CognitoService as ServiceAbstraction } from "./abstractions.js";
2
+ declare class CognitoServiceImpl implements ServiceAbstraction.Interface {
3
+ private config;
4
+ private cognito;
5
+ constructor(config: CognitoConfig.Interface);
6
+ userExists(username: string): Promise<boolean>;
7
+ createUser(params: {
8
+ username: string;
9
+ temporaryPassword: string;
10
+ attributes: ServiceAbstraction.UserAttributes;
11
+ }): Promise<void>;
12
+ setEmailVerified(username: string): Promise<void>;
13
+ setPermanentPassword(username: string, password: string): Promise<void>;
14
+ updateUserAttributes(username: string, attributes: Record<string, string>): Promise<void>;
15
+ deleteUser(username: string): Promise<void>;
16
+ }
17
+ export declare const CognitoService: typeof CognitoServiceImpl & {
18
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICognitoService>;
19
+ };
20
+ export {};
@@ -0,0 +1,100 @@
1
+ import { CognitoIdentityProvider } from "@webiny/aws-sdk/client-cognito-identity-provider/index.js";
2
+ import { CognitoConfig, CognitoService } from "./abstractions.js";
3
+ class CognitoServiceImpl {
4
+ constructor(config){
5
+ this.config = config;
6
+ this.cognito = new CognitoIdentityProvider({
7
+ region: config.region
8
+ });
9
+ }
10
+ async userExists(username) {
11
+ try {
12
+ await this.cognito.adminGetUser({
13
+ Username: username,
14
+ UserPoolId: this.config.userPoolId
15
+ });
16
+ return true;
17
+ } catch {
18
+ return false;
19
+ }
20
+ }
21
+ async createUser(params) {
22
+ const createUserParams = {
23
+ UserPoolId: this.config.userPoolId,
24
+ Username: params.username,
25
+ DesiredDeliveryMediums: [],
26
+ ForceAliasCreation: false,
27
+ MessageAction: "SUPPRESS",
28
+ TemporaryPassword: params.temporaryPassword,
29
+ UserAttributes: [
30
+ {
31
+ Name: "given_name",
32
+ Value: params.attributes.givenName || ""
33
+ },
34
+ {
35
+ Name: "family_name",
36
+ Value: params.attributes.familyName || ""
37
+ },
38
+ {
39
+ Name: "preferred_username",
40
+ Value: params.attributes.preferredUsername
41
+ },
42
+ {
43
+ Name: "email",
44
+ Value: params.attributes.email
45
+ },
46
+ {
47
+ Name: "custom:id",
48
+ Value: params.attributes.customId
49
+ }
50
+ ]
51
+ };
52
+ await this.cognito.adminCreateUser(createUserParams);
53
+ }
54
+ async setEmailVerified(username) {
55
+ await this.cognito.adminUpdateUserAttributes({
56
+ UserPoolId: this.config.userPoolId,
57
+ Username: username,
58
+ UserAttributes: [
59
+ {
60
+ Name: "email_verified",
61
+ Value: "true"
62
+ }
63
+ ]
64
+ });
65
+ }
66
+ async setPermanentPassword(username, password) {
67
+ await this.cognito.adminSetUserPassword({
68
+ Permanent: true,
69
+ Password: password,
70
+ Username: username,
71
+ UserPoolId: this.config.userPoolId
72
+ });
73
+ }
74
+ async updateUserAttributes(username, attributes) {
75
+ const userAttributes = Object.entries(attributes).map(([name, value])=>({
76
+ Name: name,
77
+ Value: value
78
+ }));
79
+ await this.cognito.adminUpdateUserAttributes({
80
+ UserPoolId: this.config.userPoolId,
81
+ Username: username,
82
+ UserAttributes: userAttributes
83
+ });
84
+ }
85
+ async deleteUser(username) {
86
+ await this.cognito.adminDeleteUser({
87
+ UserPoolId: this.config.userPoolId,
88
+ Username: username
89
+ });
90
+ }
91
+ }
92
+ const CognitoService_CognitoService = CognitoService.createImplementation({
93
+ implementation: CognitoServiceImpl,
94
+ dependencies: [
95
+ CognitoConfig
96
+ ]
97
+ });
98
+ export { CognitoService_CognitoService as CognitoService };
99
+
100
+ //# sourceMappingURL=CognitoService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CognitoService/CognitoService.js","sources":["../../../../src/api/features/CognitoService/CognitoService.ts"],"sourcesContent":["import type { AdminCreateUserRequest } from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport { CognitoIdentityProvider } from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport { CognitoConfig, CognitoService as ServiceAbstraction } from \"./abstractions.js\";\n\nclass CognitoServiceImpl implements ServiceAbstraction.Interface {\n private cognito: CognitoIdentityProvider;\n\n constructor(private config: CognitoConfig.Interface) {\n this.cognito = new CognitoIdentityProvider({ region: config.region });\n }\n\n async userExists(username: string): Promise<boolean> {\n try {\n await this.cognito.adminGetUser({\n Username: username,\n UserPoolId: this.config.userPoolId\n });\n return true;\n } catch {\n // User does not exist\n return false;\n }\n }\n\n async createUser(params: {\n username: string;\n temporaryPassword: string;\n attributes: ServiceAbstraction.UserAttributes;\n }): Promise<void> {\n const createUserParams: AdminCreateUserRequest = {\n UserPoolId: this.config.userPoolId,\n Username: params.username,\n DesiredDeliveryMediums: [],\n ForceAliasCreation: false,\n MessageAction: \"SUPPRESS\",\n TemporaryPassword: params.temporaryPassword,\n UserAttributes: [\n {\n Name: \"given_name\",\n Value: params.attributes.givenName || \"\"\n },\n {\n Name: \"family_name\",\n Value: params.attributes.familyName || \"\"\n },\n {\n Name: \"preferred_username\",\n Value: params.attributes.preferredUsername\n },\n {\n Name: \"email\",\n Value: params.attributes.email\n },\n {\n Name: \"custom:id\",\n Value: params.attributes.customId\n }\n ]\n };\n\n await this.cognito.adminCreateUser(createUserParams);\n }\n\n async setEmailVerified(username: string): Promise<void> {\n await this.cognito.adminUpdateUserAttributes({\n UserPoolId: this.config.userPoolId,\n Username: username,\n UserAttributes: [\n {\n Name: \"email_verified\",\n Value: \"true\"\n }\n ]\n });\n }\n\n async setPermanentPassword(username: string, password: string): Promise<void> {\n await this.cognito.adminSetUserPassword({\n Permanent: true,\n Password: password,\n Username: username,\n UserPoolId: this.config.userPoolId\n });\n }\n\n async updateUserAttributes(\n username: string,\n attributes: Record<string, string>\n ): Promise<void> {\n const userAttributes = Object.entries(attributes).map(([name, value]) => ({\n Name: name,\n Value: value\n }));\n\n await this.cognito.adminUpdateUserAttributes({\n UserPoolId: this.config.userPoolId,\n Username: username,\n UserAttributes: userAttributes\n });\n }\n\n async deleteUser(username: string): Promise<void> {\n await this.cognito.adminDeleteUser({\n UserPoolId: this.config.userPoolId,\n Username: username\n });\n }\n}\n\nexport const CognitoService = ServiceAbstraction.createImplementation({\n implementation: CognitoServiceImpl,\n dependencies: [CognitoConfig]\n});\n"],"names":["CognitoServiceImpl","config","CognitoIdentityProvider","username","params","createUserParams","password","attributes","userAttributes","Object","name","value","CognitoService","ServiceAbstraction","CognitoConfig"],"mappings":";;AAIA,MAAMA;IAGF,YAAoBC,MAA+B,CAAE;aAAjCA,MAAM,GAANA;QAChB,IAAI,CAAC,OAAO,GAAG,IAAIC,wBAAwB;YAAE,QAAQD,OAAO,MAAM;QAAC;IACvE;IAEA,MAAM,WAAWE,QAAgB,EAAoB;QACjD,IAAI;YACA,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC5B,UAAUA;gBACV,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU;YACtC;YACA,OAAO;QACX,EAAE,OAAM;YAEJ,OAAO;QACX;IACJ;IAEA,MAAM,WAAWC,MAIhB,EAAiB;QACd,MAAMC,mBAA2C;YAC7C,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,UAAUD,OAAO,QAAQ;YACzB,wBAAwB,EAAE;YAC1B,oBAAoB;YACpB,eAAe;YACf,mBAAmBA,OAAO,iBAAiB;YAC3C,gBAAgB;gBACZ;oBACI,MAAM;oBACN,OAAOA,OAAO,UAAU,CAAC,SAAS,IAAI;gBAC1C;gBACA;oBACI,MAAM;oBACN,OAAOA,OAAO,UAAU,CAAC,UAAU,IAAI;gBAC3C;gBACA;oBACI,MAAM;oBACN,OAAOA,OAAO,UAAU,CAAC,iBAAiB;gBAC9C;gBACA;oBACI,MAAM;oBACN,OAAOA,OAAO,UAAU,CAAC,KAAK;gBAClC;gBACA;oBACI,MAAM;oBACN,OAAOA,OAAO,UAAU,CAAC,QAAQ;gBACrC;aACH;QACL;QAEA,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAACC;IACvC;IAEA,MAAM,iBAAiBF,QAAgB,EAAiB;QACpD,MAAM,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;YACzC,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,UAAUA;YACV,gBAAgB;gBACZ;oBACI,MAAM;oBACN,OAAO;gBACX;aACH;QACL;IACJ;IAEA,MAAM,qBAAqBA,QAAgB,EAAEG,QAAgB,EAAiB;QAC1E,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACpC,WAAW;YACX,UAAUA;YACV,UAAUH;YACV,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU;QACtC;IACJ;IAEA,MAAM,qBACFA,QAAgB,EAChBI,UAAkC,EACrB;QACb,MAAMC,iBAAiBC,OAAO,OAAO,CAACF,YAAY,GAAG,CAAC,CAAC,CAACG,MAAMC,MAAM,GAAM;gBACtE,MAAMD;gBACN,OAAOC;YACX;QAEA,MAAM,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;YACzC,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,UAAUR;YACV,gBAAgBK;QACpB;IACJ;IAEA,MAAM,WAAWL,QAAgB,EAAiB;QAC9C,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YAC/B,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,UAAUA;QACd;IACJ;AACJ;AAEO,MAAMS,gCAAiBC,eAAAA,oBAAuC,CAAC;IAClE,gBAAgBb;IAChB,cAAc;QAACc;KAAc;AACjC"}
@@ -0,0 +1,54 @@
1
+ import type { BaseUserAttributes } from "@webiny/api-core/types/users.js";
2
+ export interface AttributeGetter {
3
+ (user: BaseUserAttributes): string;
4
+ }
5
+ export interface ICognitoConfig {
6
+ region: string;
7
+ userPoolId: string;
8
+ }
9
+ export declare const CognitoConfig: import("@webiny/di").Abstraction<ICognitoConfig>;
10
+ export declare namespace CognitoConfig {
11
+ type Interface = ICognitoConfig;
12
+ }
13
+ export interface CognitoUserAttributes {
14
+ givenName?: string;
15
+ familyName?: string;
16
+ preferredUsername: string;
17
+ email: string;
18
+ customId: string;
19
+ }
20
+ export interface ICognitoService {
21
+ /**
22
+ * Check if a user exists in Cognito User Pool
23
+ */
24
+ userExists(username: string): Promise<boolean>;
25
+ /**
26
+ * Create a new user in Cognito User Pool
27
+ */
28
+ createUser(params: {
29
+ username: string;
30
+ temporaryPassword: string;
31
+ attributes: CognitoUserAttributes;
32
+ }): Promise<void>;
33
+ /**
34
+ * Set email as verified for a user
35
+ */
36
+ setEmailVerified(username: string): Promise<void>;
37
+ /**
38
+ * Set a permanent password for a user
39
+ */
40
+ setPermanentPassword(username: string, password: string): Promise<void>;
41
+ /**
42
+ * Update user attributes in Cognito
43
+ */
44
+ updateUserAttributes(username: string, attributes: Record<string, string>): Promise<void>;
45
+ /**
46
+ * Delete a user from Cognito User Pool
47
+ */
48
+ deleteUser(username: string): Promise<void>;
49
+ }
50
+ export declare const CognitoService: import("@webiny/di").Abstraction<ICognitoService>;
51
+ export declare namespace CognitoService {
52
+ type Interface = ICognitoService;
53
+ type UserAttributes = CognitoUserAttributes;
54
+ }
@@ -0,0 +1,6 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const CognitoConfig = createAbstraction("CognitoConfig");
3
+ const CognitoService = createAbstraction("CognitoService");
4
+ export { CognitoConfig, CognitoService };
5
+
6
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CognitoService/abstractions.js","sources":["../../../../src/api/features/CognitoService/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { BaseUserAttributes } from \"@webiny/api-core/types/users.js\";\n\nexport interface AttributeGetter {\n (user: BaseUserAttributes): string;\n}\n\nexport interface ICognitoConfig {\n region: string;\n userPoolId: string;\n}\n\nexport const CognitoConfig = createAbstraction<ICognitoConfig>(\"CognitoConfig\");\n\nexport namespace CognitoConfig {\n export type Interface = ICognitoConfig;\n}\n\n// Cognito Service\n\nexport interface CognitoUserAttributes {\n givenName?: string;\n familyName?: string;\n preferredUsername: string;\n email: string;\n customId: string;\n}\n\nexport interface ICognitoService {\n /**\n * Check if a user exists in Cognito User Pool\n */\n userExists(username: string): Promise<boolean>;\n\n /**\n * Create a new user in Cognito User Pool\n */\n createUser(params: {\n username: string;\n temporaryPassword: string;\n attributes: CognitoUserAttributes;\n }): Promise<void>;\n\n /**\n * Set email as verified for a user\n */\n setEmailVerified(username: string): Promise<void>;\n\n /**\n * Set a permanent password for a user\n */\n setPermanentPassword(username: string, password: string): Promise<void>;\n\n /**\n * Update user attributes in Cognito\n */\n updateUserAttributes(username: string, attributes: Record<string, string>): Promise<void>;\n\n /**\n * Delete a user from Cognito User Pool\n */\n deleteUser(username: string): Promise<void>;\n}\n\nexport const CognitoService = createAbstraction<ICognitoService>(\"CognitoService\");\nexport namespace CognitoService {\n export type Interface = ICognitoService;\n export type UserAttributes = CognitoUserAttributes;\n}\n"],"names":["CognitoConfig","createAbstraction","CognitoService"],"mappings":";AAYO,MAAMA,gBAAgBC,kBAAkC;AAoDxD,MAAMC,iBAAiBD,kBAAmC"}
@@ -0,0 +1,8 @@
1
+ export type UserPoolConfig = {
2
+ region: string;
3
+ userPoolId: string;
4
+ };
5
+ export declare const CognitoServiceFeature: {
6
+ name: string;
7
+ register(container: import("@webiny/di").Container, context: UserPoolConfig): void;
8
+ };
@@ -0,0 +1,13 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { CognitoService } from "./CognitoService.js";
3
+ import { CognitoConfig } from "./abstractions.js";
4
+ const CognitoServiceFeature = createFeature({
5
+ name: "cognitoService",
6
+ register (container, config) {
7
+ container.register(CognitoService).inSingletonScope();
8
+ container.registerInstance(CognitoConfig, config);
9
+ }
10
+ });
11
+ export { CognitoServiceFeature };
12
+
13
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CognitoService/feature.js","sources":["../../../../src/api/features/CognitoService/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CognitoService } from \"./CognitoService.js\";\nimport { CognitoConfig } from \"./abstractions.js\";\n\nexport type UserPoolConfig = {\n region: string;\n userPoolId: string;\n};\n\nexport const CognitoServiceFeature = createFeature<UserPoolConfig>({\n name: \"cognitoService\",\n register(container, config) {\n container.register(CognitoService).inSingletonScope();\n\n container.registerInstance(CognitoConfig, config);\n }\n});\n"],"names":["CognitoServiceFeature","createFeature","container","config","CognitoService","CognitoConfig"],"mappings":";;;AASO,MAAMA,wBAAwBC,cAA8B;IAC/D,MAAM;IACN,UAASC,SAAS,EAAEC,MAAM;QACtBD,UAAU,QAAQ,CAACE,gBAAgB,gBAAgB;QAEnDF,UAAU,gBAAgB,CAACG,eAAeF;IAC9C;AACJ"}
@@ -0,0 +1 @@
1
+ export * from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export * from "./abstractions.js";
@@ -0,0 +1,22 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { AdminUsersRepository } from "@webiny/api-core/features/users/shared/abstractions.js";
3
+ import type { AdminUser } from "@webiny/api-core/types/users.js";
4
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
+ import { CreateUserUseCase as CoreCreateUser } from "@webiny/api-core/features/users/CreateUser/index.js";
6
+ import { ListUsersUseCase } from "@webiny/api-core/features/users/ListUsers/index.js";
7
+ import { CreateUserUseCase as UseCaseAbstraction } from "./abstractions.js";
8
+ import type { CreateAdminUserInput } from "./abstractions.js";
9
+ import { CognitoService } from "../../../api/features/CognitoService/index.js";
10
+ declare class CreateUserUseCaseImpl implements UseCaseAbstraction.Interface {
11
+ private identityContext;
12
+ private cognitoService;
13
+ private createUserUseCase;
14
+ private listUsersUseCase;
15
+ private repository;
16
+ constructor(identityContext: IdentityContext.Interface, cognitoService: CognitoService.Interface, createUserUseCase: CoreCreateUser.Interface, listUsersUseCase: ListUsersUseCase.Interface, repository: AdminUsersRepository.Interface);
17
+ execute(input: CreateAdminUserInput): Promise<Result<AdminUser, UseCaseAbstraction.Error>>;
18
+ }
19
+ export declare const CreateUserUseCase: typeof CreateUserUseCaseImpl & {
20
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ICreateUserUseCase>;
21
+ };
22
+ export {};
@@ -0,0 +1,80 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { AdminUsersRepository } from "@webiny/api-core/features/users/shared/abstractions.js";
3
+ import { NotAuthorizedError, UserValidationError } from "@webiny/api-core/features/users/shared/errors.js";
4
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
+ import { CreateUserUseCase } from "@webiny/api-core/features/users/CreateUser/index.js";
6
+ import { ListUsersUseCase } from "@webiny/api-core/features/users/ListUsers/index.js";
7
+ import { CreateUserUseCase as external_abstractions_js_CreateUserUseCase } from "./abstractions.js";
8
+ import { Username } from "../../domain/Username.js";
9
+ import { CognitoAccountExistsError, CognitoCreateUserError } from "../../domain/errors.js";
10
+ import { createAdminUserValidation } from "./schema.js";
11
+ import { CognitoService } from "../CognitoService/index.js";
12
+ class CreateUserUseCaseImpl {
13
+ constructor(identityContext, cognitoService, createUserUseCase, listUsersUseCase, repository){
14
+ this.identityContext = identityContext;
15
+ this.cognitoService = cognitoService;
16
+ this.createUserUseCase = createUserUseCase;
17
+ this.listUsersUseCase = listUsersUseCase;
18
+ this.repository = repository;
19
+ }
20
+ async execute(input) {
21
+ const permission = await this.identityContext.getPermission("adminUsers.user");
22
+ if (!permission) return Result.fail(new NotAuthorizedError());
23
+ const validation = createAdminUserValidation.safeParse(input);
24
+ if (!validation.success) return Result.fail(new UserValidationError(validation.error.issues[0].message));
25
+ const data = validation.data;
26
+ const { password, ...userDataWithoutPassword } = data;
27
+ const username = Username.fromUser(data);
28
+ const existingUserResult = await this.repository.get({
29
+ email: data.email
30
+ });
31
+ if (existingUserResult.isOk()) return Result.fail(new CognitoAccountExistsError(data.email));
32
+ let user;
33
+ try {
34
+ const userExists = await this.cognitoService.userExists(username);
35
+ if (userExists) return Result.fail(new CognitoAccountExistsError(data.email));
36
+ const createUserResult = await this.createUserUseCase.execute(userDataWithoutPassword);
37
+ if (createUserResult.isFail()) return Result.fail(createUserResult.error);
38
+ user = createUserResult.value;
39
+ await this.cognitoService.createUser({
40
+ username,
41
+ temporaryPassword: password,
42
+ attributes: {
43
+ givenName: data.firstName,
44
+ familyName: data.lastName,
45
+ preferredUsername: username,
46
+ email: username,
47
+ customId: user.id
48
+ }
49
+ });
50
+ await this.cognitoService.setEmailVerified(username);
51
+ const usersResult = await this.listUsersUseCase.execute();
52
+ if (usersResult.isFail()) console.error(`Failed to list users: ${usersResult.error.message}`);
53
+ else {
54
+ const users = usersResult.value;
55
+ if (users.length <= 1) await this.cognitoService.setPermanentPassword(username, password);
56
+ }
57
+ return Result.ok(user);
58
+ } catch (cognitoError) {
59
+ if (user) try {
60
+ await this.repository.delete(user);
61
+ } catch (rollbackError) {
62
+ console.error("Failed to rollback user creation:", rollbackError);
63
+ }
64
+ return Result.fail(new CognitoCreateUserError(cognitoError));
65
+ }
66
+ }
67
+ }
68
+ const CreateUserUseCase_CreateUserUseCase = external_abstractions_js_CreateUserUseCase.createImplementation({
69
+ implementation: CreateUserUseCaseImpl,
70
+ dependencies: [
71
+ IdentityContext,
72
+ CognitoService,
73
+ CreateUserUseCase,
74
+ ListUsersUseCase,
75
+ AdminUsersRepository
76
+ ]
77
+ });
78
+ export { CreateUserUseCase_CreateUserUseCase as CreateUserUseCase };
79
+
80
+ //# sourceMappingURL=CreateUserUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CreateUser/CreateUserUseCase.js","sources":["../../../../src/api/features/CreateUser/CreateUserUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { AdminUsersRepository } from \"@webiny/api-core/features/users/shared/abstractions.js\";\nimport {\n NotAuthorizedError,\n UserValidationError\n} from \"@webiny/api-core/features/users/shared/errors.js\";\nimport type { AdminUser } from \"@webiny/api-core/types/users.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { CreateUserUseCase as CoreCreateUser } from \"@webiny/api-core/features/users/CreateUser/index.js\";\nimport { ListUsersUseCase } from \"@webiny/api-core/features/users/ListUsers/index.js\";\n\nimport { CreateUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Username } from \"~/api/domain/Username.js\";\nimport { CognitoAccountExistsError, CognitoCreateUserError } from \"~/api/domain/errors.js\";\nimport { createAdminUserValidation } from \"./schema.js\";\nimport type { CreateAdminUserInput } from \"./abstractions.js\";\nimport { CognitoService } from \"~/api/features/CognitoService/index.js\";\n\nclass CreateUserUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private cognitoService: CognitoService.Interface,\n private createUserUseCase: CoreCreateUser.Interface,\n private listUsersUseCase: ListUsersUseCase.Interface,\n private repository: AdminUsersRepository.Interface\n ) {}\n\n async execute(\n input: CreateAdminUserInput\n ): Promise<Result<AdminUser, UseCaseAbstraction.Error>> {\n const permission = await this.identityContext.getPermission(\"adminUsers.user\");\n if (!permission) {\n return Result.fail(new NotAuthorizedError());\n }\n\n // Validate input (including password)\n const validation = createAdminUserValidation.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 const { password, ...userDataWithoutPassword } = data;\n\n const username = Username.fromUser(data);\n\n // Check if user exists in database (faster than Cognito check)\n const existingUserResult = await this.repository.get({ email: data.email });\n if (existingUserResult.isOk()) {\n return Result.fail(new CognitoAccountExistsError(data.email));\n }\n\n let user: AdminUser | undefined = undefined;\n\n try {\n // Check if user exists in Cognito\n const userExists = await this.cognitoService.userExists(username);\n if (userExists) {\n return Result.fail(new CognitoAccountExistsError(data.email));\n }\n // Create user in api-core\n const createUserResult = await this.createUserUseCase.execute(userDataWithoutPassword);\n if (createUserResult.isFail()) {\n return Result.fail(createUserResult.error);\n }\n\n user = createUserResult.value;\n\n // Create user in Cognito\n await this.cognitoService.createUser({\n username,\n temporaryPassword: password,\n attributes: {\n givenName: data.firstName,\n familyName: data.lastName,\n preferredUsername: username,\n email: username,\n customId: user.id\n }\n });\n\n // Set email as verified\n await this.cognitoService.setEmailVerified(username);\n\n // Check if this is the first user in the system, and if so, set permanent password\n const usersResult = await this.listUsersUseCase.execute();\n if (usersResult.isFail()) {\n // Log error but don't fail the operation\n console.error(`Failed to list users: ${usersResult.error.message}`);\n } else {\n const users = usersResult.value;\n if (users.length <= 1) {\n // This is the first user, set permanent password\n await this.cognitoService.setPermanentPassword(username, password);\n }\n }\n\n return Result.ok(user);\n } catch (cognitoError) {\n if (user) {\n // Rollback: Delete user from api-core if Cognito creation failed\n try {\n await this.repository.delete(user);\n } catch (rollbackError) {\n console.error(\"Failed to rollback user creation:\", rollbackError);\n }\n }\n return Result.fail(new CognitoCreateUserError(cognitoError as Error));\n }\n }\n}\n\nexport const CreateUserUseCase = UseCaseAbstraction.createImplementation({\n implementation: CreateUserUseCaseImpl,\n dependencies: [\n IdentityContext,\n CognitoService,\n CoreCreateUser,\n ListUsersUseCase,\n AdminUsersRepository\n ]\n});\n"],"names":["CreateUserUseCaseImpl","identityContext","cognitoService","createUserUseCase","listUsersUseCase","repository","input","permission","Result","NotAuthorizedError","validation","createAdminUserValidation","UserValidationError","data","password","userDataWithoutPassword","username","Username","existingUserResult","CognitoAccountExistsError","user","userExists","createUserResult","usersResult","console","users","cognitoError","rollbackError","CognitoCreateUserError","CreateUserUseCase","UseCaseAbstraction","IdentityContext","CognitoService","CoreCreateUser","ListUsersUseCase","AdminUsersRepository"],"mappings":";;;;;;;;;;;AAkBA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,iBAA2C,EAC3CC,gBAA4C,EAC5CC,UAA0C,CACpD;aALUJ,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,iBAAiB,GAAjBA;aACAC,gBAAgB,GAAhBA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QACFC,KAA2B,EACyB;QACpD,MAAMC,aAAa,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAC5D,IAAI,CAACA,YACD,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMC,aAAaC,0BAA0B,SAAS,CAACL;QACvD,IAAI,CAACI,WAAW,OAAO,EACnB,OAAOF,OAAO,IAAI,CAAC,IAAII,oBAAoBF,WAAW,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO;QAGjF,MAAMG,OAAOH,WAAW,IAAI;QAC5B,MAAM,EAAEI,QAAQ,EAAE,GAAGC,yBAAyB,GAAGF;QAEjD,MAAMG,WAAWC,SAAS,QAAQ,CAACJ;QAGnC,MAAMK,qBAAqB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAOL,KAAK,KAAK;QAAC;QACzE,IAAIK,mBAAmB,IAAI,IACvB,OAAOV,OAAO,IAAI,CAAC,IAAIW,0BAA0BN,KAAK,KAAK;QAG/D,IAAIO;QAEJ,IAAI;YAEA,MAAMC,aAAa,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAACL;YACxD,IAAIK,YACA,OAAOb,OAAO,IAAI,CAAC,IAAIW,0BAA0BN,KAAK,KAAK;YAG/D,MAAMS,mBAAmB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACP;YAC9D,IAAIO,iBAAiB,MAAM,IACvB,OAAOd,OAAO,IAAI,CAACc,iBAAiB,KAAK;YAG7CF,OAAOE,iBAAiB,KAAK;YAG7B,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;gBACjCN;gBACA,mBAAmBF;gBACnB,YAAY;oBACR,WAAWD,KAAK,SAAS;oBACzB,YAAYA,KAAK,QAAQ;oBACzB,mBAAmBG;oBACnB,OAAOA;oBACP,UAAUI,KAAK,EAAE;gBACrB;YACJ;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAACJ;YAG3C,MAAMO,cAAc,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO;YACvD,IAAIA,YAAY,MAAM,IAElBC,QAAQ,KAAK,CAAC,CAAC,sBAAsB,EAAED,YAAY,KAAK,CAAC,OAAO,EAAE;iBAC/D;gBACH,MAAME,QAAQF,YAAY,KAAK;gBAC/B,IAAIE,MAAM,MAAM,IAAI,GAEhB,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAACT,UAAUF;YAEjE;YAEA,OAAON,OAAO,EAAE,CAACY;QACrB,EAAE,OAAOM,cAAc;YACnB,IAAIN,MAEA,IAAI;gBACA,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAACA;YACjC,EAAE,OAAOO,eAAe;gBACpBH,QAAQ,KAAK,CAAC,qCAAqCG;YACvD;YAEJ,OAAOnB,OAAO,IAAI,CAAC,IAAIoB,uBAAuBF;QAClD;IACJ;AACJ;AAEO,MAAMG,sCAAoBC,2CAAAA,oBAAuC,CAAC;IACrE,gBAAgB9B;IAChB,cAAc;QACV+B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -0,0 +1,35 @@
1
+ import type { Result } from "@webiny/feature/api";
2
+ import type { AdminUser } from "@webiny/api-core/types/users.js";
3
+ import type { NotAuthorizedError, EmailTakenError, UserValidationError } from "@webiny/api-core/features/users/shared/errors.js";
4
+ import type { RepositoryError } from "@webiny/api-core/features/users/shared/abstractions.js";
5
+ import type { CognitoAccountExistsError, CognitoCreateUserError } from "../../../api/domain/errors.js";
6
+ export interface CreateAdminUserInput {
7
+ id?: string;
8
+ displayName?: string;
9
+ email: string;
10
+ firstName?: string;
11
+ lastName?: string;
12
+ password: string;
13
+ avatar?: Record<string, any> | null;
14
+ roles?: string[];
15
+ teams?: string[];
16
+ }
17
+ export interface ICreateUserUseCaseErrors {
18
+ authorization: NotAuthorizedError;
19
+ validation: UserValidationError;
20
+ emailTaken: EmailTakenError;
21
+ repository: RepositoryError;
22
+ cognitoAccountExists: CognitoAccountExistsError;
23
+ cognitoCreateUser: CognitoCreateUserError;
24
+ }
25
+ type CreateAdminUserError = ICreateUserUseCaseErrors[keyof ICreateUserUseCaseErrors];
26
+ export interface ICreateUserUseCase {
27
+ execute(input: CreateAdminUserInput): Promise<Result<AdminUser, CreateAdminUserError>>;
28
+ }
29
+ export declare const CreateUserUseCase: import("@webiny/di").Abstraction<ICreateUserUseCase>;
30
+ export declare namespace CreateUserUseCase {
31
+ type Interface = ICreateUserUseCase;
32
+ type Input = CreateAdminUserInput;
33
+ type Error = CreateAdminUserError;
34
+ }
35
+ export {};
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const CreateUserUseCase = createAbstraction("CreateUserUseCase");
3
+ export { CreateUserUseCase };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/CreateUser/abstractions.js","sources":["../../../../src/api/features/CreateUser/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { AdminUser } from \"@webiny/api-core/types/users.js\";\nimport type {\n NotAuthorizedError,\n EmailTakenError,\n UserValidationError\n} from \"@webiny/api-core/features/users/shared/errors.js\";\nimport type { RepositoryError } from \"@webiny/api-core/features/users/shared/abstractions.js\";\nimport type { CognitoAccountExistsError, CognitoCreateUserError } from \"~/api/domain/errors.js\";\n\nexport interface CreateAdminUserInput {\n id?: string;\n displayName?: string;\n email: string;\n firstName?: string;\n lastName?: string;\n password: string;\n avatar?: Record<string, any> | null;\n roles?: string[];\n teams?: string[];\n}\n\nexport interface ICreateUserUseCaseErrors {\n authorization: NotAuthorizedError;\n validation: UserValidationError;\n emailTaken: EmailTakenError;\n repository: RepositoryError;\n cognitoAccountExists: CognitoAccountExistsError;\n cognitoCreateUser: CognitoCreateUserError;\n}\n\ntype CreateAdminUserError = ICreateUserUseCaseErrors[keyof ICreateUserUseCaseErrors];\n\nexport interface ICreateUserUseCase {\n execute(input: CreateAdminUserInput): Promise<Result<AdminUser, CreateAdminUserError>>;\n}\n\nexport const CreateUserUseCase = createAbstraction<ICreateUserUseCase>(\"CreateUserUseCase\");\n\nexport namespace CreateUserUseCase {\n export type Interface = ICreateUserUseCase;\n export type Input = CreateAdminUserInput;\n export type Error = CreateAdminUserError;\n}\n"],"names":["CreateUserUseCase","createAbstraction"],"mappings":";AAsCO,MAAMA,oBAAoBC,kBAAsC"}
@@ -0,0 +1,4 @@
1
+ export declare const CreateUserFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };