@drax/identity-back 0.1.2 → 0.1.6

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 (119) hide show
  1. package/dist/middleware/apiKeyMiddleware.js +1 -1
  2. package/dist/repository/mongo/UserApiKeyMongoRepository.js +1 -1
  3. package/dist/routes/UserApiKeyRoutes.js +3 -3
  4. package/dist/services/RoleService.js +34 -8
  5. package/package.json +3 -4
  6. package/src/middleware/apiKeyMiddleware.ts +1 -1
  7. package/src/repository/mongo/UserApiKeyMongoRepository.ts +1 -1
  8. package/src/routes/UserApiKeyRoutes.ts +3 -3
  9. package/src/services/RoleService.ts +41 -16
  10. package/tsconfig.tsbuildinfo +1 -1
  11. package/types/config/IdentityConfig.d.ts +0 -12
  12. package/types/config/IdentityConfig.d.ts.map +0 -1
  13. package/types/errors/BadCredentialsError.d.ts +0 -6
  14. package/types/errors/BadCredentialsError.d.ts.map +0 -1
  15. package/types/errors/UnauthorizedError.d.ts +0 -6
  16. package/types/errors/UnauthorizedError.d.ts.map +0 -1
  17. package/types/factory/RoleServiceFactory.d.ts +0 -4
  18. package/types/factory/RoleServiceFactory.d.ts.map +0 -1
  19. package/types/factory/TenantServiceFactory.d.ts +0 -4
  20. package/types/factory/TenantServiceFactory.d.ts.map +0 -1
  21. package/types/factory/UserApiKeyServiceFactory.d.ts +0 -4
  22. package/types/factory/UserApiKeyServiceFactory.d.ts.map +0 -1
  23. package/types/factory/UserServiceFactory.d.ts +0 -4
  24. package/types/factory/UserServiceFactory.d.ts.map +0 -1
  25. package/types/graphql/index.d.ts +0 -6
  26. package/types/graphql/index.d.ts.map +0 -1
  27. package/types/graphql/resolvers/role.resolvers.d.ts +0 -52
  28. package/types/graphql/resolvers/role.resolvers.d.ts.map +0 -1
  29. package/types/graphql/resolvers/tenant.resolvers.d.ts +0 -49
  30. package/types/graphql/resolvers/tenant.resolvers.d.ts.map +0 -1
  31. package/types/graphql/resolvers/user-api-key.resolvers.d.ts +0 -37
  32. package/types/graphql/resolvers/user-api-key.resolvers.d.ts.map +0 -1
  33. package/types/graphql/resolvers/user.resolvers.d.ts +0 -67
  34. package/types/graphql/resolvers/user.resolvers.d.ts.map +0 -1
  35. package/types/index.d.ts +0 -35
  36. package/types/index.d.ts.map +0 -1
  37. package/types/interfaces/IRoleRepository.d.ts +0 -9
  38. package/types/interfaces/IRoleRepository.d.ts.map +0 -1
  39. package/types/interfaces/ITenantRepository.d.ts +0 -9
  40. package/types/interfaces/ITenantRepository.d.ts.map +0 -1
  41. package/types/interfaces/IUserApiKeyRepository.d.ts +0 -7
  42. package/types/interfaces/IUserApiKeyRepository.d.ts.map +0 -1
  43. package/types/interfaces/IUserRepository.d.ts +0 -10
  44. package/types/interfaces/IUserRepository.d.ts.map +0 -1
  45. package/types/middleware/apiKeyMiddleware.d.ts +0 -4
  46. package/types/middleware/apiKeyMiddleware.d.ts.map +0 -1
  47. package/types/middleware/jwtMiddleware.d.ts +0 -4
  48. package/types/middleware/jwtMiddleware.d.ts.map +0 -1
  49. package/types/middleware/rbacMiddleware.d.ts +0 -4
  50. package/types/middleware/rbacMiddleware.d.ts.map +0 -1
  51. package/types/models/RoleModel.d.ts +0 -16
  52. package/types/models/RoleModel.d.ts.map +0 -1
  53. package/types/models/TenantModel.d.ts +0 -16
  54. package/types/models/TenantModel.d.ts.map +0 -1
  55. package/types/models/UserApiKeyModel.d.ts +0 -16
  56. package/types/models/UserApiKeyModel.d.ts.map +0 -1
  57. package/types/models/UserGroupModel.d.ts +0 -16
  58. package/types/models/UserGroupModel.d.ts.map +0 -1
  59. package/types/models/UserModel.d.ts +0 -16
  60. package/types/models/UserModel.d.ts.map +0 -1
  61. package/types/permissions/IdentityPermissions.d.ts +0 -27
  62. package/types/permissions/IdentityPermissions.d.ts.map +0 -1
  63. package/types/rbac/Rbac.d.ts +0 -15
  64. package/types/rbac/Rbac.d.ts.map +0 -1
  65. package/types/repository/mongo/RoleMongoRepository.d.ts +0 -14
  66. package/types/repository/mongo/RoleMongoRepository.d.ts.map +0 -1
  67. package/types/repository/mongo/TenantMongoRepository.d.ts +0 -14
  68. package/types/repository/mongo/TenantMongoRepository.d.ts.map +0 -1
  69. package/types/repository/mongo/UserApiKeyMongoRepository.d.ts +0 -14
  70. package/types/repository/mongo/UserApiKeyMongoRepository.d.ts.map +0 -1
  71. package/types/repository/mongo/UserMongoRepository.d.ts +0 -17
  72. package/types/repository/mongo/UserMongoRepository.d.ts.map +0 -1
  73. package/types/repository/sqlite/RoleSqliteRepository.d.ts +0 -22
  74. package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +0 -1
  75. package/types/repository/sqlite/TenantSqliteRepository.d.ts +0 -19
  76. package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +0 -1
  77. package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts +0 -19
  78. package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts.map +0 -1
  79. package/types/repository/sqlite/UserSqliteRepository.d.ts +0 -25
  80. package/types/repository/sqlite/UserSqliteRepository.d.ts.map +0 -1
  81. package/types/routes/RoleRoutes.d.ts +0 -4
  82. package/types/routes/RoleRoutes.d.ts.map +0 -1
  83. package/types/routes/TenantRoutes.d.ts +0 -4
  84. package/types/routes/TenantRoutes.d.ts.map +0 -1
  85. package/types/routes/UserApiKeyRoutes.d.ts +0 -4
  86. package/types/routes/UserApiKeyRoutes.d.ts.map +0 -1
  87. package/types/routes/UserAvatarRoutes.d.ts +0 -4
  88. package/types/routes/UserRoutes.d.ts +0 -4
  89. package/types/routes/UserRoutes.d.ts.map +0 -1
  90. package/types/services/PermissionService.d.ts +0 -9
  91. package/types/services/PermissionService.d.ts.map +0 -1
  92. package/types/services/RoleService.d.ts +0 -16
  93. package/types/services/RoleService.d.ts.map +0 -1
  94. package/types/services/TenantService.d.ts +0 -16
  95. package/types/services/TenantService.d.ts.map +0 -1
  96. package/types/services/UserApiKeyService.d.ts +0 -15
  97. package/types/services/UserApiKeyService.d.ts.map +0 -1
  98. package/types/services/UserService.d.ts +0 -21
  99. package/types/services/UserService.d.ts.map +0 -1
  100. package/types/setup/CreateOrUpdateRole.d.ts +0 -5
  101. package/types/setup/CreateOrUpdateRole.d.ts.map +0 -1
  102. package/types/setup/CreateUserIfNotExist.d.ts +0 -5
  103. package/types/setup/CreateUserIfNotExist.d.ts.map +0 -1
  104. package/types/setup/LoadIdentityConfigFromEnv.d.ts +0 -4
  105. package/types/setup/LoadIdentityConfigFromEnv.d.ts.map +0 -1
  106. package/types/setup/LoadPermissions.d.ts +0 -4
  107. package/types/setup/LoadPermissions.d.ts.map +0 -1
  108. package/types/setup/RecoveryUserPassword.d.ts +0 -4
  109. package/types/setup/RecoveryUserPassword.d.ts.map +0 -1
  110. package/types/utils/AuthUtils.d.ts +0 -18
  111. package/types/utils/AuthUtils.d.ts.map +0 -1
  112. package/types/zod/RoleZod.d.ts +0 -10
  113. package/types/zod/RoleZod.d.ts.map +0 -1
  114. package/types/zod/TenantZod.d.ts +0 -10
  115. package/types/zod/TenantZod.d.ts.map +0 -1
  116. package/types/zod/UserApiKeyZod.d.ts +0 -16
  117. package/types/zod/UserApiKeyZod.d.ts.map +0 -1
  118. package/types/zod/UserZod.d.ts +0 -53
  119. package/types/zod/UserZod.d.ts.map +0 -1
@@ -16,7 +16,7 @@ async function apiKeyMiddleware(request, reply) {
16
16
  if (userApiKey && userApiKey.user) {
17
17
  request.authUser = userApiKey.user;
18
18
  request.authUser.roleId = userApiKey.user.role.id;
19
- request.authUser.tenantId = userApiKey.user.tenant.id;
19
+ request.authUser.tenantId = userApiKey.user?.tenant?.id;
20
20
  }
21
21
  }
22
22
  return;
@@ -44,7 +44,7 @@ class UserMongoRepository {
44
44
  return userApiKey;
45
45
  }
46
46
  async findBySecret(secret) {
47
- const userApiKey = await UserApiKeyModel.findOne({ secret: secret }).populate({ path: 'user', populate: { path: 'tenant role' } }).exec();
47
+ const userApiKey = await UserApiKeyModel.findOne({ secret: { $eq: secret }, deleted: { $ne: true } }).populate({ path: 'user', populate: { path: 'tenant role' } }).exec();
48
48
  return userApiKey;
49
49
  }
50
50
  async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
@@ -41,7 +41,7 @@ async function UserApiKeyRoutes(fastify, options) {
41
41
  });
42
42
  fastify.post('/api/user-api-keys', async (request, reply) => {
43
43
  try {
44
- request.rbac.assertPermission(IdentityPermissions.CreateUser);
44
+ request.rbac.assertPermission(IdentityPermissions.CreateUserApiKey);
45
45
  const payload = request.body;
46
46
  payload.user = request.rbac.authUser.id;
47
47
  const userApiKeyService = UserApiKeyServiceFactory();
@@ -65,7 +65,7 @@ async function UserApiKeyRoutes(fastify, options) {
65
65
  });
66
66
  fastify.put('/api/user-api-keys/:id', async (request, reply) => {
67
67
  try {
68
- request.rbac.assertPermission(IdentityPermissions.UpdateUser);
68
+ request.rbac.assertPermission(IdentityPermissions.UpdateUserApiKey);
69
69
  const id = request.params.id;
70
70
  const payload = request.body;
71
71
  const userApiKeyService = UserApiKeyServiceFactory();
@@ -93,7 +93,7 @@ async function UserApiKeyRoutes(fastify, options) {
93
93
  });
94
94
  fastify.delete('/api/user-api-keys/:id', async (request, reply) => {
95
95
  try {
96
- request.rbac.assertPermission(IdentityPermissions.DeleteUser);
96
+ request.rbac.assertPermission(IdentityPermissions.DeleteUserApiKey);
97
97
  const id = request.params.id;
98
98
  const userApiKeyService = UserApiKeyServiceFactory();
99
99
  let r = await userApiKeyService.delete(id);
@@ -14,6 +14,7 @@ class RoleService {
14
14
  return role;
15
15
  }
16
16
  catch (e) {
17
+ console.error("Error creating role", e);
17
18
  if (e instanceof ZodError) {
18
19
  throw ZodErrorToValidationError(e, roleData);
19
20
  }
@@ -28,6 +29,7 @@ class RoleService {
28
29
  return role;
29
30
  }
30
31
  catch (e) {
32
+ console.error("Error updating role", e);
31
33
  if (e instanceof ZodError) {
32
34
  throw ZodErrorToValidationError(e, roleData);
33
35
  }
@@ -35,24 +37,48 @@ class RoleService {
35
37
  }
36
38
  }
37
39
  async delete(id) {
38
- const deletedRole = await this._repository.delete(id);
39
- return deletedRole;
40
+ try {
41
+ const deletedRole = await this._repository.delete(id);
42
+ return deletedRole;
43
+ }
44
+ catch (e) {
45
+ console.error("Error deleting role", e);
46
+ throw e;
47
+ }
40
48
  }
41
49
  async findById(id) {
42
- const role = await this._repository.findById(id);
43
- return role;
50
+ try {
51
+ const role = await this._repository.findById(id);
52
+ return role;
53
+ }
54
+ catch (e) {
55
+ console.error("Error finding role by id", e);
56
+ throw e;
57
+ }
44
58
  }
45
59
  async findByName(name) {
46
- const role = await this._repository.findByName(name);
47
- return role;
60
+ try {
61
+ const role = await this._repository.findByName(name);
62
+ return role;
63
+ }
64
+ catch (e) {
65
+ console.error("Error finding role by name", e);
66
+ throw e;
67
+ }
48
68
  }
49
69
  async fetchAll() {
50
70
  const roles = await this._repository.fetchAll();
51
71
  return roles;
52
72
  }
53
73
  async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
54
- const pagination = await this._repository.paginate({ page, limit, orderBy, orderDesc, search, filters });
55
- return pagination;
74
+ try {
75
+ const pagination = await this._repository.paginate({ page, limit, orderBy, orderDesc, search, filters });
76
+ return pagination;
77
+ }
78
+ catch (e) {
79
+ console.error("Error paginating roles", e);
80
+ throw e;
81
+ }
56
82
  }
57
83
  }
58
84
  export default RoleService;
package/package.json CHANGED
@@ -3,13 +3,12 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.1.2",
6
+ "version": "0.1.6",
7
7
  "description": "Identity module for user management, authentication and authorization.",
8
8
  "main": "dist/index.js",
9
9
  "types": "types/index.d.ts",
10
10
  "type": "module",
11
11
  "scripts": {
12
- "serve": "nodemon --exec node --loader ts-node/esm src/index.ts",
13
12
  "prepublish": "tsc && npm run copygql",
14
13
  "clean": "rm -rf dist",
15
14
  "copygql": "copyfiles -u 1 ./**/*.graphql dist/",
@@ -29,7 +28,7 @@
29
28
  "dependencies": {
30
29
  "@drax/common-back": "^0.1.0",
31
30
  "@drax/common-share": "^0.1.0",
32
- "@drax/identity-share": "^0.1.0",
31
+ "@drax/identity-share": "^0.1.6",
33
32
  "bcryptjs": "^2.4.3",
34
33
  "express-jwt": "^8.4.1",
35
34
  "graphql": "^16.8.2",
@@ -60,5 +59,5 @@
60
59
  "debug": "0"
61
60
  }
62
61
  },
63
- "gitHead": "79fef47b0aa97b4c46f057396dcafeb132ed1258"
62
+ "gitHead": "7f3a48c237eab6837d6b620ac8bfb0dc395c9fa6"
64
63
  }
@@ -21,7 +21,7 @@ async function apiKeyMiddleware (request, reply) {
21
21
  if(userApiKey && userApiKey.user){
22
22
  request.authUser = userApiKey.user
23
23
  request.authUser.roleId = userApiKey.user.role.id
24
- request.authUser.tenantId = userApiKey.user.tenant.id
24
+ request.authUser.tenantId = userApiKey.user?.tenant?.id
25
25
  }
26
26
  }
27
27
  return
@@ -61,7 +61,7 @@ class UserMongoRepository implements IUserApiKeyRepository {
61
61
  }
62
62
 
63
63
  async findBySecret(secret: string): Promise<IUserApiKey> {
64
- const userApiKey: mongoose.HydratedDocument<IUserApiKey> = await UserApiKeyModel.findOne({secret: secret}).populate({path: 'user', populate: {path: 'tenant role'}}).exec()
64
+ const userApiKey: mongoose.HydratedDocument<IUserApiKey> = await UserApiKeyModel.findOne({secret: {$eq: secret}, deleted: {$ne: true} }).populate({path: 'user', populate: {path: 'tenant role'}}).exec()
65
65
  return userApiKey
66
66
  }
67
67
 
@@ -51,7 +51,7 @@ async function UserApiKeyRoutes(fastify, options) {
51
51
 
52
52
  fastify.post('/api/user-api-keys', async (request, reply): Promise<IUserApiKey> => {
53
53
  try {
54
- request.rbac.assertPermission(IdentityPermissions.CreateUser)
54
+ request.rbac.assertPermission(IdentityPermissions.CreateUserApiKey)
55
55
  const payload = request.body
56
56
  payload.user = request.rbac.authUser.id
57
57
 
@@ -76,7 +76,7 @@ async function UserApiKeyRoutes(fastify, options) {
76
76
 
77
77
  fastify.put('/api/user-api-keys/:id', async (request, reply): Promise<IUserApiKey> => {
78
78
  try {
79
- request.rbac.assertPermission(IdentityPermissions.UpdateUser)
79
+ request.rbac.assertPermission(IdentityPermissions.UpdateUserApiKey)
80
80
  const id = request.params.id
81
81
  const payload = request.body
82
82
  const userApiKeyService = UserApiKeyServiceFactory()
@@ -102,7 +102,7 @@ async function UserApiKeyRoutes(fastify, options) {
102
102
 
103
103
  fastify.delete('/api/user-api-keys/:id', async (request, reply): Promise<any> => {
104
104
  try {
105
- request.rbac.assertPermission(IdentityPermissions.DeleteUser)
105
+ request.rbac.assertPermission(IdentityPermissions.DeleteUserApiKey)
106
106
  const id = request.params.id
107
107
  const userApiKeyService = UserApiKeyServiceFactory()
108
108
  let r = await userApiKeyService.delete(id)
@@ -1,5 +1,5 @@
1
1
  import {IRoleRepository} from "../interfaces/IRoleRepository";
2
- import { ValidationError, ZodErrorToValidationError} from "@drax/common-back"
2
+ import {ValidationError, ZodErrorToValidationError} from "@drax/common-back"
3
3
  import {roleSchema} from "../zod/RoleZod.js";
4
4
  import {ZodError} from "zod";
5
5
  import UnauthorizedError from "../errors/UnauthorizedError.js";
@@ -22,6 +22,7 @@ class RoleService {
22
22
  const role = await this._repository.create(roleData)
23
23
  return role
24
24
  } catch (e) {
25
+ console.error("Error creating role", e)
25
26
  if (e instanceof ZodError) {
26
27
  throw ZodErrorToValidationError(e, roleData)
27
28
  }
@@ -36,6 +37,7 @@ class RoleService {
36
37
  const role = await this._repository.update(id, roleData)
37
38
  return role
38
39
  } catch (e) {
40
+ console.error("Error updating role", e)
39
41
  if (e instanceof ZodError) {
40
42
  throw ZodErrorToValidationError(e, roleData)
41
43
  }
@@ -44,19 +46,35 @@ class RoleService {
44
46
  }
45
47
 
46
48
  async delete(id: string): Promise<boolean> {
47
-
48
- const deletedRole = await this._repository.delete(id);
49
- return deletedRole;
49
+ try {
50
+ const deletedRole = await this._repository.delete(id);
51
+ return deletedRole;
52
+ } catch (e) {
53
+ console.error("Error deleting role", e)
54
+ throw e
55
+ }
50
56
  }
51
57
 
52
58
  async findById(id: string): Promise<IRole | null> {
53
- const role: IRole = await this._repository.findById(id);
54
- return role
59
+ try{
60
+ const role: IRole = await this._repository.findById(id);
61
+ return role
62
+ }catch (e){
63
+ console.error("Error finding role by id", e)
64
+ throw e;
65
+ }
66
+
55
67
  }
56
68
 
57
69
  async findByName(name: string): Promise<IRole | null> {
58
- const role: IRole = await this._repository.findByName(name);
59
- return role
70
+ try{
71
+ const role: IRole = await this._repository.findByName(name);
72
+ return role
73
+ }catch (e){
74
+ console.error("Error finding role by name", e)
75
+ throw e;
76
+ }
77
+
60
78
  }
61
79
 
62
80
  async fetchAll(): Promise<IRole[]> {
@@ -65,14 +83,21 @@ class RoleService {
65
83
  }
66
84
 
67
85
  async paginate({
68
- page= 1,
69
- limit= 5,
70
- orderBy= '',
71
- orderDesc= false,
72
- search= '',
73
- filters= []} : IDraxPaginateOptions): Promise<IDraxPaginateResult<IRole>>{
74
- const pagination = await this._repository.paginate({page, limit, orderBy, orderDesc, search, filters});
75
- return pagination;
86
+ page = 1,
87
+ limit = 5,
88
+ orderBy = '',
89
+ orderDesc = false,
90
+ search = '',
91
+ filters = []
92
+ }: IDraxPaginateOptions): Promise<IDraxPaginateResult<IRole>> {
93
+ try{
94
+ const pagination = await this._repository.paginate({page, limit, orderBy, orderDesc, search, filters});
95
+ return pagination;
96
+ }catch (e){
97
+ console.error("Error paginating roles", e)
98
+ throw e;
99
+ }
100
+
76
101
  }
77
102
 
78
103