@drax/identity-back 0.0.28 → 0.0.30

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 (115) hide show
  1. package/dist/config/IdentityConfig.js +1 -0
  2. package/dist/graphql/resolvers/role.resolvers.js +2 -2
  3. package/dist/graphql/resolvers/tenant.resolvers.js +2 -2
  4. package/dist/graphql/resolvers/user.resolvers.js +40 -4
  5. package/dist/graphql/types/user.graphql +2 -0
  6. package/dist/index.js +2 -2
  7. package/dist/rbac/Rbac.js +5 -0
  8. package/dist/repository/mongo/UserMongoRepository.js +10 -0
  9. package/dist/repository/sqlite/RoleSqliteRepository.js +1 -1
  10. package/dist/repository/sqlite/TenantSqliteRepository.js +1 -1
  11. package/dist/repository/sqlite/UserSqliteRepository.js +7 -0
  12. package/dist/routes/UserAvatarRoutes.js +70 -0
  13. package/dist/services/UserService.js +13 -0
  14. package/package.json +5 -5
  15. package/src/config/IdentityConfig.ts +2 -0
  16. package/src/graphql/resolvers/role.resolvers.ts +2 -2
  17. package/src/graphql/resolvers/tenant.resolvers.ts +2 -2
  18. package/src/graphql/resolvers/user.resolvers.ts +63 -16
  19. package/src/graphql/types/user.graphql +2 -0
  20. package/src/index.ts +2 -1
  21. package/src/interfaces/IUserRepository.ts +1 -0
  22. package/src/rbac/Rbac.ts +6 -0
  23. package/src/repository/mongo/UserMongoRepository.ts +10 -0
  24. package/src/repository/sqlite/RoleSqliteRepository.ts +1 -1
  25. package/src/repository/sqlite/TenantSqliteRepository.ts +1 -1
  26. package/src/repository/sqlite/UserSqliteRepository.ts +8 -0
  27. package/src/routes/UserAvatarRoutes.ts +82 -0
  28. package/src/services/UserService.ts +17 -0
  29. package/test/data-obj/roles/admin-mongo-role.ts +1 -1
  30. package/test/repository/mongo/role-mongo-repository.test.ts +2 -3
  31. package/test/repository/mongo/user-mongo-repository.test.ts +2 -2
  32. package/test/repository/sqlite/role-sqlite-repository.test.ts +2 -2
  33. package/test/repository/sqlite/user-sqlite-repository.test.ts +1 -1
  34. package/tsconfig.json +1 -11
  35. package/tsconfig.tsbuildinfo +1 -1
  36. package/types/config/IdentityConfig.d.ts +2 -1
  37. package/types/config/IdentityConfig.d.ts.map +1 -1
  38. package/types/graphql/resolvers/role.resolvers.d.ts +9 -6
  39. package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
  40. package/types/graphql/resolvers/tenant.resolvers.d.ts +9 -6
  41. package/types/graphql/resolvers/tenant.resolvers.d.ts.map +1 -1
  42. package/types/graphql/resolvers/user.resolvers.d.ts +15 -7
  43. package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
  44. package/types/index.d.ts.map +1 -1
  45. package/types/repository/mongo/UserMongoRepository.d.ts.map +1 -1
  46. package/types/repository/sqlite/UserSqliteRepository.d.ts.map +1 -1
  47. package/types/routes/UserAvatarRoutes.d.ts.map +1 -0
  48. package/types/services/UserService.d.ts.map +1 -1
  49. package/types/errors/BadCredentialsError.d.ts +0 -6
  50. package/types/errors/BadCredentialsError.d.ts.map +0 -1
  51. package/types/errors/UnauthorizedError.d.ts +0 -6
  52. package/types/errors/UnauthorizedError.d.ts.map +0 -1
  53. package/types/factory/RoleServiceFactory.d.ts +0 -4
  54. package/types/factory/TenantServiceFactory.d.ts +0 -4
  55. package/types/factory/UserServiceFactory.d.ts +0 -4
  56. package/types/graphql/index.d.ts +0 -6
  57. package/types/index.d.ts +0 -31
  58. package/types/interfaces/IID.d.ts +0 -6
  59. package/types/interfaces/IID.d.ts.map +0 -1
  60. package/types/interfaces/IJwtUser.d.ts +0 -7
  61. package/types/interfaces/IJwtUser.d.ts.map +0 -1
  62. package/types/interfaces/IRole.d.ts +0 -18
  63. package/types/interfaces/IRole.d.ts.map +0 -1
  64. package/types/interfaces/IRoleRepository.d.ts +0 -9
  65. package/types/interfaces/IRoleRepository.d.ts.map +0 -1
  66. package/types/interfaces/ITenant.d.ts +0 -7
  67. package/types/interfaces/ITenant.d.ts.map +0 -1
  68. package/types/interfaces/ITenantRepository.d.ts +0 -9
  69. package/types/interfaces/ITenantRepository.d.ts.map +0 -1
  70. package/types/interfaces/IUser.d.ts +0 -45
  71. package/types/interfaces/IUser.d.ts.map +0 -1
  72. package/types/interfaces/IUserGroup.d.ts +0 -11
  73. package/types/interfaces/IUserGroup.d.ts.map +0 -1
  74. package/types/interfaces/IUserRepository.d.ts +0 -9
  75. package/types/interfaces/IUserRepository.d.ts.map +0 -1
  76. package/types/middleware/jwtMiddleware.d.ts +0 -4
  77. package/types/middleware/rbacMiddleware.d.ts +0 -4
  78. package/types/models/RoleModel.d.ts +0 -16
  79. package/types/models/TenantModel.d.ts +0 -16
  80. package/types/models/UserGroupModel.d.ts +0 -16
  81. package/types/models/UserModel.d.ts +0 -16
  82. package/types/permissions/IdentityPermissions.d.ts +0 -21
  83. package/types/permissions/IdentityPermissions.d.ts.map +0 -1
  84. package/types/rbac/Rbac.d.ts +0 -13
  85. package/types/rbac/Rbac.d.ts.map +0 -1
  86. package/types/repository/mongo/RoleMongoRepository.d.ts +0 -14
  87. package/types/repository/mongo/TenantMongoRepository.d.ts +0 -14
  88. package/types/repository/mongo/UserMongoRepository.d.ts +0 -16
  89. package/types/repository/sqlite/RoleSqliteRepository.d.ts +0 -21
  90. package/types/repository/sqlite/TenantSqliteRepository.d.ts +0 -18
  91. package/types/repository/sqlite/UserSqliteRepository.d.ts +0 -23
  92. package/types/routes/RoleRoutes.d.ts +0 -4
  93. package/types/routes/TenantRoutes.d.ts +0 -4
  94. package/types/routes/UserRoutes.d.ts +0 -4
  95. package/types/services/PermissionService.d.ts +0 -9
  96. package/types/services/PermissionService.d.ts.map +0 -1
  97. package/types/services/RoleService.d.ts +0 -16
  98. package/types/services/TenantService.d.ts +0 -16
  99. package/types/services/UserService.d.ts +0 -20
  100. package/types/setup/CreateOrUpdateRole.d.ts +0 -5
  101. package/types/setup/CreateUserIfNotExist.d.ts +0 -5
  102. package/types/setup/LoadConfigFromEnv.d.ts +0 -4
  103. package/types/setup/LoadConfigFromEnv.d.ts.map +0 -1
  104. package/types/setup/LoadIdentityConfigFromEnv.d.ts +0 -4
  105. package/types/setup/LoadPermissions.d.ts +0 -4
  106. package/types/setup/LoadPermissions.d.ts.map +0 -1
  107. package/types/setup/RecoveryUserPassword.d.ts +0 -4
  108. package/types/utils/AuthUtils.d.ts +0 -16
  109. package/types/utils/DbSetupUtils.d.ts +0 -10
  110. package/types/zod/RoleZod.d.ts +0 -10
  111. package/types/zod/RoleZod.d.ts.map +0 -1
  112. package/types/zod/TenantZod.d.ts +0 -10
  113. package/types/zod/TenantZod.d.ts.map +0 -1
  114. package/types/zod/UserZod.d.ts +0 -53
  115. package/types/zod/UserZod.d.ts.map +0 -1
@@ -1,21 +0,0 @@
1
- import { IRoleRepository } from '../../interfaces/IRoleRepository';
2
- import { IDraxPaginateResult, IDraxPaginateOptions } from "@drax/common-share";
3
- import { IRole, IRoleBase } from "@drax/identity-share";
4
- declare class RoleSqliteRepository implements IRoleRepository {
5
- private db;
6
- constructor(DATABASE: string, verbose?: boolean);
7
- table(): void;
8
- normalizeData(roleData: IRoleBase): void;
9
- create(roleData: IRoleBase): Promise<IRole>;
10
- update(id: string, roleData: IRoleBase): Promise<IRole>;
11
- paginate({ page, limit, orderBy, orderDesc, search, filters }: IDraxPaginateOptions): Promise<IDraxPaginateResult<IRole>>;
12
- delete(id: string): Promise<boolean>;
13
- deleteAll(): Promise<boolean>;
14
- findById(id: string): Promise<IRole | null>;
15
- findByName(name: string): Promise<IRole | null>;
16
- fetchAll(): Promise<IRole[]>;
17
- findWithoutPopulateById(id: string): Promise<IRole | null>;
18
- populateRole(role: any): Promise<any>;
19
- }
20
- export default RoleSqliteRepository;
21
- //# sourceMappingURL=RoleSqliteRepository.d.ts.map
@@ -1,18 +0,0 @@
1
- import { ITenant, ITenantBase } from '@drax/identity-share';
2
- import { ITenantRepository } from '../../interfaces/ITenantRepository';
3
- import { IDraxPaginateResult, IDraxPaginateOptions } from "@drax/common-share";
4
- declare class TenantSqliteRepository implements ITenantRepository {
5
- private db;
6
- constructor(DATABASE: string, verbose?: boolean);
7
- table(): void;
8
- create(tenantData: ITenantBase): Promise<ITenant>;
9
- findById(id: string): Promise<ITenant | null>;
10
- findByName(name: string): Promise<ITenant | null>;
11
- update(id: string, tenantData: ITenantBase): Promise<ITenant>;
12
- delete(id: string): Promise<boolean>;
13
- deleteAll(): Promise<boolean>;
14
- fetchAll(): Promise<ITenant[]>;
15
- paginate({ page, limit, orderBy, orderDesc, search, filters }: IDraxPaginateOptions): Promise<IDraxPaginateResult<ITenant>>;
16
- }
17
- export default TenantSqliteRepository;
18
- //# sourceMappingURL=TenantSqliteRepository.d.ts.map
@@ -1,23 +0,0 @@
1
- import { IUser, IUserCreate, IUserUpdate } from "@drax/identity-share";
2
- import { IUserRepository } from "../../interfaces/IUserRepository";
3
- import { IDraxPaginateResult, IDraxPaginateOptions } from "@drax/common-share";
4
- declare class UserSqliteRepository implements IUserRepository {
5
- private db;
6
- private roleRepository;
7
- private tenantRepository;
8
- constructor(DATABASE: string, verbose?: boolean);
9
- table(): void;
10
- normalizeData(userData: IUserCreate | IUserUpdate): void;
11
- create(userData: IUserCreate): Promise<IUser>;
12
- update(id: string, userData: IUserUpdate): Promise<IUser>;
13
- delete(id: string): Promise<boolean>;
14
- deleteAll(): Promise<boolean>;
15
- findById(id: string): Promise<IUser>;
16
- findByUsername(username: string): Promise<IUser>;
17
- paginate({ page, limit, orderBy, orderDesc, search, filters }: IDraxPaginateOptions): Promise<IDraxPaginateResult<IUser>>;
18
- findRoleById(id: string): Promise<import("@drax/identity-share").IRole>;
19
- findTenantById(id: string): Promise<import("@drax/identity-share").ITenant>;
20
- changePassword(id: string, password: string): Promise<boolean>;
21
- }
22
- export default UserSqliteRepository;
23
- //# sourceMappingURL=UserSqliteRepository.d.ts.map
@@ -1,4 +0,0 @@
1
- declare function RoleRoutes(fastify: any, options: any): Promise<void>;
2
- export default RoleRoutes;
3
- export { RoleRoutes };
4
- //# sourceMappingURL=RoleRoutes.d.ts.map
@@ -1,4 +0,0 @@
1
- declare function TenantRoutes(fastify: any, options: any): Promise<void>;
2
- export default TenantRoutes;
3
- export { TenantRoutes };
4
- //# sourceMappingURL=TenantRoutes.d.ts.map
@@ -1,4 +0,0 @@
1
- declare function UserRoutes(fastify: any, options: any): Promise<void>;
2
- export default UserRoutes;
3
- export { UserRoutes };
4
- //# sourceMappingURL=UserRoutes.d.ts.map
@@ -1,9 +0,0 @@
1
- declare class PermissionService {
2
- static addPermission(permission: string): void;
3
- static removePermission(permission: string): void;
4
- static hasPermission(permission: string): boolean;
5
- static getPermissions(): string[];
6
- }
7
- export default PermissionService;
8
- export { PermissionService };
9
- //# sourceMappingURL=PermissionService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PermissionService.d.ts","sourceRoot":"","sources":["../../src/services/PermissionService.ts"],"names":[],"mappings":"AAEA,cAAM,iBAAiB;IAEnB,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM;IAKvC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAI1C,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE;CAIpC;AAGD,eAAe,iBAAiB,CAAA;AAChC,OAAO,EAAC,iBAAiB,EAAC,CAAA"}
@@ -1,16 +0,0 @@
1
- import { IRoleRepository } from "../interfaces/IRoleRepository";
2
- import { IDraxPaginateOptions, IDraxPaginateResult } from "@drax/common-share";
3
- import { IRoleBase, IRole } from "@drax/identity-share";
4
- declare class RoleService {
5
- _repository: IRoleRepository;
6
- constructor(roleRepostitory: IRoleRepository);
7
- create(roleData: IRoleBase): Promise<IRole>;
8
- update(id: string, roleData: IRoleBase): Promise<IRole>;
9
- delete(id: string): Promise<boolean>;
10
- findById(id: string): Promise<IRole | null>;
11
- findByName(name: string): Promise<IRole | null>;
12
- fetchAll(): Promise<IRole[]>;
13
- paginate({ page, limit, orderBy, orderDesc, search, filters }: IDraxPaginateOptions): Promise<IDraxPaginateResult<IRole>>;
14
- }
15
- export default RoleService;
16
- //# sourceMappingURL=RoleService.d.ts.map
@@ -1,16 +0,0 @@
1
- import { ITenantRepository } from "../interfaces/ITenantRepository";
2
- import { ITenantBase, ITenant } from "@drax/identity-share";
3
- import { IDraxPaginateOptions, IDraxPaginateResult } from "@drax/common-share";
4
- declare class TenantService {
5
- _repository: ITenantRepository;
6
- constructor(tenantRepostitory: ITenantRepository);
7
- create(tenantData: ITenantBase): Promise<ITenant>;
8
- update(id: string, tenantData: ITenantBase): Promise<ITenant>;
9
- delete(id: string): Promise<boolean>;
10
- findById(id: string): Promise<ITenant | null>;
11
- findByName(name: string): Promise<ITenant | null>;
12
- fetchAll(): Promise<ITenant[]>;
13
- paginate({ page, limit, orderBy, orderDesc, search, filters }: IDraxPaginateOptions): Promise<IDraxPaginateResult<ITenant>>;
14
- }
15
- export default TenantService;
16
- //# sourceMappingURL=TenantService.d.ts.map
@@ -1,20 +0,0 @@
1
- import type { IUser, IUserCreate, IUserUpdate } from "@drax/identity-share";
2
- import type { IUserRepository } from "../interfaces/IUserRepository";
3
- import { IDraxPaginateOptions, IDraxPaginateResult } from "@drax/common-share";
4
- declare class UserService {
5
- _repository: IUserRepository;
6
- constructor(userRepository: IUserRepository);
7
- auth(username: string, password: string): Promise<{
8
- accessToken: string;
9
- }>;
10
- changeUserPassword(userId: string, newPassword: string): Promise<boolean>;
11
- changeOwnPassword(userId: string, currentPassword: string, newPassword: string): Promise<boolean>;
12
- create(userData: IUserCreate): Promise<IUser>;
13
- update(id: string, userData: IUserUpdate): Promise<IUser>;
14
- delete(id: string): Promise<boolean>;
15
- findById(id: string): Promise<IUser>;
16
- findByUsername(username: string): Promise<IUser | null>;
17
- paginate({ page, limit, orderBy, orderDesc, search, filters }: IDraxPaginateOptions): Promise<IDraxPaginateResult<IUser>>;
18
- }
19
- export default UserService;
20
- //# sourceMappingURL=UserService.d.ts.map
@@ -1,5 +0,0 @@
1
- import type { IRoleBase } from "@drax/identity-share";
2
- declare function CreateOrUpdateRole(roleData: IRoleBase): Promise<void>;
3
- export default CreateOrUpdateRole;
4
- export { CreateOrUpdateRole };
5
- //# sourceMappingURL=CreateOrUpdateRole.d.ts.map
@@ -1,5 +0,0 @@
1
- import { IUserCreate } from "@drax/identity-share";
2
- declare function CreateUserIfNotExist(userData: IUserCreate): Promise<void>;
3
- export default CreateUserIfNotExist;
4
- export { CreateUserIfNotExist };
5
- //# sourceMappingURL=CreateUserIfNotExist.d.ts.map
@@ -1,4 +0,0 @@
1
- declare function LoadConfigFromEnv(): void;
2
- export default LoadConfigFromEnv;
3
- export { LoadConfigFromEnv };
4
- //# sourceMappingURL=LoadConfigFromEnv.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadConfigFromEnv.d.ts","sourceRoot":"","sources":["../../src/setup/LoadConfigFromEnv.ts"],"names":[],"mappings":"AAGA,iBAAS,iBAAiB,SAOzB;AAED,eAAe,iBAAiB,CAAA;AAChC,OAAO,EACH,iBAAiB,EACpB,CAAA"}
@@ -1,4 +0,0 @@
1
- declare function LoadIdentityConfigFromEnv(): void;
2
- export default LoadIdentityConfigFromEnv;
3
- export { LoadIdentityConfigFromEnv };
4
- //# sourceMappingURL=LoadIdentityConfigFromEnv.d.ts.map
@@ -1,4 +0,0 @@
1
- declare function LoadPermissions(permissions: string[]): void;
2
- export default LoadPermissions;
3
- export { LoadPermissions };
4
- //# sourceMappingURL=LoadPermissions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadPermissions.d.ts","sourceRoot":"","sources":["../../src/setup/LoadPermissions.ts"],"names":[],"mappings":"AAEA,iBAAS,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAI7C;AAED,eAAe,eAAe,CAAA;AAC9B,OAAO,EACH,eAAe,EAClB,CAAA"}
@@ -1,4 +0,0 @@
1
- declare function RecoveryUserPassword(username: string, password: string): Promise<void>;
2
- export default RecoveryUserPassword;
3
- export { RecoveryUserPassword };
4
- //# sourceMappingURL=RecoveryUserPassword.d.ts.map
@@ -1,16 +0,0 @@
1
- import jsonwebtoken from "jsonwebtoken";
2
- declare class AuthUtils {
3
- static verifyToken(token: string): string | jsonwebtoken.Jwt | jsonwebtoken.JwtPayload;
4
- static hashPassword(password: string): string;
5
- static checkPassword(password: string, hashPassword: string): boolean;
6
- static tokenSignPayload(userId: string, username: string, roleId: string, tenantId: string, session: string): {
7
- id: string;
8
- username: string;
9
- roleId: string;
10
- tenantId: string;
11
- session: string;
12
- };
13
- static generateToken(userId: string, username: string, roleId: string, tenantId: string, session: string): string;
14
- }
15
- export default AuthUtils;
16
- //# sourceMappingURL=AuthUtils.d.ts.map
@@ -1,10 +0,0 @@
1
- declare enum DbEngine {
2
- Sqlite = "sqlite",
3
- Mongo = "mongo"
4
- }
5
- declare class DbSetupUtils {
6
- static getDbEngine(): DbEngine;
7
- static getDbConfig(): any;
8
- }
9
- export { DbEngine, DbSetupUtils };
10
- //# sourceMappingURL=DbSetupUtils.d.ts.map
@@ -1,10 +0,0 @@
1
- declare const roleSchema: import("zod").ZodObject<{
2
- name: import("zod").ZodString;
3
- }, "strip", import("zod").ZodTypeAny, {
4
- name?: string;
5
- }, {
6
- name?: string;
7
- }>;
8
- export default roleSchema;
9
- export { roleSchema };
10
- //# sourceMappingURL=RoleZod.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RoleZod.d.ts","sourceRoot":"","sources":["../../src/zod/RoleZod.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,UAAU;;;;;;EAMd,CAAA;AAGF,eAAe,UAAU,CAAA;AAEzB,OAAO,EAAC,UAAU,EAAC,CAAA"}
@@ -1,10 +0,0 @@
1
- declare const tenantSchema: import("zod").ZodObject<{
2
- name: import("zod").ZodString;
3
- }, "strip", import("zod").ZodTypeAny, {
4
- name?: string;
5
- }, {
6
- name?: string;
7
- }>;
8
- export default tenantSchema;
9
- export { tenantSchema };
10
- //# sourceMappingURL=TenantZod.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TenantZod.d.ts","sourceRoot":"","sources":["../../src/zod/TenantZod.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,YAAY;;;;;;EAMhB,CAAA;AAGF,eAAe,YAAY,CAAA;AAE3B,OAAO,EAAC,YAAY,EAAC,CAAA"}
@@ -1,53 +0,0 @@
1
- export declare const userBaseSchema: import("zod").ZodObject<{
2
- name: import("zod").ZodString;
3
- username: import("zod").ZodString;
4
- email: import("zod").ZodString;
5
- role: import("zod").ZodString;
6
- }, "strip", import("zod").ZodTypeAny, {
7
- name?: string;
8
- email?: string;
9
- username?: string;
10
- role?: string;
11
- }, {
12
- name?: string;
13
- email?: string;
14
- username?: string;
15
- role?: string;
16
- }>;
17
- export declare const createUserSchema: import("zod").ZodObject<import("zod").objectUtil.extendShape<{
18
- name: import("zod").ZodString;
19
- username: import("zod").ZodString;
20
- email: import("zod").ZodString;
21
- role: import("zod").ZodString;
22
- }, {
23
- password: import("zod").ZodString;
24
- }>, "strip", import("zod").ZodTypeAny, {
25
- name?: string;
26
- email?: string;
27
- username?: string;
28
- password?: string;
29
- role?: string;
30
- }, {
31
- name?: string;
32
- email?: string;
33
- username?: string;
34
- password?: string;
35
- role?: string;
36
- }>;
37
- export declare const editUserSchema: import("zod").ZodObject<import("zod").objectUtil.extendShape<{
38
- name: import("zod").ZodString;
39
- username: import("zod").ZodString;
40
- email: import("zod").ZodString;
41
- role: import("zod").ZodString;
42
- }, {}>, "strip", import("zod").ZodTypeAny, {
43
- name?: string;
44
- email?: string;
45
- username?: string;
46
- role?: string;
47
- }, {
48
- name?: string;
49
- email?: string;
50
- username?: string;
51
- role?: string;
52
- }>;
53
- //# sourceMappingURL=UserZod.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UserZod.d.ts","sourceRoot":"","sources":["../../src/zod/UserZod.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAUzB,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;EAK3B,CAAC;AAGH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAEzB,CAAC"}