@webiny/cognito 6.3.0 → 6.4.0-beta.0

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 (148) hide show
  1. package/Cognito.js +23 -24
  2. package/Cognito.js.map +1 -1
  3. package/admin/Cognito.js +35 -41
  4. package/admin/Cognito.js.map +1 -1
  5. package/admin/CognitoLogin.js +8 -13
  6. package/admin/CognitoLogin.js.map +1 -1
  7. package/admin/Extension.js +17 -16
  8. package/admin/Extension.js.map +1 -1
  9. package/admin/SecurityPermission.js +11 -14
  10. package/admin/SecurityPermission.js.map +1 -1
  11. package/admin/domain/permissionsSchema.js +14 -9
  12. package/admin/domain/permissionsSchema.js.map +1 -1
  13. package/admin/features/permissions/abstractions.js +2 -1
  14. package/admin/features/permissions/abstractions.js.map +1 -1
  15. package/admin/features/permissions/feature.js +2 -1
  16. package/admin/features/permissions/feature.js.map +1 -1
  17. package/admin/federatedIdentityProviders.js +7 -6
  18. package/admin/federatedIdentityProviders.js.map +1 -1
  19. package/admin/presentation/Cognito/CognitoLoginScreen.js +39 -42
  20. package/admin/presentation/Cognito/CognitoLoginScreen.js.map +1 -1
  21. package/admin/presentation/Cognito/CognitoPresenter.js +250 -275
  22. package/admin/presentation/Cognito/CognitoPresenter.js.map +1 -1
  23. package/admin/presentation/Cognito/abstractions.js +2 -1
  24. package/admin/presentation/Cognito/abstractions.js.map +1 -1
  25. package/admin/presentation/Cognito/components/Divider.js +12 -13
  26. package/admin/presentation/Cognito/components/Divider.js.map +1 -1
  27. package/admin/presentation/Cognito/components/FederatedLogin.js +24 -29
  28. package/admin/presentation/Cognito/components/FederatedLogin.js.map +1 -1
  29. package/admin/presentation/Cognito/components/FederatedProviders.js +7 -10
  30. package/admin/presentation/Cognito/components/FederatedProviders.js.map +1 -1
  31. package/admin/presentation/Cognito/components/FooterSignIn.js +9 -12
  32. package/admin/presentation/Cognito/components/FooterSignIn.js.map +1 -1
  33. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js +33 -37
  34. package/admin/presentation/Cognito/components/PasswordResetCodeSent.js.map +1 -1
  35. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js +35 -39
  36. package/admin/presentation/Cognito/components/RequestPasswordResetCode.js.map +1 -1
  37. package/admin/presentation/Cognito/components/RequireNewPassword.js +44 -48
  38. package/admin/presentation/Cognito/components/RequireNewPassword.js.map +1 -1
  39. package/admin/presentation/Cognito/components/SetNewPassword.js +70 -71
  40. package/admin/presentation/Cognito/components/SetNewPassword.js.map +1 -1
  41. package/admin/presentation/Cognito/components/SignIn.js +52 -59
  42. package/admin/presentation/Cognito/components/SignIn.js.map +1 -1
  43. package/admin/presentation/Cognito/components/View.js +41 -60
  44. package/admin/presentation/Cognito/components/View.js.map +1 -1
  45. package/admin/presentation/Cognito/feature.js +12 -11
  46. package/admin/presentation/Cognito/feature.js.map +1 -1
  47. package/admin/presentation/shared/createPasswordValidator.js +13 -24
  48. package/admin/presentation/shared/createPasswordValidator.js.map +1 -1
  49. package/admin/presentation/shared/usePasswordValidator.js +11 -10
  50. package/admin/presentation/shared/usePasswordValidator.js.map +1 -1
  51. package/admin/presentation/userMenu/AccountDetails.js +15 -18
  52. package/admin/presentation/userMenu/AccountDetails.js.map +1 -1
  53. package/admin/presentation/userMenu/useIsDefaultTenant.js +5 -11
  54. package/admin/presentation/userMenu/useIsDefaultTenant.js.map +1 -1
  55. package/admin/routes.js +16 -17
  56. package/admin/routes.js.map +1 -1
  57. package/admin/ui/UserItem.js +0 -3
  58. package/admin/ui/components/AvatarImage/AvatarImage.js +25 -37
  59. package/admin/ui/components/AvatarImage/AvatarImage.js.map +1 -1
  60. package/admin/ui/components/AvatarImage/AvatarImagePreview.js +49 -51
  61. package/admin/ui/components/AvatarImage/AvatarImagePreview.js.map +1 -1
  62. package/admin/ui/components/AvatarImage/AvatarImageTrigger.js +25 -26
  63. package/admin/ui/components/AvatarImage/AvatarImageTrigger.js.map +1 -1
  64. package/admin/ui/components/AvatarImage/index.js +0 -2
  65. package/admin/ui/views/Account/Account.js +117 -130
  66. package/admin/ui/views/Account/Account.js.map +1 -1
  67. package/admin/ui/views/Account/graphql.js +5 -4
  68. package/admin/ui/views/Account/graphql.js.map +1 -1
  69. package/admin/ui/views/Account/index.js +0 -2
  70. package/admin/ui/views/Users/UsersDataList.js +146 -159
  71. package/admin/ui/views/Users/UsersDataList.js.map +1 -1
  72. package/admin/ui/views/Users/UsersForm.js +151 -162
  73. package/admin/ui/views/Users/UsersForm.js.map +1 -1
  74. package/admin/ui/views/Users/UsersView.js +9 -9
  75. package/admin/ui/views/Users/UsersView.js.map +1 -1
  76. package/admin/ui/views/Users/components/DeleteAction.js +23 -30
  77. package/admin/ui/views/Users/components/DeleteAction.js.map +1 -1
  78. package/admin/ui/views/Users/graphql.js +9 -10
  79. package/admin/ui/views/Users/graphql.js.map +1 -1
  80. package/admin/ui/views/Users/hooks/useUserForm.js +104 -114
  81. package/admin/ui/views/Users/hooks/useUserForm.js.map +1 -1
  82. package/admin/ui/views/Users/search.js +21 -0
  83. package/admin/ui/views/Users/search.js.map +1 -0
  84. package/admin/ui/views/utils.js +9 -7
  85. package/admin/ui/views/utils.js.map +1 -1
  86. package/api/CognitoApiFeature.js +15 -17
  87. package/api/CognitoApiFeature.js.map +1 -1
  88. package/api/domain/Username.js +5 -4
  89. package/api/domain/Username.js.map +1 -1
  90. package/api/domain/errors.js +37 -56
  91. package/api/domain/errors.js.map +1 -1
  92. package/api/features/CognitoIdp/CognitoIdentityProvider.js +49 -51
  93. package/api/features/CognitoIdp/CognitoIdentityProvider.js.map +1 -1
  94. package/api/features/CognitoIdp/abstractions.js +2 -1
  95. package/api/features/CognitoIdp/abstractions.js.map +1 -1
  96. package/api/features/CognitoIdp/feature.js +6 -5
  97. package/api/features/CognitoIdp/feature.js.map +1 -1
  98. package/api/features/CognitoIdp/index.js +0 -2
  99. package/api/features/CognitoService/CognitoService.js +93 -83
  100. package/api/features/CognitoService/CognitoService.js.map +1 -1
  101. package/api/features/CognitoService/abstractions.js +3 -5
  102. package/api/features/CognitoService/abstractions.js.map +1 -1
  103. package/api/features/CognitoService/feature.js +7 -6
  104. package/api/features/CognitoService/feature.js.map +1 -1
  105. package/api/features/CognitoService/index.js +0 -2
  106. package/api/features/CreateUser/CreateUserUseCase.js +62 -88
  107. package/api/features/CreateUser/CreateUserUseCase.js.map +1 -1
  108. package/api/features/CreateUser/abstractions.js +2 -1
  109. package/api/features/CreateUser/abstractions.js.map +1 -1
  110. package/api/features/CreateUser/feature.js +6 -5
  111. package/api/features/CreateUser/feature.js.map +1 -1
  112. package/api/features/CreateUser/index.js +0 -2
  113. package/api/features/CreateUser/schema.js +14 -13
  114. package/api/features/CreateUser/schema.js.map +1 -1
  115. package/api/features/DeleteUser/DeleteUserUseCase.js +34 -41
  116. package/api/features/DeleteUser/DeleteUserUseCase.js.map +1 -1
  117. package/api/features/DeleteUser/abstractions.js +2 -1
  118. package/api/features/DeleteUser/abstractions.js.map +1 -1
  119. package/api/features/DeleteUser/feature.js +6 -5
  120. package/api/features/DeleteUser/feature.js.map +1 -1
  121. package/api/features/DeleteUser/index.js +0 -2
  122. package/api/features/UpdateUser/UpdateUserUseCase.js +49 -71
  123. package/api/features/UpdateUser/UpdateUserUseCase.js.map +1 -1
  124. package/api/features/UpdateUser/abstractions.js +2 -1
  125. package/api/features/UpdateUser/abstractions.js.map +1 -1
  126. package/api/features/UpdateUser/feature.js +6 -5
  127. package/api/features/UpdateUser/feature.js.map +1 -1
  128. package/api/features/UpdateUser/index.js +0 -2
  129. package/api/features/UpdateUser/schema.js +13 -12
  130. package/api/features/UpdateUser/schema.js.map +1 -1
  131. package/api/features/UserInstaller/UserInstaller.js +36 -36
  132. package/api/features/UserInstaller/UserInstaller.js.map +1 -1
  133. package/api/features/UserInstaller/feature.js +6 -5
  134. package/api/features/UserInstaller/feature.js.map +1 -1
  135. package/api/graphql/user.gql.js +83 -107
  136. package/api/graphql/user.gql.js.map +1 -1
  137. package/index.js +0 -2
  138. package/package.json +22 -23
  139. package/static/svg/search.43fa797c.svg +20 -0
  140. package/admin/ui/UserItem.js.map +0 -1
  141. package/admin/ui/components/AvatarImage/index.js.map +0 -1
  142. package/admin/ui/views/Account/index.js.map +0 -1
  143. package/api/features/CognitoIdp/index.js.map +0 -1
  144. package/api/features/CognitoService/index.js.map +0 -1
  145. package/api/features/CreateUser/index.js.map +0 -1
  146. package/api/features/DeleteUser/index.js.map +0 -1
  147. package/api/features/UpdateUser/index.js.map +0 -1
  148. package/index.js.map +0 -1
@@ -1,88 +1,66 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { UpdateUserUseCase as CoreUpdateUser } from "@webiny/api-core/features/users/UpdateUser/index.js";
2
+ import { UpdateUserUseCase } from "@webiny/api-core/features/users/UpdateUser/index.js";
3
3
  import { GetUserUseCase } from "@webiny/api-core/features/users/GetUser/index.js";
4
4
  import { NotAuthorizedError, UserValidationError } from "@webiny/api-core/features/users/shared/errors.js";
5
5
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
6
- import { UpdateUserUseCase as UseCaseAbstraction } from "./abstractions.js";
6
+ import { UpdateUserUseCase as external_abstractions_js_UpdateUserUseCase } from "./abstractions.js";
7
7
  import { Username } from "../../domain/Username.js";
8
8
  import { CognitoUpdateUserError } from "../../domain/errors.js";
9
9
  import { updateAdminUserValidation } from "./schema.js";
10
10
  import { CognitoService } from "../CognitoService/index.js";
11
11
  const defaultUpdateAttributes = {
12
- family_name: "lastName",
13
- given_name: "firstName",
14
- preferred_username: "email"
12
+ family_name: "lastName",
13
+ given_name: "firstName",
14
+ preferred_username: "email"
15
15
  };
16
16
  class UpdateUserUseCaseImpl {
17
- constructor(identityContext, cognitoService, updateUserUseCase, getUserUseCase) {
18
- this.identityContext = identityContext;
19
- this.cognitoService = cognitoService;
20
- this.updateUserUseCase = updateUserUseCase;
21
- this.getUserUseCase = getUserUseCase;
22
- this.updateAttributes = defaultUpdateAttributes;
23
- }
24
- async execute(id, input) {
25
- const permission = await this.identityContext.getPermission("adminUsers.user");
26
- if (!permission) {
27
- return Result.fail(new NotAuthorizedError());
17
+ constructor(identityContext, cognitoService, updateUserUseCase, getUserUseCase){
18
+ this.identityContext = identityContext;
19
+ this.cognitoService = cognitoService;
20
+ this.updateUserUseCase = updateUserUseCase;
21
+ this.getUserUseCase = getUserUseCase;
22
+ this.updateAttributes = defaultUpdateAttributes;
28
23
  }
29
-
30
- // Validate input (including password)
31
- const validation = updateAdminUserValidation.safeParse(input);
32
- if (!validation.success) {
33
- return Result.fail(new UserValidationError(validation.error.issues[0].message));
34
- }
35
- const data = validation.data;
36
- const {
37
- password,
38
- ...userDataWithoutPassword
39
- } = data;
40
-
41
- // Get original user to know the email before update
42
- const getUserResult = await this.getUserUseCase.execute({
43
- id
44
- });
45
- if (getUserResult.isFail()) {
46
- return Result.fail(getUserResult.error);
47
- }
48
- const originalUser = getUserResult.value;
49
-
50
- // Update user in api-core
51
- const updateUserResult = await this.updateUserUseCase.execute(id, userDataWithoutPassword);
52
- if (updateUserResult.isFail()) {
53
- return Result.fail(updateUserResult.error);
54
- }
55
- const updatedUser = updateUserResult.value;
56
-
57
- // Update user in Cognito
58
- try {
59
- // Build new attributes
60
- const attributes = {};
61
- Object.keys(this.updateAttributes).forEach(attr => {
62
- const mappedAttr = this.updateAttributes[attr];
63
- const attrValue = typeof mappedAttr === "function" ? mappedAttr(updatedUser) : updatedUser[mappedAttr];
64
- attributes[attr] = attrValue;
65
- });
66
-
67
- // If email changed, set email_verified to true
68
- if (originalUser.email !== updatedUser.email) {
69
- attributes["email_verified"] = "true";
70
- }
71
- await this.cognitoService.updateUserAttributes(Username.fromUser(originalUser), attributes);
72
-
73
- // Update password if provided
74
- if (password) {
75
- await this.cognitoService.setPermanentPassword(Username.fromUser(updatedUser), password);
76
- }
77
- return Result.ok(updatedUser);
78
- } catch (cognitoError) {
79
- return Result.fail(new CognitoUpdateUserError(cognitoError));
24
+ async execute(id, input) {
25
+ const permission = await this.identityContext.getPermission("adminUsers.user");
26
+ if (!permission) return Result.fail(new NotAuthorizedError());
27
+ const validation = updateAdminUserValidation.safeParse(input);
28
+ if (!validation.success) return Result.fail(new UserValidationError(validation.error.issues[0].message));
29
+ const data = validation.data;
30
+ const { password, ...userDataWithoutPassword } = data;
31
+ const getUserResult = await this.getUserUseCase.execute({
32
+ id
33
+ });
34
+ if (getUserResult.isFail()) return Result.fail(getUserResult.error);
35
+ const originalUser = getUserResult.value;
36
+ const updateUserResult = await this.updateUserUseCase.execute(id, userDataWithoutPassword);
37
+ if (updateUserResult.isFail()) return Result.fail(updateUserResult.error);
38
+ const updatedUser = updateUserResult.value;
39
+ try {
40
+ const attributes = {};
41
+ Object.keys(this.updateAttributes).forEach((attr)=>{
42
+ const mappedAttr = this.updateAttributes[attr];
43
+ const attrValue = "function" == typeof mappedAttr ? mappedAttr(updatedUser) : updatedUser[mappedAttr];
44
+ attributes[attr] = attrValue;
45
+ });
46
+ if (originalUser.email !== updatedUser.email) attributes["email_verified"] = "true";
47
+ await this.cognitoService.updateUserAttributes(Username.fromUser(originalUser), attributes);
48
+ if (password) await this.cognitoService.setPermanentPassword(Username.fromUser(updatedUser), password);
49
+ return Result.ok(updatedUser);
50
+ } catch (cognitoError) {
51
+ return Result.fail(new CognitoUpdateUserError(cognitoError));
52
+ }
80
53
  }
81
- }
82
54
  }
83
- export const UpdateUserUseCase = UseCaseAbstraction.createImplementation({
84
- implementation: UpdateUserUseCaseImpl,
85
- dependencies: [IdentityContext, CognitoService, CoreUpdateUser, GetUserUseCase]
55
+ const UpdateUserUseCase_UpdateUserUseCase = external_abstractions_js_UpdateUserUseCase.createImplementation({
56
+ implementation: UpdateUserUseCaseImpl,
57
+ dependencies: [
58
+ IdentityContext,
59
+ CognitoService,
60
+ UpdateUserUseCase,
61
+ GetUserUseCase
62
+ ]
86
63
  });
64
+ export { UpdateUserUseCase_UpdateUserUseCase as UpdateUserUseCase };
87
65
 
88
66
  //# sourceMappingURL=UpdateUserUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","UpdateUserUseCase","CoreUpdateUser","GetUserUseCase","NotAuthorizedError","UserValidationError","IdentityContext","UseCaseAbstraction","Username","CognitoUpdateUserError","updateAdminUserValidation","CognitoService","defaultUpdateAttributes","family_name","given_name","preferred_username","UpdateUserUseCaseImpl","constructor","identityContext","cognitoService","updateUserUseCase","getUserUseCase","updateAttributes","execute","id","input","permission","getPermission","fail","validation","safeParse","success","error","issues","message","data","password","userDataWithoutPassword","getUserResult","isFail","originalUser","value","updateUserResult","updatedUser","attributes","Object","keys","forEach","attr","mappedAttr","attrValue","email","updateUserAttributes","fromUser","setPermanentPassword","ok","cognitoError","createImplementation","implementation","dependencies"],"sources":["UpdateUserUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { UpdateUserUseCase as CoreUpdateUser } from \"@webiny/api-core/features/users/UpdateUser/index.js\";\nimport { GetUserUseCase } from \"@webiny/api-core/features/users/GetUser/index.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 { UpdateUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Username } from \"~/api/domain/Username.js\";\nimport { CognitoUpdateUserError } from \"~/api/domain/errors.js\";\nimport { updateAdminUserValidation } from \"./schema.js\";\nimport type { UpdateAdminUserInput } from \"./abstractions.js\";\nimport { CognitoService } from \"~/api/features/CognitoService/index.js\";\n\ntype MappedAttrType = (user: AdminUser) => string | keyof AdminUser;\n\nconst defaultUpdateAttributes = {\n family_name: \"lastName\",\n given_name: \"firstName\",\n preferred_username: \"email\"\n};\n\nclass UpdateUserUseCaseImpl implements UseCaseAbstraction.Interface {\n private updateAttributes: Record<string, string | MappedAttrType>;\n\n constructor(\n private identityContext: IdentityContext.Interface,\n private cognitoService: CognitoService.Interface,\n private updateUserUseCase: CoreUpdateUser.Interface,\n private getUserUseCase: GetUserUseCase.Interface\n ) {\n this.updateAttributes = defaultUpdateAttributes;\n }\n\n async execute(\n id: string,\n input: UpdateAdminUserInput\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 = updateAdminUserValidation.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 // Get original user to know the email before update\n const getUserResult = await this.getUserUseCase.execute({ id });\n if (getUserResult.isFail()) {\n return Result.fail(getUserResult.error);\n }\n\n const originalUser = getUserResult.value;\n\n // Update user in api-core\n const updateUserResult = await this.updateUserUseCase.execute(id, userDataWithoutPassword);\n if (updateUserResult.isFail()) {\n return Result.fail(updateUserResult.error);\n }\n\n const updatedUser = updateUserResult.value;\n\n // Update user in Cognito\n try {\n // Build new attributes\n const attributes: Record<string, string> = {};\n\n Object.keys(this.updateAttributes).forEach(attr => {\n const mappedAttr = this.updateAttributes[\n attr as keyof typeof this.updateAttributes\n ] as MappedAttrType;\n const attrValue =\n typeof mappedAttr === \"function\"\n ? mappedAttr(updatedUser)\n : updatedUser[mappedAttr];\n attributes[attr] = attrValue;\n });\n\n // If email changed, set email_verified to true\n if (originalUser.email !== updatedUser.email) {\n attributes[\"email_verified\"] = \"true\";\n }\n\n await this.cognitoService.updateUserAttributes(\n Username.fromUser(originalUser),\n attributes\n );\n\n // Update password if provided\n if (password) {\n await this.cognitoService.setPermanentPassword(\n Username.fromUser(updatedUser),\n password\n );\n }\n\n return Result.ok(updatedUser);\n } catch (cognitoError) {\n return Result.fail(new CognitoUpdateUserError(cognitoError as Error));\n }\n }\n}\n\nexport const UpdateUserUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdateUserUseCaseImpl,\n dependencies: [IdentityContext, CognitoService, CoreUpdateUser, GetUserUseCase]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"api/features/UpdateUser/UpdateUserUseCase.js","sources":["../../../../src/api/features/UpdateUser/UpdateUserUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { UpdateUserUseCase as CoreUpdateUser } from \"@webiny/api-core/features/users/UpdateUser/index.js\";\nimport { GetUserUseCase } from \"@webiny/api-core/features/users/GetUser/index.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 { UpdateUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Username } from \"~/api/domain/Username.js\";\nimport { CognitoUpdateUserError } from \"~/api/domain/errors.js\";\nimport { updateAdminUserValidation } from \"./schema.js\";\nimport type { UpdateAdminUserInput } from \"./abstractions.js\";\nimport { CognitoService } from \"~/api/features/CognitoService/index.js\";\n\ntype MappedAttrType = (user: AdminUser) => string | keyof AdminUser;\n\nconst defaultUpdateAttributes = {\n family_name: \"lastName\",\n given_name: \"firstName\",\n preferred_username: \"email\"\n};\n\nclass UpdateUserUseCaseImpl implements UseCaseAbstraction.Interface {\n private updateAttributes: Record<string, string | MappedAttrType>;\n\n constructor(\n private identityContext: IdentityContext.Interface,\n private cognitoService: CognitoService.Interface,\n private updateUserUseCase: CoreUpdateUser.Interface,\n private getUserUseCase: GetUserUseCase.Interface\n ) {\n this.updateAttributes = defaultUpdateAttributes;\n }\n\n async execute(\n id: string,\n input: UpdateAdminUserInput\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 = updateAdminUserValidation.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 // Get original user to know the email before update\n const getUserResult = await this.getUserUseCase.execute({ id });\n if (getUserResult.isFail()) {\n return Result.fail(getUserResult.error);\n }\n\n const originalUser = getUserResult.value;\n\n // Update user in api-core\n const updateUserResult = await this.updateUserUseCase.execute(id, userDataWithoutPassword);\n if (updateUserResult.isFail()) {\n return Result.fail(updateUserResult.error);\n }\n\n const updatedUser = updateUserResult.value;\n\n // Update user in Cognito\n try {\n // Build new attributes\n const attributes: Record<string, string> = {};\n\n Object.keys(this.updateAttributes).forEach(attr => {\n const mappedAttr = this.updateAttributes[\n attr as keyof typeof this.updateAttributes\n ] as MappedAttrType;\n const attrValue =\n typeof mappedAttr === \"function\"\n ? mappedAttr(updatedUser)\n : updatedUser[mappedAttr];\n attributes[attr] = attrValue;\n });\n\n // If email changed, set email_verified to true\n if (originalUser.email !== updatedUser.email) {\n attributes[\"email_verified\"] = \"true\";\n }\n\n await this.cognitoService.updateUserAttributes(\n Username.fromUser(originalUser),\n attributes\n );\n\n // Update password if provided\n if (password) {\n await this.cognitoService.setPermanentPassword(\n Username.fromUser(updatedUser),\n password\n );\n }\n\n return Result.ok(updatedUser);\n } catch (cognitoError) {\n return Result.fail(new CognitoUpdateUserError(cognitoError as Error));\n }\n }\n}\n\nexport const UpdateUserUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdateUserUseCaseImpl,\n dependencies: [IdentityContext, CognitoService, CoreUpdateUser, GetUserUseCase]\n});\n"],"names":["defaultUpdateAttributes","UpdateUserUseCaseImpl","identityContext","cognitoService","updateUserUseCase","getUserUseCase","id","input","permission","Result","NotAuthorizedError","validation","updateAdminUserValidation","UserValidationError","data","password","userDataWithoutPassword","getUserResult","originalUser","updateUserResult","updatedUser","attributes","Object","attr","mappedAttr","attrValue","Username","cognitoError","CognitoUpdateUserError","UpdateUserUseCase","UseCaseAbstraction","IdentityContext","CognitoService","CoreUpdateUser","GetUserUseCase"],"mappings":";;;;;;;;;;AAkBA,MAAMA,0BAA0B;IAC5B,aAAa;IACb,YAAY;IACZ,oBAAoB;AACxB;AAEA,MAAMC;IAGF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,iBAA2C,EAC3CC,cAAwC,CAClD;aAJUH,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,iBAAiB,GAAjBA;aACAC,cAAc,GAAdA;QAER,IAAI,CAAC,gBAAgB,GAAGL;IAC5B;IAEA,MAAM,QACFM,EAAU,EACVC,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;QAGjD,MAAMG,gBAAgB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAEX;QAAG;QAC7D,IAAIW,cAAc,MAAM,IACpB,OAAOR,OAAO,IAAI,CAACQ,cAAc,KAAK;QAG1C,MAAMC,eAAeD,cAAc,KAAK;QAGxC,MAAME,mBAAmB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACb,IAAIU;QAClE,IAAIG,iBAAiB,MAAM,IACvB,OAAOV,OAAO,IAAI,CAACU,iBAAiB,KAAK;QAG7C,MAAMC,cAAcD,iBAAiB,KAAK;QAG1C,IAAI;YAEA,MAAME,aAAqC,CAAC;YAE5CC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAACC,CAAAA;gBACvC,MAAMC,aAAa,IAAI,CAAC,gBAAgB,CACpCD,KACH;gBACD,MAAME,YACF,AAAsB,cAAtB,OAAOD,aACDA,WAAWJ,eACXA,WAAW,CAACI,WAAW;gBACjCH,UAAU,CAACE,KAAK,GAAGE;YACvB;YAGA,IAAIP,aAAa,KAAK,KAAKE,YAAY,KAAK,EACxCC,UAAU,CAAC,iBAAiB,GAAG;YAGnC,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC1CK,SAAS,QAAQ,CAACR,eAClBG;YAIJ,IAAIN,UACA,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC1CW,SAAS,QAAQ,CAACN,cAClBL;YAIR,OAAON,OAAO,EAAE,CAACW;QACrB,EAAE,OAAOO,cAAc;YACnB,OAAOlB,OAAO,IAAI,CAAC,IAAImB,uBAAuBD;QAClD;IACJ;AACJ;AAEO,MAAME,sCAAoBC,2CAAAA,oBAAuC,CAAC;IACrE,gBAAgB7B;IAChB,cAAc;QAAC8B;QAAiBC;QAAgBC;QAAgBC;KAAe;AACnF"}
@@ -1,4 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- export const UpdateUserUseCase = createAbstraction("UpdateUserUseCase");
2
+ const UpdateUserUseCase = createAbstraction("UpdateUserUseCase");
3
+ export { UpdateUserUseCase };
3
4
 
4
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","UpdateUserUseCase"],"sources":["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 { UpdateUserUseCase as CoreUpdateUserUseCase } from \"@webiny/api-core/features/users/UpdateUser/index.js\";\nimport type { CognitoUpdateUserError } from \"~/api/domain/errors.js\";\n\nexport interface UpdateAdminUserInput {\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 IUpdateUserUseCaseErrors {\n authorization: NotAuthorizedError;\n validation: UserValidationError;\n emailTaken: EmailTakenError;\n updateAdminUser: CoreUpdateUserUseCase.Error;\n cognitoUpdateUser: CognitoUpdateUserError;\n}\n\ntype IUpdateAdminUserError = IUpdateUserUseCaseErrors[keyof IUpdateUserUseCaseErrors];\n\nexport interface IUpdateUserUseCase {\n execute(\n id: string,\n input: UpdateAdminUserInput\n ): Promise<Result<AdminUser, IUpdateAdminUserError>>;\n}\n\nexport const UpdateUserUseCase = createAbstraction<IUpdateUserUseCase>(\"UpdateUserUseCase\");\n\nexport namespace UpdateUserUseCase {\n export type Interface = IUpdateUserUseCase;\n export type Input = UpdateAdminUserInput;\n export type Error = IUpdateAdminUserError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAuCvD,OAAO,MAAMC,iBAAiB,GAAGD,iBAAiB,CAAqB,mBAAmB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"api/features/UpdateUser/abstractions.js","sources":["../../../../src/api/features/UpdateUser/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 { UpdateUserUseCase as CoreUpdateUserUseCase } from \"@webiny/api-core/features/users/UpdateUser/index.js\";\nimport type { CognitoUpdateUserError } from \"~/api/domain/errors.js\";\n\nexport interface UpdateAdminUserInput {\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 IUpdateUserUseCaseErrors {\n authorization: NotAuthorizedError;\n validation: UserValidationError;\n emailTaken: EmailTakenError;\n updateAdminUser: CoreUpdateUserUseCase.Error;\n cognitoUpdateUser: CognitoUpdateUserError;\n}\n\ntype IUpdateAdminUserError = IUpdateUserUseCaseErrors[keyof IUpdateUserUseCaseErrors];\n\nexport interface IUpdateUserUseCase {\n execute(\n id: string,\n input: UpdateAdminUserInput\n ): Promise<Result<AdminUser, IUpdateAdminUserError>>;\n}\n\nexport const UpdateUserUseCase = createAbstraction<IUpdateUserUseCase>(\"UpdateUserUseCase\");\n\nexport namespace UpdateUserUseCase {\n export type Interface = IUpdateUserUseCase;\n export type Input = UpdateAdminUserInput;\n export type Error = IUpdateAdminUserError;\n}\n"],"names":["UpdateUserUseCase","createAbstraction"],"mappings":";AAuCO,MAAMA,oBAAoBC,kBAAsC"}
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { UpdateUserUseCase } from "./UpdateUserUseCase.js";
3
- export const UpdateUserFeature = createFeature({
4
- name: "UpdateUserFeature",
5
- register(container) {
6
- container.register(UpdateUserUseCase);
7
- }
3
+ const UpdateUserFeature = createFeature({
4
+ name: "UpdateUserFeature",
5
+ register (container) {
6
+ container.register(UpdateUserUseCase);
7
+ }
8
8
  });
9
+ export { UpdateUserFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","UpdateUserUseCase","UpdateUserFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UpdateUserUseCase } from \"./UpdateUserUseCase.js\";\n\nexport const UpdateUserFeature = createFeature({\n name: \"UpdateUserFeature\",\n register(container) {\n container.register(UpdateUserUseCase);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,iBAAiB;AAE1B,OAAO,MAAMC,iBAAiB,GAAGF,aAAa,CAAC;EAC3CG,IAAI,EAAE,mBAAmB;EACzBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,iBAAiB,CAAC;EACzC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"api/features/UpdateUser/feature.js","sources":["../../../../src/api/features/UpdateUser/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UpdateUserUseCase } from \"./UpdateUserUseCase.js\";\n\nexport const UpdateUserFeature = createFeature({\n name: \"UpdateUserFeature\",\n register(container) {\n container.register(UpdateUserUseCase);\n }\n});\n"],"names":["UpdateUserFeature","createFeature","container","UpdateUserUseCase"],"mappings":";;AAGO,MAAMA,oBAAoBC,cAAc;IAC3C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -1,4 +1,2 @@
1
1
  export * from "./abstractions.js";
2
2
  export * from "./feature.js";
3
-
4
- //# sourceMappingURL=index.js.map
@@ -1,16 +1,17 @@
1
1
  import { z } from "zod";
2
- export const updateAdminUserValidation = z.object({
3
- displayName: z.string().min(1).optional(),
4
- email: z.string().email().optional(),
5
- firstName: z.string().optional(),
6
- lastName: z.string().optional(),
7
- password: z.string().min(8).optional(),
8
- avatar: z.object({
9
- id: z.string().min(1),
10
- src: z.string().url()
11
- }).optional().nullable(),
12
- roles: z.array(z.string()).optional(),
13
- teams: z.array(z.string()).optional()
2
+ const updateAdminUserValidation = z.object({
3
+ displayName: z.string().min(1).optional(),
4
+ email: z.string().email().optional(),
5
+ firstName: z.string().optional(),
6
+ lastName: z.string().optional(),
7
+ password: z.string().min(8).optional(),
8
+ avatar: z.object({
9
+ id: z.string().min(1),
10
+ src: z.string().url()
11
+ }).optional().nullable(),
12
+ roles: z.array(z.string()).optional(),
13
+ teams: z.array(z.string()).optional()
14
14
  });
15
+ export { updateAdminUserValidation };
15
16
 
16
17
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["z","updateAdminUserValidation","object","displayName","string","min","optional","email","firstName","lastName","password","avatar","id","src","url","nullable","roles","array","teams"],"sources":["schema.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const updateAdminUserValidation = z.object({\n displayName: z.string().min(1).optional(),\n email: z.string().email().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n password: z.string().min(8).optional(),\n avatar: z\n .object({\n id: z.string().min(1),\n src: z.string().url()\n })\n .optional()\n .nullable(),\n roles: z.array(z.string()).optional(),\n teams: z.array(z.string()).optional()\n});\n"],"mappings":"AAAA,SAASA,CAAC,QAAQ,KAAK;AAEvB,OAAO,MAAMC,yBAAyB,GAAGD,CAAC,CAACE,MAAM,CAAC;EAC9CC,WAAW,EAAEH,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACzCC,KAAK,EAAEP,CAAC,CAACI,MAAM,CAAC,CAAC,CAACG,KAAK,CAAC,CAAC,CAACD,QAAQ,CAAC,CAAC;EACpCE,SAAS,EAAER,CAAC,CAACI,MAAM,CAAC,CAAC,CAACE,QAAQ,CAAC,CAAC;EAChCG,QAAQ,EAAET,CAAC,CAACI,MAAM,CAAC,CAAC,CAACE,QAAQ,CAAC,CAAC;EAC/BI,QAAQ,EAAEV,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACtCK,MAAM,EAAEX,CAAC,CACJE,MAAM,CAAC;IACJU,EAAE,EAAEZ,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC;IACrBQ,GAAG,EAAEb,CAAC,CAACI,MAAM,CAAC,CAAC,CAACU,GAAG,CAAC;EACxB,CAAC,CAAC,CACDR,QAAQ,CAAC,CAAC,CACVS,QAAQ,CAAC,CAAC;EACfC,KAAK,EAAEhB,CAAC,CAACiB,KAAK,CAACjB,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC,CAACE,QAAQ,CAAC,CAAC;EACrCY,KAAK,EAAElB,CAAC,CAACiB,KAAK,CAACjB,CAAC,CAACI,MAAM,CAAC,CAAC,CAAC,CAACE,QAAQ,CAAC;AACxC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"api/features/UpdateUser/schema.js","sources":["../../../../src/api/features/UpdateUser/schema.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const updateAdminUserValidation = z.object({\n displayName: z.string().min(1).optional(),\n email: z.string().email().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n password: z.string().min(8).optional(),\n avatar: z\n .object({\n id: z.string().min(1),\n src: z.string().url()\n })\n .optional()\n .nullable(),\n roles: z.array(z.string()).optional(),\n teams: z.array(z.string()).optional()\n});\n"],"names":["updateAdminUserValidation","z"],"mappings":";AAEO,MAAMA,4BAA4BC,EAAE,MAAM,CAAC;IAC9C,aAAaA,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ;IACvC,OAAOA,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ;IAClC,WAAWA,EAAE,MAAM,GAAG,QAAQ;IAC9B,UAAUA,EAAE,MAAM,GAAG,QAAQ;IAC7B,UAAUA,EAAE,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ;IACpC,QAAQA,EAAAA,MACG,CAAC;QACJ,IAAIA,EAAE,MAAM,GAAG,GAAG,CAAC;QACnB,KAAKA,EAAE,MAAM,GAAG,GAAG;IACvB,GACC,QAAQ,GACR,QAAQ;IACb,OAAOA,EAAE,KAAK,CAACA,EAAE,MAAM,IAAI,QAAQ;IACnC,OAAOA,EAAE,KAAK,CAACA,EAAE,MAAM,IAAI,QAAQ;AACvC"}
@@ -3,46 +3,46 @@ import { GetRoleUseCase } from "@webiny/api-core/features/security/roles/GetRole
3
3
  import { DeleteUserUseCase } from "../DeleteUser/index.js";
4
4
  import { CreateUserUseCase } from "../CreateUser/index.js";
5
5
  class UsersInstallerImpl {
6
- alwaysRun = false;
7
- appName = "Cognito";
8
- dependsOn = ["Security"];
9
- constructor(getRole, createUserUseCase, deleteUserUseCase) {
10
- this.getRole = getRole;
11
- this.createUserUseCase = createUserUseCase;
12
- this.deleteUserUseCase = deleteUserUseCase;
13
- }
14
- async install(_, data) {
15
- // Load `full-access` role and assign it to the new user
16
- const roleResult = await this.getRole.execute({
17
- slug: "full-access"
18
- });
19
- if (roleResult.isFail()) {
20
- throw new Error(`Failed to get full-access role: ${roleResult.error.message}`);
6
+ constructor(getRole, createUserUseCase, deleteUserUseCase){
7
+ this.getRole = getRole;
8
+ this.createUserUseCase = createUserUseCase;
9
+ this.deleteUserUseCase = deleteUserUseCase;
10
+ this.alwaysRun = false;
11
+ this.appName = "Cognito";
12
+ this.dependsOn = [
13
+ "Security"
14
+ ];
21
15
  }
22
- const role = roleResult.value;
23
-
24
- // Create user with displayName and full-access role
25
- const userWithDisplayName = {
26
- ...data,
27
- displayName: `${data.firstName} ${data.lastName}`,
28
- roles: [role.id],
29
- teams: []
30
- };
31
- const createResult = await this.createUserUseCase.execute(userWithDisplayName);
32
- if (createResult.isFail()) {
33
- throw new Error(`Failed to create admin user: ${createResult.error.message}`);
16
+ async install(_, data) {
17
+ const roleResult = await this.getRole.execute({
18
+ slug: "full-access"
19
+ });
20
+ if (roleResult.isFail()) throw new Error(`Failed to get full-access role: ${roleResult.error.message}`);
21
+ const role = roleResult.value;
22
+ const userWithDisplayName = {
23
+ ...data,
24
+ displayName: `${data.firstName} ${data.lastName}`,
25
+ roles: [
26
+ role.id
27
+ ],
28
+ teams: []
29
+ };
30
+ const createResult = await this.createUserUseCase.execute(userWithDisplayName);
31
+ if (createResult.isFail()) throw new Error(`Failed to create admin user: ${createResult.error.message}`);
32
+ this.createdUser = createResult.value;
34
33
  }
35
- this.createdUser = createResult.value;
36
- }
37
- async uninstall() {
38
- if (this.createdUser) {
39
- await this.deleteUserUseCase.execute(this.createdUser.id);
34
+ async uninstall() {
35
+ if (this.createdUser) await this.deleteUserUseCase.execute(this.createdUser.id);
40
36
  }
41
- }
42
37
  }
43
- export const UserInstaller = AppInstaller.createImplementation({
44
- implementation: UsersInstallerImpl,
45
- dependencies: [GetRoleUseCase, CreateUserUseCase, DeleteUserUseCase]
38
+ const UserInstaller = AppInstaller.createImplementation({
39
+ implementation: UsersInstallerImpl,
40
+ dependencies: [
41
+ GetRoleUseCase,
42
+ CreateUserUseCase,
43
+ DeleteUserUseCase
44
+ ]
46
45
  });
46
+ export { UserInstaller };
47
47
 
48
48
  //# sourceMappingURL=UserInstaller.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AppInstaller","GetRoleUseCase","DeleteUserUseCase","CreateUserUseCase","UsersInstallerImpl","alwaysRun","appName","dependsOn","constructor","getRole","createUserUseCase","deleteUserUseCase","install","_","data","roleResult","execute","slug","isFail","Error","error","message","role","value","userWithDisplayName","displayName","firstName","lastName","roles","id","teams","createResult","createdUser","uninstall","UserInstaller","createImplementation","implementation","dependencies"],"sources":["UserInstaller.ts"],"sourcesContent":["import type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\nimport type { AdminUser } from \"@webiny/api-core/types/users.js\";\nimport { AppInstaller } from \"@webiny/api-core/features/tenancy/InstallTenant/index.js\";\nimport { GetRoleUseCase } from \"@webiny/api-core/features/security/roles/GetRole/index.js\";\nimport { DeleteUserUseCase } from \"~/api/features/DeleteUser/index.js\";\nimport { CreateUserUseCase } from \"~/api/features/CreateUser/index.js\";\n\ninterface UserInstallationData {\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n}\n\nclass UsersInstallerImpl implements AppInstaller.Interface<UserInstallationData> {\n readonly alwaysRun = false;\n readonly appName = \"Cognito\";\n readonly dependsOn = [\"Security\"];\n private createdUser: AdminUser | undefined;\n\n constructor(\n private getRole: GetRoleUseCase.Interface,\n private createUserUseCase: CreateUserUseCase.Interface,\n private deleteUserUseCase: DeleteUserUseCase.Interface\n ) {}\n\n async install(_: Tenant, data: UserInstallationData): Promise<void> {\n // Load `full-access` role and assign it to the new user\n const roleResult = await this.getRole.execute({ slug: \"full-access\" });\n if (roleResult.isFail()) {\n throw new Error(`Failed to get full-access role: ${roleResult.error.message}`);\n }\n\n const role = roleResult.value;\n\n // Create user with displayName and full-access role\n const userWithDisplayName: CreateUserUseCase.Input = {\n ...data,\n displayName: `${data.firstName} ${data.lastName}`,\n roles: [role.id],\n teams: []\n };\n\n const createResult = await this.createUserUseCase.execute(userWithDisplayName);\n if (createResult.isFail()) {\n throw new Error(`Failed to create admin user: ${createResult.error.message}`);\n }\n\n this.createdUser = createResult.value;\n }\n\n async uninstall(): Promise<void> {\n if (this.createdUser) {\n await this.deleteUserUseCase.execute(this.createdUser.id);\n }\n }\n}\n\nexport const UserInstaller = AppInstaller.createImplementation({\n implementation: UsersInstallerImpl,\n dependencies: [GetRoleUseCase, CreateUserUseCase, DeleteUserUseCase]\n});\n"],"mappings":"AAEA,SAASA,YAAY,QAAQ,0DAA0D;AACvF,SAASC,cAAc,QAAQ,2DAA2D;AAC1F,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAS1B,MAAMC,kBAAkB,CAAyD;EACpEC,SAAS,GAAG,KAAK;EACjBC,OAAO,GAAG,SAAS;EACnBC,SAAS,GAAG,CAAC,UAAU,CAAC;EAGjCC,WAAWA,CACCC,OAAiC,EACjCC,iBAA8C,EAC9CC,iBAA8C,EACxD;IAAA,KAHUF,OAAiC,GAAjCA,OAAiC;IAAA,KACjCC,iBAA8C,GAA9CA,iBAA8C;IAAA,KAC9CC,iBAA8C,GAA9CA,iBAA8C;EACvD;EAEH,MAAMC,OAAOA,CAACC,CAAS,EAAEC,IAA0B,EAAiB;IAChE;IACA,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACN,OAAO,CAACO,OAAO,CAAC;MAAEC,IAAI,EAAE;IAAc,CAAC,CAAC;IACtE,IAAIF,UAAU,CAACG,MAAM,CAAC,CAAC,EAAE;MACrB,MAAM,IAAIC,KAAK,CAAC,mCAAmCJ,UAAU,CAACK,KAAK,CAACC,OAAO,EAAE,CAAC;IAClF;IAEA,MAAMC,IAAI,GAAGP,UAAU,CAACQ,KAAK;;IAE7B;IACA,MAAMC,mBAA4C,GAAG;MACjD,GAAGV,IAAI;MACPW,WAAW,EAAE,GAAGX,IAAI,CAACY,SAAS,IAAIZ,IAAI,CAACa,QAAQ,EAAE;MACjDC,KAAK,EAAE,CAACN,IAAI,CAACO,EAAE,CAAC;MAChBC,KAAK,EAAE;IACX,CAAC;IAED,MAAMC,YAAY,GAAG,MAAM,IAAI,CAACrB,iBAAiB,CAACM,OAAO,CAACQ,mBAAmB,CAAC;IAC9E,IAAIO,YAAY,CAACb,MAAM,CAAC,CAAC,EAAE;MACvB,MAAM,IAAIC,KAAK,CAAC,gCAAgCY,YAAY,CAACX,KAAK,CAACC,OAAO,EAAE,CAAC;IACjF;IAEA,IAAI,CAACW,WAAW,GAAGD,YAAY,CAACR,KAAK;EACzC;EAEA,MAAMU,SAASA,CAAA,EAAkB;IAC7B,IAAI,IAAI,CAACD,WAAW,EAAE;MAClB,MAAM,IAAI,CAACrB,iBAAiB,CAACK,OAAO,CAAC,IAAI,CAACgB,WAAW,CAACH,EAAE,CAAC;IAC7D;EACJ;AACJ;AAEA,OAAO,MAAMK,aAAa,GAAGlC,YAAY,CAACmC,oBAAoB,CAAC;EAC3DC,cAAc,EAAEhC,kBAAkB;EAClCiC,YAAY,EAAE,CAACpC,cAAc,EAAEE,iBAAiB,EAAED,iBAAiB;AACvE,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"api/features/UserInstaller/UserInstaller.js","sources":["../../../../src/api/features/UserInstaller/UserInstaller.ts"],"sourcesContent":["import type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\nimport type { AdminUser } from \"@webiny/api-core/types/users.js\";\nimport { AppInstaller } from \"@webiny/api-core/features/tenancy/InstallTenant/index.js\";\nimport { GetRoleUseCase } from \"@webiny/api-core/features/security/roles/GetRole/index.js\";\nimport { DeleteUserUseCase } from \"~/api/features/DeleteUser/index.js\";\nimport { CreateUserUseCase } from \"~/api/features/CreateUser/index.js\";\n\ninterface UserInstallationData {\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n}\n\nclass UsersInstallerImpl implements AppInstaller.Interface<UserInstallationData> {\n readonly alwaysRun = false;\n readonly appName = \"Cognito\";\n readonly dependsOn = [\"Security\"];\n private createdUser: AdminUser | undefined;\n\n constructor(\n private getRole: GetRoleUseCase.Interface,\n private createUserUseCase: CreateUserUseCase.Interface,\n private deleteUserUseCase: DeleteUserUseCase.Interface\n ) {}\n\n async install(_: Tenant, data: UserInstallationData): Promise<void> {\n // Load `full-access` role and assign it to the new user\n const roleResult = await this.getRole.execute({ slug: \"full-access\" });\n if (roleResult.isFail()) {\n throw new Error(`Failed to get full-access role: ${roleResult.error.message}`);\n }\n\n const role = roleResult.value;\n\n // Create user with displayName and full-access role\n const userWithDisplayName: CreateUserUseCase.Input = {\n ...data,\n displayName: `${data.firstName} ${data.lastName}`,\n roles: [role.id],\n teams: []\n };\n\n const createResult = await this.createUserUseCase.execute(userWithDisplayName);\n if (createResult.isFail()) {\n throw new Error(`Failed to create admin user: ${createResult.error.message}`);\n }\n\n this.createdUser = createResult.value;\n }\n\n async uninstall(): Promise<void> {\n if (this.createdUser) {\n await this.deleteUserUseCase.execute(this.createdUser.id);\n }\n }\n}\n\nexport const UserInstaller = AppInstaller.createImplementation({\n implementation: UsersInstallerImpl,\n dependencies: [GetRoleUseCase, CreateUserUseCase, DeleteUserUseCase]\n});\n"],"names":["UsersInstallerImpl","getRole","createUserUseCase","deleteUserUseCase","_","data","roleResult","Error","role","userWithDisplayName","createResult","UserInstaller","AppInstaller","GetRoleUseCase","CreateUserUseCase","DeleteUserUseCase"],"mappings":";;;;AAcA,MAAMA;IAMF,YACYC,OAAiC,EACjCC,iBAA8C,EAC9CC,iBAA8C,CACxD;aAHUF,OAAO,GAAPA;aACAC,iBAAiB,GAAjBA;aACAC,iBAAiB,GAAjBA;aARH,SAAS,GAAG;aACZ,OAAO,GAAG;aACV,SAAS,GAAG;YAAC;SAAW;IAO9B;IAEH,MAAM,QAAQC,CAAS,EAAEC,IAA0B,EAAiB;QAEhE,MAAMC,aAAa,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,MAAM;QAAc;QACpE,IAAIA,WAAW,MAAM,IACjB,MAAM,IAAIC,MAAM,CAAC,gCAAgC,EAAED,WAAW,KAAK,CAAC,OAAO,EAAE;QAGjF,MAAME,OAAOF,WAAW,KAAK;QAG7B,MAAMG,sBAA+C;YACjD,GAAGJ,IAAI;YACP,aAAa,GAAGA,KAAK,SAAS,CAAC,CAAC,EAAEA,KAAK,QAAQ,EAAE;YACjD,OAAO;gBAACG,KAAK,EAAE;aAAC;YAChB,OAAO,EAAE;QACb;QAEA,MAAME,eAAe,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACD;QAC1D,IAAIC,aAAa,MAAM,IACnB,MAAM,IAAIH,MAAM,CAAC,6BAA6B,EAAEG,aAAa,KAAK,CAAC,OAAO,EAAE;QAGhF,IAAI,CAAC,WAAW,GAAGA,aAAa,KAAK;IACzC;IAEA,MAAM,YAA2B;QAC7B,IAAI,IAAI,CAAC,WAAW,EAChB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;IAEhE;AACJ;AAEO,MAAMC,gBAAgBC,aAAa,oBAAoB,CAAC;IAC3D,gBAAgBZ;IAChB,cAAc;QAACa;QAAgBC;QAAmBC;KAAkB;AACxE"}
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { UserInstaller } from "./UserInstaller.js";
3
- export const UserInstallerFeature = createFeature({
4
- name: "UserInstallerFeature",
5
- register(container) {
6
- container.register(UserInstaller);
7
- }
3
+ const UserInstallerFeature = createFeature({
4
+ name: "UserInstallerFeature",
5
+ register (container) {
6
+ container.register(UserInstaller);
7
+ }
8
8
  });
9
+ export { UserInstallerFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","UserInstaller","UserInstallerFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UserInstaller } from \"./UserInstaller.js\";\n\nexport const UserInstallerFeature = createFeature({\n name: \"UserInstallerFeature\",\n register(container) {\n container.register(UserInstaller);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,aAAa;AAEtB,OAAO,MAAMC,oBAAoB,GAAGF,aAAa,CAAC;EAC9CG,IAAI,EAAE,sBAAsB;EAC5BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,aAAa,CAAC;EACrC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"api/features/UserInstaller/feature.js","sources":["../../../../src/api/features/UserInstaller/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UserInstaller } from \"./UserInstaller.js\";\n\nexport const UserInstallerFeature = createFeature({\n name: \"UserInstallerFeature\",\n register(container) {\n container.register(UserInstaller);\n }\n});\n"],"names":["UserInstallerFeature","createFeature","container","UserInstaller"],"mappings":";;AAGO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}