@forklaunch/implementation-iam-base 0.1.2 → 0.1.4

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 (84) hide show
  1. package/lib/__test__/schemaEquality.test.d.ts +2 -0
  2. package/lib/__test__/schemaEquality.test.d.ts.map +1 -0
  3. package/lib/__test__/schemaEquality.test.js +175 -0
  4. package/{schemas/typebox → lib/eject/schemas/zod}/organization.schema.ts +4 -4
  5. package/{schemas/typebox → lib/eject/schemas/zod}/permission.schema.ts +1 -1
  6. package/{schemas/typebox → lib/eject/schemas/zod}/role.schema.ts +4 -4
  7. package/{schemas/typebox → lib/eject/schemas/zod}/user.schema.ts +4 -4
  8. package/lib/eject/services/services/organization.service.ts +146 -0
  9. package/lib/eject/services/services/permission.service.ts +349 -0
  10. package/lib/eject/services/services/role.service.ts +182 -0
  11. package/lib/eject/services/user.service.ts +225 -0
  12. package/lib/index.d.ts +9 -0
  13. package/lib/index.d.ts.map +1 -0
  14. package/lib/jest.config.d.ts +4 -0
  15. package/lib/jest.config.d.ts.map +1 -0
  16. package/lib/jest.config.js +19 -0
  17. package/lib/schemas/organization.schema.d.ts +58 -0
  18. package/lib/schemas/organization.schema.d.ts.map +1 -0
  19. package/lib/schemas/organization.schema.js +14 -0
  20. package/lib/schemas/permission.schema.d.ts +42 -0
  21. package/lib/schemas/permission.schema.d.ts.map +1 -0
  22. package/lib/schemas/permission.schema.js +14 -0
  23. package/lib/schemas/role.schema.d.ts +42 -0
  24. package/lib/schemas/role.schema.d.ts.map +1 -0
  25. package/lib/schemas/role.schema.js +14 -0
  26. package/lib/schemas/typebox/organization.schema.d.ts +30 -0
  27. package/lib/schemas/typebox/organization.schema.d.ts.map +1 -0
  28. package/lib/schemas/typebox/organization.schema.js +28 -0
  29. package/lib/schemas/typebox/permission.schema.d.ts +20 -0
  30. package/lib/schemas/typebox/permission.schema.d.ts.map +1 -0
  31. package/lib/schemas/typebox/permission.schema.js +20 -0
  32. package/lib/schemas/typebox/role.schema.d.ts +22 -0
  33. package/lib/schemas/typebox/role.schema.d.ts.map +1 -0
  34. package/lib/schemas/typebox/role.schema.js +20 -0
  35. package/lib/schemas/typebox/user.schema.d.ts +37 -0
  36. package/lib/schemas/typebox/user.schema.d.ts.map +1 -0
  37. package/lib/schemas/typebox/user.schema.js +35 -0
  38. package/lib/schemas/user.schema.d.ts +72 -0
  39. package/lib/schemas/user.schema.d.ts.map +1 -0
  40. package/lib/schemas/user.schema.js +14 -0
  41. package/lib/schemas/zod/organization.schema.d.ts +30 -0
  42. package/lib/schemas/zod/organization.schema.d.ts.map +1 -0
  43. package/lib/schemas/zod/organization.schema.js +28 -0
  44. package/lib/schemas/zod/permission.schema.d.ts +20 -0
  45. package/lib/schemas/zod/permission.schema.d.ts.map +1 -0
  46. package/lib/schemas/zod/permission.schema.js +20 -0
  47. package/lib/schemas/zod/role.schema.d.ts +22 -0
  48. package/lib/schemas/zod/role.schema.d.ts.map +1 -0
  49. package/lib/schemas/zod/role.schema.js +20 -0
  50. package/lib/schemas/zod/user.schema.d.ts +37 -0
  51. package/lib/schemas/zod/user.schema.d.ts.map +1 -0
  52. package/lib/schemas/zod/user.schema.js +35 -0
  53. package/lib/services/organization.service.d.ts +44 -0
  54. package/lib/services/organization.service.d.ts.map +1 -0
  55. package/lib/services/organization.service.js +35 -0
  56. package/lib/services/permission.service.d.ts +61 -0
  57. package/lib/services/permission.service.d.ts.map +1 -0
  58. package/lib/services/permission.service.js +159 -0
  59. package/lib/services/role.service.d.ts +48 -0
  60. package/lib/services/role.service.d.ts.map +1 -0
  61. package/lib/services/role.service.js +57 -0
  62. package/lib/services/user.service.d.ts +54 -0
  63. package/lib/services/user.service.d.ts.map +1 -0
  64. package/lib/services/user.service.js +85 -0
  65. package/lib/tsconfig.tsbuildinfo +1 -0
  66. package/lib/vitest.config.d.ts +3 -0
  67. package/lib/vitest.config.d.ts.map +1 -0
  68. package/lib/vitest.config.js +7 -0
  69. package/package.json +6 -4
  70. package/__test__/schemaEquality.test.ts +0 -293
  71. package/schemas/organization.schema.ts +0 -28
  72. package/schemas/permission.schema.ts +0 -28
  73. package/schemas/role.schema.ts +0 -28
  74. package/schemas/user.schema.ts +0 -28
  75. package/tsconfig.json +0 -7
  76. /package/{schemas/zod → lib/eject/schemas}/organization.schema.ts +0 -0
  77. /package/{schemas/zod → lib/eject/schemas}/permission.schema.ts +0 -0
  78. /package/{schemas/zod → lib/eject/schemas}/role.schema.ts +0 -0
  79. /package/{schemas/zod → lib/eject/schemas}/user.schema.ts +0 -0
  80. /package/{services → lib/eject/services}/organization.service.ts +0 -0
  81. /package/{services → lib/eject/services}/permission.service.ts +0 -0
  82. /package/{services → lib/eject/services}/role.service.ts +0 -0
  83. /package/{services → lib/eject/services/services}/user.service.ts +0 -0
  84. /package/{index.ts → lib/index.js} +0 -0
@@ -0,0 +1,48 @@
1
+ import { CreateRoleDto, RoleDto, RoleService, UpdateRoleDto } from '@forklaunch/interfaces-iam';
2
+ import { MetricsDefinition, OpenTelemetryCollector } from '@forklaunch/core/http';
3
+ import { EntityManager } from '@mikro-orm/core';
4
+ import { IdDto, IdsDto } from '@forklaunch/common';
5
+ import { RequestDtoMapperConstructor, ResponseDtoMapperConstructor } from '@forklaunch/core/dtoMapper';
6
+ import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
7
+ import { AnySchemaValidator } from '@forklaunch/validator';
8
+ export declare class BaseRoleService<SchemaValidator extends AnySchemaValidator, Metrics extends MetricsDefinition = MetricsDefinition, Dto extends {
9
+ RoleDtoMapper: RoleDto;
10
+ CreateRoleDtoMapper: CreateRoleDto;
11
+ UpdateRoleDtoMapper: UpdateRoleDto;
12
+ } = {
13
+ RoleDtoMapper: RoleDto;
14
+ CreateRoleDtoMapper: CreateRoleDto;
15
+ UpdateRoleDtoMapper: UpdateRoleDto;
16
+ }, Entities extends {
17
+ RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
18
+ CreateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
19
+ UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
20
+ } = {
21
+ RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
22
+ CreateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
23
+ UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
24
+ }> implements RoleService {
25
+ #private;
26
+ em: EntityManager;
27
+ protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
28
+ protected schemaValidator: SchemaValidator;
29
+ protected dtoMappers: {
30
+ RoleDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
31
+ CreateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateRoleDtoMapper'], Entities['CreateRoleDtoMapper']>;
32
+ UpdateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateRoleDtoMapper'], Entities['UpdateRoleDtoMapper']>;
33
+ };
34
+ constructor(em: EntityManager, openTelemetryCollector: OpenTelemetryCollector<Metrics>, schemaValidator: SchemaValidator, dtoMappers: {
35
+ RoleDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
36
+ CreateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateRoleDtoMapper'], Entities['CreateRoleDtoMapper']>;
37
+ UpdateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateRoleDtoMapper'], Entities['UpdateRoleDtoMapper']>;
38
+ });
39
+ createRole(roleDto: Dto['CreateRoleDtoMapper'], em?: EntityManager): Promise<Dto['RoleDtoMapper']>;
40
+ createBatchRoles(roleDtos: Dto['CreateRoleDtoMapper'][], em?: EntityManager): Promise<Dto['RoleDtoMapper'][]>;
41
+ getRole(idDto: IdDto, em?: EntityManager): Promise<RoleDto>;
42
+ getBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<RoleDto[]>;
43
+ updateRole(roleDto: Dto['UpdateRoleDtoMapper'], em?: EntityManager): Promise<Dto['RoleDtoMapper']>;
44
+ updateBatchRoles(roleDtos: Dto['UpdateRoleDtoMapper'][], em?: EntityManager): Promise<Dto['RoleDtoMapper'][]>;
45
+ deleteRole(idDto: IdDto, em?: EntityManager): Promise<void>;
46
+ deleteBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=role.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { transformIntoInternalDtoMapper } from '@forklaunch/core/dtoMapper';
2
+ export class BaseRoleService {
3
+ em;
4
+ openTelemetryCollector;
5
+ schemaValidator;
6
+ dtoMappers;
7
+ #dtoMappers;
8
+ constructor(em, openTelemetryCollector, schemaValidator, dtoMappers) {
9
+ this.em = em;
10
+ this.openTelemetryCollector = openTelemetryCollector;
11
+ this.schemaValidator = schemaValidator;
12
+ this.dtoMappers = dtoMappers;
13
+ this.#dtoMappers = transformIntoInternalDtoMapper(dtoMappers, schemaValidator);
14
+ }
15
+ async createRole(roleDto, em) {
16
+ // TODO: Think about removing static method here, since we need specific args
17
+ const role = this.#dtoMappers.CreateRoleDtoMapper.deserializeDtoToEntity(roleDto);
18
+ await (em ?? this.em).transactional((em) => em.persist(role));
19
+ return this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(role);
20
+ }
21
+ async createBatchRoles(roleDtos, em) {
22
+ const roles = await Promise.all(roleDtos.map(async (roleDto) => this.#dtoMappers.CreateRoleDtoMapper.deserializeDtoToEntity(roleDto)));
23
+ await (em ?? this.em).transactional((em) => em.persist(roles));
24
+ return roles.map((role) => this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(role));
25
+ }
26
+ async getRole(idDto, em) {
27
+ const role = await (em ?? this.em).findOneOrFail('Role', idDto, {
28
+ populate: ['id', '*']
29
+ });
30
+ return this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(role);
31
+ }
32
+ async getBatchRoles(idsDto, em) {
33
+ return (await (em ?? this.em).find('Role', idsDto, {
34
+ populate: ['id', '*']
35
+ })).map((role) => this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(role));
36
+ }
37
+ async updateRole(roleDto, em) {
38
+ let role = this.#dtoMappers.UpdateRoleDtoMapper.deserializeDtoToEntity(roleDto);
39
+ await (em ?? this.em).transactional(async (em) => {
40
+ role = (await em.upsert('Role', role));
41
+ });
42
+ return this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(role);
43
+ }
44
+ async updateBatchRoles(roleDtos, em) {
45
+ let roles = await Promise.all(roleDtos.map(async (roleDto) => this.#dtoMappers.UpdateRoleDtoMapper.deserializeDtoToEntity(roleDto)));
46
+ await (em ?? this.em).transactional(async (em) => {
47
+ roles = await em.upsertMany('Role', roles);
48
+ });
49
+ return roles.map((role) => this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(role));
50
+ }
51
+ async deleteRole(idDto, em) {
52
+ await (em ?? this.em).nativeDelete('Role', idDto);
53
+ }
54
+ async deleteBatchRoles(idsDto, em) {
55
+ await (em ?? this.em).nativeDelete('Role', { id: { $in: idsDto.ids } });
56
+ }
57
+ }
@@ -0,0 +1,54 @@
1
+ import { CreateUserDto, RoleService, UpdateUserDto, UserDto, UserService } from '@forklaunch/interfaces-iam';
2
+ import { MetricsDefinition, OpenTelemetryCollector } from '@forklaunch/core/http';
3
+ import { OrganizationService } from '@forklaunch/interfaces-iam';
4
+ import { IdDto, IdsDto } from '@forklaunch/common';
5
+ import { RequestDtoMapperConstructor, ResponseDtoMapperConstructor } from '@forklaunch/core/dtoMapper';
6
+ import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
7
+ import { AnySchemaValidator } from '@forklaunch/validator';
8
+ import { EntityManager } from '@mikro-orm/core';
9
+ export declare class BaseUserService<SchemaValidator extends AnySchemaValidator, OrganizationStatus, Metrics extends MetricsDefinition = MetricsDefinition, Dto extends {
10
+ UserDtoMapper: UserDto;
11
+ CreateUserDtoMapper: CreateUserDto;
12
+ UpdateUserDtoMapper: UpdateUserDto;
13
+ } = {
14
+ UserDtoMapper: UserDto;
15
+ CreateUserDtoMapper: CreateUserDto;
16
+ UpdateUserDtoMapper: UpdateUserDto;
17
+ }, Entities extends {
18
+ UserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
19
+ CreateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
20
+ UpdateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
21
+ } = {
22
+ UserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
23
+ CreateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
24
+ UpdateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
25
+ }> implements UserService {
26
+ #private;
27
+ em: EntityManager;
28
+ protected passwordEncryptionPublicKeyPath: string;
29
+ protected roleServiceFactory: () => RoleService;
30
+ protected organizationServiceFactory: () => OrganizationService<OrganizationStatus>;
31
+ protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
32
+ protected schemaValidator: SchemaValidator;
33
+ protected dtoMappers: {
34
+ UserDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['UserDtoMapper'], Entities['UserDtoMapper']>;
35
+ CreateUserDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateUserDtoMapper'], Entities['CreateUserDtoMapper'], (dto: never, passwordEncryptionPublicKeyPath: string) => Entities['UpdateUserDtoMapper']>;
36
+ UpdateUserDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateUserDtoMapper'], Entities['UpdateUserDtoMapper'], (dto: never, passwordEncryptionPublicKeyPath: string) => Entities['UpdateUserDtoMapper']>;
37
+ };
38
+ constructor(em: EntityManager, passwordEncryptionPublicKeyPath: string, roleServiceFactory: () => RoleService, organizationServiceFactory: () => OrganizationService<OrganizationStatus>, openTelemetryCollector: OpenTelemetryCollector<Metrics>, schemaValidator: SchemaValidator, dtoMappers: {
39
+ UserDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['UserDtoMapper'], Entities['UserDtoMapper']>;
40
+ CreateUserDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateUserDtoMapper'], Entities['CreateUserDtoMapper'], (dto: never, passwordEncryptionPublicKeyPath: string) => Entities['UpdateUserDtoMapper']>;
41
+ UpdateUserDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateUserDtoMapper'], Entities['UpdateUserDtoMapper'], (dto: never, passwordEncryptionPublicKeyPath: string) => Entities['UpdateUserDtoMapper']>;
42
+ });
43
+ createUser(userDto: Dto['CreateUserDtoMapper'], em?: EntityManager): Promise<Dto['UserDtoMapper']>;
44
+ createBatchUsers(userDtos: Dto['CreateUserDtoMapper'][], em?: EntityManager): Promise<Dto['UserDtoMapper'][]>;
45
+ getUser(idDto: IdDto, em?: EntityManager): Promise<Dto['UserDtoMapper']>;
46
+ getBatchUsers(idsDto: IdsDto, em?: EntityManager): Promise<Dto['UserDtoMapper'][]>;
47
+ updateUser(userDto: Dto['UpdateUserDtoMapper'], em?: EntityManager): Promise<Dto['UserDtoMapper']>;
48
+ updateBatchUsers(userDtos: UpdateUserDto[], em?: EntityManager): Promise<Dto['UserDtoMapper'][]>;
49
+ deleteUser(idDto: IdDto, em?: EntityManager): Promise<void>;
50
+ deleteBatchUsers(idsDto: IdsDto, em?: EntityManager): Promise<void>;
51
+ verifyHasRole(idDto: IdDto, roleId: string): Promise<void>;
52
+ verifyHasPermission(idDto: IdDto, permissionId: string): Promise<void>;
53
+ }
54
+ //# sourceMappingURL=user.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../services/user.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { transformIntoInternalDtoMapper } from '@forklaunch/core/dtoMapper';
2
+ export class BaseUserService {
3
+ em;
4
+ passwordEncryptionPublicKeyPath;
5
+ roleServiceFactory;
6
+ organizationServiceFactory;
7
+ openTelemetryCollector;
8
+ schemaValidator;
9
+ dtoMappers;
10
+ #dtoMappers;
11
+ constructor(em, passwordEncryptionPublicKeyPath, roleServiceFactory, organizationServiceFactory, openTelemetryCollector, schemaValidator, dtoMappers) {
12
+ this.em = em;
13
+ this.passwordEncryptionPublicKeyPath = passwordEncryptionPublicKeyPath;
14
+ this.roleServiceFactory = roleServiceFactory;
15
+ this.organizationServiceFactory = organizationServiceFactory;
16
+ this.openTelemetryCollector = openTelemetryCollector;
17
+ this.schemaValidator = schemaValidator;
18
+ this.dtoMappers = dtoMappers;
19
+ this.#dtoMappers = transformIntoInternalDtoMapper(dtoMappers, schemaValidator);
20
+ }
21
+ async createUser(userDto, em) {
22
+ const user = await this.#dtoMappers.CreateUserDtoMapper.deserializeDtoToEntity(userDto, this.passwordEncryptionPublicKeyPath);
23
+ ((await em) ?? this.em).transactional(async (em) => {
24
+ await em.persist(user);
25
+ });
26
+ return this.#dtoMappers.UserDtoMapper.serializeEntityToDto(user);
27
+ }
28
+ async createBatchUsers(userDtos, em) {
29
+ const users = await Promise.all(userDtos.map(async (createUserDto) => this.#dtoMappers.CreateUserDtoMapper.deserializeDtoToEntity(createUserDto, this.passwordEncryptionPublicKeyPath)));
30
+ await (em ?? this.em).transactional(async (em) => {
31
+ await em.persist(users);
32
+ });
33
+ return users.map((user) => this.#dtoMappers.UserDtoMapper.serializeEntityToDto(user));
34
+ }
35
+ async getUser(idDto, em) {
36
+ const user = await (em ?? this.em).findOneOrFail('User', idDto, {
37
+ populate: ['id', '*']
38
+ });
39
+ return this.#dtoMappers.UserDtoMapper.serializeEntityToDto(user);
40
+ }
41
+ async getBatchUsers(idsDto, em) {
42
+ return (await (em ?? this.em).find('User', idsDto, {
43
+ populate: ['id', '*']
44
+ })).map((user) => this.#dtoMappers.UserDtoMapper.serializeEntityToDto(user));
45
+ }
46
+ async updateUser(userDto, em) {
47
+ let user = this.#dtoMappers.UpdateUserDtoMapper.deserializeDtoToEntity(userDto, this.passwordEncryptionPublicKeyPath);
48
+ await (em ?? this.em).transactional(async (localEm) => {
49
+ user = await localEm.upsert(user);
50
+ });
51
+ return this.#dtoMappers.UserDtoMapper.serializeEntityToDto(user);
52
+ }
53
+ async updateBatchUsers(userDtos, em) {
54
+ let users = await Promise.all(userDtos.map(async (updateUserDto) => this.#dtoMappers.UpdateUserDtoMapper.deserializeDtoToEntity(updateUserDto, this.passwordEncryptionPublicKeyPath)));
55
+ await (em ?? this.em).transactional(async (localEm) => {
56
+ users = await localEm.upsertMany(users);
57
+ });
58
+ return users.map((user) => this.#dtoMappers.UserDtoMapper.serializeEntityToDto(user));
59
+ }
60
+ async deleteUser(idDto, em) {
61
+ const entityManager = em || this.em;
62
+ await entityManager.nativeDelete('User', idDto);
63
+ }
64
+ async deleteBatchUsers(idsDto, em) {
65
+ const entityManager = em || this.em;
66
+ await entityManager.nativeDelete('User', idsDto);
67
+ }
68
+ async verifyHasRole(idDto, roleId) {
69
+ const user = await this.getUser(idDto);
70
+ if (user.roles.filter((role) => {
71
+ return roleId == role.id;
72
+ }).length === 0) {
73
+ throw new Error(`User ${idDto.id} does not have role ${roleId}`);
74
+ }
75
+ }
76
+ async verifyHasPermission(idDto, permissionId) {
77
+ const user = await this.getUser(idDto);
78
+ if (user.roles
79
+ .map((role) => role.permissions.map((permission) => permission.id))
80
+ .flat()
81
+ .filter((id) => id == permissionId).length === 0) {
82
+ throw new Error(`User ${idDto.id} does not have permission ${permissionId}`);
83
+ }
84
+ }
85
+ }