permissions-contractx 1.0.2 → 1.2.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 (87) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +53 -1346
  3. package/dist/constants/contractx-permissions.constants.d.ts +84 -92
  4. package/dist/constants/contractx-permissions.constants.d.ts.map +1 -1
  5. package/dist/constants/contractx-permissions.constants.js +2 -2
  6. package/dist/constants/contractx-roles.constants.d.ts +150 -254
  7. package/dist/constants/contractx-roles.constants.d.ts.map +1 -1
  8. package/dist/constants/contractx-roles.constants.js +2 -2
  9. package/dist/constants/index.d.ts +1 -0
  10. package/dist/constants/index.d.ts.map +1 -1
  11. package/dist/constants/index.js +1 -0
  12. package/dist/constants/permission-names.constants.d.ts +432 -0
  13. package/dist/constants/permission-names.constants.d.ts.map +1 -0
  14. package/dist/constants/permission-names.constants.js +304 -0
  15. package/dist/constants/security.constants.d.ts +49 -49
  16. package/dist/constants/security.constants.d.ts.map +1 -1
  17. package/dist/constants/security.constants.js +2 -2
  18. package/dist/decorators/current-user.decorator.d.ts +5 -53
  19. package/dist/decorators/current-user.decorator.d.ts.map +1 -1
  20. package/dist/decorators/current-user.decorator.js +4 -51
  21. package/dist/decorators/index.d.ts +1 -0
  22. package/dist/decorators/index.d.ts.map +1 -1
  23. package/dist/decorators/index.js +1 -0
  24. package/dist/decorators/permission-writes.decorator.d.ts +14 -0
  25. package/dist/decorators/permission-writes.decorator.d.ts.map +1 -0
  26. package/dist/decorators/permission-writes.decorator.js +18 -0
  27. package/dist/decorators/permissions.decorator.d.ts +0 -58
  28. package/dist/decorators/permissions.decorator.d.ts.map +1 -1
  29. package/dist/decorators/permissions.decorator.js +0 -58
  30. package/dist/decorators/public.decorator.d.ts +0 -0
  31. package/dist/decorators/public.decorator.d.ts.map +0 -0
  32. package/dist/decorators/public.decorator.js +0 -0
  33. package/dist/decorators/roles.decorator.d.ts +4 -57
  34. package/dist/decorators/roles.decorator.d.ts.map +1 -1
  35. package/dist/decorators/roles.decorator.js +6 -57
  36. package/dist/guards/authorization.guard.d.ts +37 -0
  37. package/dist/guards/authorization.guard.d.ts.map +1 -0
  38. package/dist/guards/authorization.guard.js +150 -0
  39. package/dist/guards/index.d.ts +1 -0
  40. package/dist/guards/index.d.ts.map +1 -1
  41. package/dist/guards/index.js +1 -0
  42. package/dist/guards/jwt-auth.guard.d.ts +0 -0
  43. package/dist/guards/jwt-auth.guard.d.ts.map +1 -1
  44. package/dist/guards/jwt-auth.guard.js +0 -0
  45. package/dist/guards/permissions.guard.d.ts +0 -0
  46. package/dist/guards/permissions.guard.d.ts.map +1 -1
  47. package/dist/guards/permissions.guard.js +8 -2
  48. package/dist/guards/roles.guard.d.ts +0 -0
  49. package/dist/guards/roles.guard.d.ts.map +1 -1
  50. package/dist/guards/roles.guard.js +1 -1
  51. package/dist/index.d.ts +0 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +0 -6
  54. package/dist/interfaces/index.d.ts +1 -0
  55. package/dist/interfaces/index.d.ts.map +1 -1
  56. package/dist/interfaces/index.js +1 -0
  57. package/dist/interfaces/jwt-payload.interface.d.ts +46 -9
  58. package/dist/interfaces/jwt-payload.interface.d.ts.map +1 -1
  59. package/dist/interfaces/jwt-payload.interface.js +19 -0
  60. package/dist/interfaces/permission-mode.enum.d.ts +22 -0
  61. package/dist/interfaces/permission-mode.enum.d.ts.map +1 -0
  62. package/dist/interfaces/permission-mode.enum.js +25 -0
  63. package/dist/modules/index.d.ts +0 -0
  64. package/dist/modules/index.d.ts.map +0 -0
  65. package/dist/modules/index.js +0 -0
  66. package/dist/modules/permissions-contractx.module.d.ts +0 -0
  67. package/dist/modules/permissions-contractx.module.d.ts.map +1 -1
  68. package/dist/modules/permissions-contractx.module.js +4 -2
  69. package/dist/services/contractx-authorization.service.d.ts +198 -27
  70. package/dist/services/contractx-authorization.service.d.ts.map +1 -1
  71. package/dist/services/contractx-authorization.service.js +2 -0
  72. package/dist/services/contractx-validation.service.d.ts +93 -12
  73. package/dist/services/contractx-validation.service.d.ts.map +1 -1
  74. package/dist/services/contractx-validation.service.js +1 -0
  75. package/dist/services/index.d.ts +0 -2
  76. package/dist/services/index.d.ts.map +1 -1
  77. package/dist/services/index.js +2 -0
  78. package/dist/services/user-context.service.d.ts +29 -34
  79. package/dist/services/user-context.service.d.ts.map +1 -1
  80. package/dist/services/user-context.service.js +65 -44
  81. package/package.json +5 -24
  82. package/dist/services/contractx-document-compliance.service.d.ts +0 -85
  83. package/dist/services/contractx-document-compliance.service.d.ts.map +0 -1
  84. package/dist/services/contractx-document-compliance.service.js +0 -536
  85. package/dist/test-document-compliance.d.ts +0 -7
  86. package/dist/test-document-compliance.d.ts.map +0 -1
  87. package/dist/test-document-compliance.js +0 -118
@@ -36,41 +36,122 @@ export declare class ContractXValidationService {
36
36
  /**
37
37
  * Validate a single role
38
38
  */
39
- validateSingleRole(role: string): RoleValidationResult;
40
- validateRoles(roles: string[]): RoleValidationResult;
41
- validateSinglePermission(permission: string): PermissionValidationResult;
42
- validatePermissions(permissions: string[]): PermissionValidationResult;
39
+ validateSingleRole(role: any): {
40
+ isValid: boolean;
41
+ errors: any[];
42
+ warnings: any[];
43
+ roleInfo?: undefined;
44
+ } | {
45
+ isValid: boolean;
46
+ errors: any[];
47
+ warnings: any[];
48
+ roleInfo: {
49
+ name: string;
50
+ description: string;
51
+ type: import("../constants/contractx-roles.constants").ContractXRoleType;
52
+ scope: import("../constants/contractx-roles.constants").ContractXRoleScope;
53
+ level: number;
54
+ tenant: string;
55
+ isSystem: boolean;
56
+ };
57
+ };
58
+ validateRoles(roles: any): {
59
+ isValid: boolean;
60
+ errors: any[];
61
+ warnings: any[];
62
+ metadata?: undefined;
63
+ } | {
64
+ isValid: boolean;
65
+ errors: any[];
66
+ warnings: any[];
67
+ metadata: {
68
+ roleInfos: any[];
69
+ tenantCount: number;
70
+ };
71
+ };
72
+ validateSinglePermission(permission: any): {
73
+ isValid: boolean;
74
+ errors: any[];
75
+ warnings: any[];
76
+ permissionInfo: any[];
77
+ };
78
+ validatePermissions(permissions: any): {
79
+ isValid: boolean;
80
+ errors: any[];
81
+ warnings: any[];
82
+ permissionInfo: any[];
83
+ metadata?: undefined;
84
+ } | {
85
+ isValid: boolean;
86
+ errors: any[];
87
+ warnings: any[];
88
+ permissionInfo: any[];
89
+ metadata: {
90
+ moduleCount: number;
91
+ actionCount: number;
92
+ modules: any[];
93
+ actions: any[];
94
+ };
95
+ };
43
96
  /**
44
97
  * Validate a complete user (roles + permissions)
45
98
  */
46
- validateUser(roles: string[], permissions: string[]): UserValidationResult;
99
+ validateUser(roles: any, permissions: any): {
100
+ isValid: boolean;
101
+ errors: any[];
102
+ warnings: any[];
103
+ userInfo: {
104
+ hasValidRoles: boolean;
105
+ hasValidPermissions: boolean;
106
+ roleCount: number;
107
+ permissionCount: number;
108
+ tenant: string;
109
+ accessLevel: number;
110
+ };
111
+ metadata: {
112
+ roleValidation: {
113
+ roleInfos: any[];
114
+ tenantCount: number;
115
+ };
116
+ permissionValidation: {
117
+ moduleCount: number;
118
+ actionCount: number;
119
+ modules: any[];
120
+ actions: any[];
121
+ };
122
+ };
123
+ };
47
124
  /**
48
125
  * Get expected permissions for a set of roles (based on ODS matrix)
49
126
  */
50
- private getExpectedPermissionsForRoles;
127
+ getExpectedPermissionsForRoles(roles: any): unknown[];
51
128
  /**
52
129
  * Check if user has specific module access
53
130
  */
54
- checkModuleAccess(permissions: string[], module: string, action: string): boolean;
131
+ checkModuleAccess(permissions: any, module: any, action: any): any;
55
132
  /**
56
133
  * Check if user has any access to a module
57
134
  */
58
- checkAnyModuleAccess(permissions: string[], module: string): boolean;
135
+ checkAnyModuleAccess(permissions: any, module: any): any;
59
136
  /**
60
137
  * Get all modules the user has access to
61
138
  */
62
- getUserModules(permissions: string[]): string[];
139
+ getUserModules(permissions: any): unknown[];
63
140
  /**
64
141
  * Get user's effective permissions (roles + explicit permissions)
65
142
  */
66
- getEffectivePermissions(roles: string[], permissions: string[]): string[];
143
+ getEffectivePermissions(roles: any, permissions: any): any[];
67
144
  /**
68
145
  * Parse ODS permission string (e.g., "c,r,u,d,s,f") into permission array
69
146
  */
70
- parseOdsString(odsString: string, module: string): string[];
147
+ parseOdsString(odsString: any, module: any): any;
71
148
  /**
72
149
  * Validate JWT payload structure
73
150
  */
74
- validateJwtPayload(payload: any): ValidationResult;
151
+ validateJwtPayload(payload: any): {
152
+ isValid: boolean;
153
+ errors: any[];
154
+ warnings: any[];
155
+ };
75
156
  }
76
157
  //# sourceMappingURL=contractx-validation.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contractx-validation.service.d.ts","sourceRoot":"","sources":["../../src/services/contractx-validation.service.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,cAAc,CAAC,EAAE;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KAClB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,QAAQ,CAAC,EAAE;QACT,aAAa,EAAE,OAAO,CAAC;QACvB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;QACnD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,qBACa,0BAA0B;IAErC;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB;IAuCtD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB;IA4CpD,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,0BAA0B;IA8CxE,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,0BAA0B;IA2CtE;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,oBAAoB;IAuE1E;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAkBtC;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIjF;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIpE;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAa/C;;OAEG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAMzE;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAK3D;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,GAAG,GAAG,gBAAgB;CAwCnD"}
1
+ {"version":3,"file":"contractx-validation.service.d.ts","sourceRoot":"","sources":["../../src/services/contractx-validation.service.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AACD,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AACD,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,cAAc,CAAC,EAAE;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;KAClB,EAAE,CAAC;CACL;AACD,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,QAAQ,CAAC,EAAE;QACT,aAAa,EAAE,OAAO,CAAC;QACvB,mBAAmB,EAAE,OAAO,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;QACnD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,qBACa,0BAA0B;IACnC;;OAEG;IACH,kBAAkB,CAAC,IAAI,KAAA;;;;;;;;;;;;;;;;;;;IAiCvB,aAAa,CAAC,KAAK,KAAA;;;;;;;;;;;;;;IAoCnB,wBAAwB,CAAC,UAAU,KAAA;;;;;;IAqCnC,mBAAmB,CAAC,WAAW,KAAA;;;;;;;;;;;;;;;;;;IAoC/B;;OAEG;IACH,YAAY,CAAC,KAAK,KAAA,EAAE,WAAW,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;IA4D/B;;OAEG;IACH,8BAA8B,CAAC,KAAK,KAAA;IAcpC;;OAEG;IACH,iBAAiB,CAAC,WAAW,KAAA,EAAE,MAAM,KAAA,EAAE,MAAM,KAAA;IAG7C;;OAEG;IACH,oBAAoB,CAAC,WAAW,KAAA,EAAE,MAAM,KAAA;IAGxC;;OAEG;IACH,cAAc,CAAC,WAAW,KAAA;IAU1B;;OAEG;IACH,uBAAuB,CAAC,KAAK,KAAA,EAAE,WAAW,KAAA;IAK1C;;OAEG;IACH,cAAc,CAAC,SAAS,KAAA,EAAE,MAAM,KAAA;IAIhC;;OAEG;IACH,kBAAkB,CAAC,OAAO,KAAA;;;;;CAoC7B"}
@@ -320,3 +320,4 @@ exports.ContractXValidationService = ContractXValidationService;
320
320
  exports.ContractXValidationService = ContractXValidationService = __decorate([
321
321
  (0, common_1.Injectable)()
322
322
  ], ContractXValidationService);
323
+ ;
@@ -1,6 +1,4 @@
1
1
  export * from './user-context.service';
2
2
  export * from './contractx-validation.service';
3
3
  export * from './contractx-authorization.service';
4
- export { ValidationResult, RoleValidationResult, PermissionValidationResult, UserValidationResult, } from './contractx-validation.service';
5
- export { AuthorizationContext, AuthorizationResult, AccessMatrix, } from './contractx-authorization.service';
6
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAGlD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,GACb,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC"}
@@ -18,3 +18,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  __exportStar(require("./user-context.service"), exports);
19
19
  __exportStar(require("./contractx-validation.service"), exports);
20
20
  __exportStar(require("./contractx-authorization.service"), exports);
21
+ // NOTA[reconstrucción]: contractx-document-compliance.service NO se exporta (huérfano en el
22
+ // tarball original — compilado pero ausente de services/index y del index raíz). Ver clasificación "ajeno".
@@ -1,12 +1,7 @@
1
- import { JwtPayload } from '../interfaces';
2
- /**
3
- * Request-scoped service to manage current user context
4
- * Provides convenient methods to access user information and check permissions
5
- */
6
- interface RequestWithUser {
7
- user?: any;
1
+ import { AuthenticatedRequest, JwtPayload } from '../interfaces';
2
+ type RequestWithUser = AuthenticatedRequest & {
8
3
  tenant?: any;
9
- }
4
+ };
10
5
  export declare class UserContextService {
11
6
  private readonly request;
12
7
  private user;
@@ -16,40 +11,40 @@ export declare class UserContextService {
16
11
  * Set the current user context
17
12
  * This is typically called by the authentication guard
18
13
  */
19
- setUser(user: JwtPayload): void;
14
+ setUser(user: any): void;
20
15
  /**
21
16
  * Auto-initialize user from request if not manually set
22
17
  */
23
- private tryAutoInitialize;
18
+ tryAutoInitialize(): void;
24
19
  /**
25
20
  * Get the current authenticated user
26
21
  */
27
- getUser(): JwtPayload | null;
22
+ getUser(): JwtPayload;
28
23
  /**
29
24
  * Get the current user's ID
30
25
  */
31
- getUserId(): string | null;
26
+ getUserId(): string;
32
27
  /**
33
28
  * Get the current user's full name
34
29
  */
35
- getUserFullName(): string | null;
30
+ getUserFullName(): string;
36
31
  /**
37
32
  * Get the current user's email
38
33
  */
39
- getUserEmail(): string | null;
34
+ getUserEmail(): string;
40
35
  /**
41
36
  * Get the current user's client ID
42
37
  */
43
- getClientId(): string | null;
38
+ getClientId(): string;
44
39
  /**
45
40
  * Get the tenant key (key_client) for multi-tenant operations
46
41
  * Tries multiple sources: user.key_client, user.clientId, tenant.key_client
47
42
  */
48
- getTenantKey(): string | null;
43
+ getTenantKey(): any;
49
44
  /**
50
45
  * Get the current user's session ID
51
46
  */
52
- getSessionId(): string | null;
47
+ getSessionId(): string;
53
48
  /**
54
49
  * Get all user roles
55
50
  */
@@ -61,27 +56,27 @@ export declare class UserContextService {
61
56
  /**
62
57
  * Check if user has a specific role
63
58
  */
64
- hasRole(role: string): boolean;
59
+ hasRole(role: any): boolean;
65
60
  /**
66
61
  * Check if user has any of the specified roles
67
62
  */
68
- hasAnyRole(roles: readonly string[] | string[]): boolean;
63
+ hasAnyRole(roles: any): any;
69
64
  /**
70
65
  * Check if user has all of the specified roles
71
66
  */
72
- hasAllRoles(roles: readonly string[] | string[]): boolean;
67
+ hasAllRoles(roles: any): any;
73
68
  /**
74
69
  * Check if user has a specific permission
75
70
  */
76
- hasPermission(permission: string): boolean;
71
+ hasPermission(permission: any): boolean;
77
72
  /**
78
73
  * Check if user has any of the specified permissions
79
74
  */
80
- hasAnyPermission(permissions: string[]): boolean;
75
+ hasAnyPermission(permissions: any): any;
81
76
  /**
82
77
  * Check if user has all of the specified permissions
83
78
  */
84
- hasAllPermissions(permissions: string[]): boolean;
79
+ hasAllPermissions(permissions: any): any;
85
80
  /**
86
81
  * Check if user is authenticated
87
82
  */
@@ -93,38 +88,38 @@ export declare class UserContextService {
93
88
  /**
94
89
  * Check if user has admin privileges (superadmin or contract admin)
95
90
  */
96
- isAdmin(): boolean;
91
+ isAdmin(): any;
97
92
  /**
98
93
  * Check if user has client-side role
99
94
  */
100
- isClientUser(): boolean;
95
+ isClientUser(): any;
101
96
  /**
102
97
  * Check if user has provider-side role
103
98
  */
104
- isProviderUser(): boolean;
99
+ isProviderUser(): any;
105
100
  /**
106
101
  * Check if user can access a specific module based on permissions
107
102
  */
108
- canAccessModule(module: string): boolean;
103
+ canAccessModule(module: any): boolean;
109
104
  /**
110
105
  * Get user's permissions for a specific module
111
106
  */
112
- getModulePermissions(module: string): string[];
107
+ getModulePermissions(module: any): string[];
113
108
  /**
114
109
  * Check if user can perform a specific action on a module
115
110
  */
116
- canPerformAction(module: string, action: string): boolean;
111
+ canPerformAction(module: any, action: any): boolean;
117
112
  /**
118
113
  * Get user summary for logging/debugging
119
114
  */
120
115
  getUserSummary(): {
121
- id: string | null;
122
- name: string | null;
123
- email: string | null;
116
+ id: string;
117
+ name: string;
118
+ email: string;
124
119
  roles: string[];
125
120
  permissionCount: number;
126
- isAdmin: boolean;
127
- clientId: string | null;
121
+ isAdmin: any;
122
+ clientId: string;
128
123
  };
129
124
  }
130
125
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"user-context.service.d.ts","sourceRoot":"","sources":["../../src/services/user-context.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C;;;GAGG;AACH,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,qBACa,kBAAkB;IAKV,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ3C,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,eAAe,CAAS;gBAGI,OAAO,EAAE,eAAe;IAG5D;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4EzB;;OAEG;IACH,OAAO,IAAI,UAAU,GAAG,IAAI;IAK5B;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAM1B;;OAEG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAM5B;;;OAGG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAsC7B;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAKxB;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAK9B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO;IAKxD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO;IAKzD;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI1C;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;IAKhD;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;IAKjD;;OAEG;IACH,eAAe,IAAI,OAAO;IAK1B;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAOxC;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAM9C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAIzD;;OAEG;IACH,cAAc,IAAI;QAChB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB;CAWF"}
1
+ {"version":3,"file":"user-context.service.d.ts","sourceRoot":"","sources":["../../src/services/user-context.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKjE,KAAK,eAAe,GAAG,oBAAoB,GAAG;IAAE,MAAM,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AA4D/D,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,eAAe,CAAS;gBAEH,OAAO,EAAE,eAAe;IAKrD;;;OAGG;IACH,OAAO,CAAC,IAAI,KAAA;IAGZ;;OAEG;IACH,iBAAiB;IA0BjB;;OAEG;IACH,OAAO;IAIP;;OAEG;IACH,SAAS;IAMT;;OAEG;IACH,eAAe;IAMf;;OAEG;IACH,YAAY;IAMZ;;OAEG;IACH,WAAW;IAMX;;;OAGG;IACH,YAAY;IA+BZ;;OAEG;IACH,YAAY;IAMZ;;OAEG;IACH,YAAY;IAIZ;;OAEG;IACH,kBAAkB;IAIlB;;OAEG;IACH,OAAO,CAAC,IAAI,KAAA;IAGZ;;OAEG;IACH,UAAU,CAAC,KAAK,KAAA;IAIhB;;OAEG;IACH,WAAW,CAAC,KAAK,KAAA;IAIjB;;OAEG;IACH,aAAa,CAAC,UAAU,KAAA;IAGxB;;OAEG;IACH,gBAAgB,CAAC,WAAW,KAAA;IAI5B;;OAEG;IACH,iBAAiB,CAAC,WAAW,KAAA;IAI7B;;OAEG;IACH,eAAe;IAIf;;OAEG;IACH,YAAY;IAGZ;;OAEG;IACH,OAAO;IAGP;;OAEG;IACH,YAAY;IAGZ;;OAEG;IACH,cAAc;IAGd;;OAEG;IACH,eAAe,CAAC,MAAM,KAAA;IAItB;;OAEG;IACH,oBAAoB,CAAC,MAAM,KAAA;IAG3B;;OAEG;IACH,gBAAgB,CAAC,MAAM,KAAA,EAAE,MAAM,KAAA;IAG/B;;OAEG;IACH,cAAc;;;;;;;;;CAWjB"}
@@ -16,8 +16,70 @@ exports.UserContextService = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const core_1 = require("@nestjs/core");
18
18
  const contractx_roles_constants_1 = require("../constants/contractx-roles.constants");
19
+ function coerceStringOrNumber(...vals) {
20
+ for (const v of vals) {
21
+ if (typeof v === 'string' && v.length > 0)
22
+ return v;
23
+ if (typeof v === 'number')
24
+ return v;
25
+ }
26
+ return '';
27
+ }
28
+ function coerceString(...vals) {
29
+ for (const v of vals)
30
+ if (typeof v === 'string' && v.length > 0)
31
+ return v;
32
+ return '';
33
+ }
34
+ function coerceStringArray(...vals) {
35
+ for (const v of vals) {
36
+ if (Array.isArray(v)) {
37
+ const arr = v.filter((x) => typeof x === 'string');
38
+ if (arr.length > 0)
39
+ return arr;
40
+ }
41
+ if (typeof v === 'string' && v.length > 0)
42
+ return [v];
43
+ }
44
+ return [];
45
+ }
46
+ function coerceOptionalString(...vals) {
47
+ for (const v of vals)
48
+ if (typeof v === 'string' && v.length > 0)
49
+ return v;
50
+ return undefined;
51
+ }
52
+ function coerceOptionalNumber(v) {
53
+ return typeof v === 'number' ? v : undefined;
54
+ }
55
+ function normalizeToPayload(raw) {
56
+ return {
57
+ sub: coerceStringOrNumber(raw.sub, raw.id, raw.user_id),
58
+ role: coerceStringArray(raw.role, raw.roles),
59
+ permissions: coerceStringArray(raw.permissions),
60
+ permissionsView: Array.isArray(raw.permissionsView)
61
+ ? raw.permissionsView.filter((x) => typeof x === 'string')
62
+ : undefined,
63
+ fullName: coerceString(raw.fullName, raw.full_name, raw.username),
64
+ email: coerceOptionalString(raw.email),
65
+ clientId: coerceStringArray(raw.clientId, raw.client_id),
66
+ providerId: coerceOptionalString(raw.providerId),
67
+ tenantContext: (() => {
68
+ const t = raw.tenantContext;
69
+ return t === 'client' || t === 'provider' || t === 'system' ? t : undefined;
70
+ })(),
71
+ key_client: coerceStringArray(raw.key_client),
72
+ sessionId: coerceOptionalString(raw.sessionId, raw.session_id),
73
+ iat: coerceOptionalNumber(raw.iat),
74
+ exp: coerceOptionalNumber(raw.exp),
75
+ iss: coerceOptionalString(raw.iss),
76
+ aud: coerceOptionalString(raw.aud),
77
+ };
78
+ }
19
79
  let UserContextService = class UserContextService {
20
80
  constructor(request) {
81
+ this.user = null;
82
+ this.autoInitialized = false;
21
83
  this.request = request;
22
84
  this.user = null;
23
85
  this.autoInitialized = false;
@@ -40,31 +102,7 @@ let UserContextService = class UserContextService {
40
102
  // Try to get user from request.user (populated by JWT middleware)
41
103
  if (this.request?.user) {
42
104
  try {
43
- // Handle different user object formats
44
- const requestUser = this.request.user;
45
- // Convert to JwtPayload format
46
- const payload = {
47
- sub: requestUser.sub || requestUser.id || requestUser.user_id,
48
- role: requestUser.role || requestUser.roles || [],
49
- permissions: requestUser.permissions || [],
50
- fullName: requestUser.fullName || requestUser.full_name || requestUser.username || '',
51
- email: requestUser.email,
52
- clientId: Array.isArray(requestUser.clientId)
53
- ? requestUser.clientId[0]
54
- : (requestUser.clientId || requestUser.client_id),
55
- sessionId: requestUser.sessionId || requestUser.session_id,
56
- iat: requestUser.iat,
57
- exp: requestUser.exp,
58
- iss: requestUser.iss,
59
- aud: requestUser.aud,
60
- };
61
- // Copy any additional properties
62
- Object.keys(requestUser).forEach(key => {
63
- if (!(key in payload)) {
64
- payload[key] = requestUser[key];
65
- }
66
- });
67
- this.user = payload;
105
+ this.user = normalizeToPayload(this.request.user);
68
106
  return;
69
107
  }
70
108
  catch (error) {
@@ -74,25 +112,7 @@ let UserContextService = class UserContextService {
74
112
  // Fallback: try to get user from request.tenant (if populated by custom middleware)
75
113
  if (this.request?.tenant) {
76
114
  try {
77
- const tenant = this.request.tenant;
78
- const payload = {
79
- sub: tenant.user_id || tenant.sub || tenant.id,
80
- role: tenant.roles || [tenant.role].filter(Boolean),
81
- permissions: tenant.permissions || [],
82
- fullName: tenant.fullName || tenant.full_name || tenant.username || '',
83
- email: tenant.email,
84
- clientId: Array.isArray(tenant.clientId)
85
- ? tenant.clientId[0]
86
- : (tenant.clientId || tenant.client_id),
87
- sessionId: tenant.sessionId || tenant.session_id,
88
- };
89
- // Copy additional properties
90
- Object.keys(tenant).forEach(key => {
91
- if (!(key in payload)) {
92
- payload[key] = tenant[key];
93
- }
94
- });
95
- this.user = payload;
115
+ this.user = normalizeToPayload(this.request.tenant);
96
116
  return;
97
117
  }
98
118
  catch (error) {
@@ -312,3 +332,4 @@ exports.UserContextService = UserContextService = __decorate([
312
332
  __param(0, (0, common_1.Inject)(core_1.REQUEST)),
313
333
  __metadata("design:paramtypes", [Object])
314
334
  ], UserContextService);
335
+ ;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "permissions-contractx",
3
- "version": "1.0.2",
3
+ "version": "1.2.0",
4
4
  "description": "Enterprise-grade authentication and authorization package for NestJS microservices with role-based and permission-based access control",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -36,14 +36,6 @@
36
36
  ],
37
37
  "author": "ContractX Development Team",
38
38
  "license": "MIT",
39
- "homepage": "https://github.com/your-org/permissions-contractx#readme",
40
- "repository": {
41
- "type": "git",
42
- "url": "git+https://github.com/your-org/permissions-contractx.git"
43
- },
44
- "bugs": {
45
- "url": "https://github.com/your-org/permissions-contractx/issues"
46
- },
47
39
  "engines": {
48
40
  "node": ">=16.0.0",
49
41
  "npm": ">=7.0.0"
@@ -53,30 +45,19 @@
53
45
  "@nestjs/config": "^4.0.2",
54
46
  "@nestjs/core": "^11.1.6",
55
47
  "@nestjs/jwt": "^11.0.0",
48
+ "express": "^5.0.0",
56
49
  "jsonwebtoken": "^9.0.0",
57
50
  "reflect-metadata": "^0.1.13",
58
51
  "rxjs": "^7.0.0"
59
52
  },
60
53
  "devDependencies": {
61
54
  "@nestjs/platform-express": "^11.1.6",
62
- "@nestjs/testing": "^11.1.6",
63
55
  "@types/express": "^5.0.3",
64
- "@types/jest": "^25.1.0",
65
- "@types/jsonwebtoken": "^9.0.0",
56
+ "@types/jest": "^30.0.0",
66
57
  "@types/node": "^20.0.0",
67
- "@types/supertest": "^2.0.12",
68
- "@typescript-eslint/eslint-plugin": "^8.43.0",
69
- "@typescript-eslint/parser": "^8.43.0",
70
- "eslint": "^9.35.0",
71
- "jest": "^30.1.3",
58
+ "jest": "^30.4.2",
72
59
  "rimraf": "^5.0.0",
73
- "supertest": "^6.3.0",
74
- "ts-jest": "^28.0.5",
75
- "ts-node": "^10.9.0",
60
+ "ts-jest": "^29.4.11",
76
61
  "typescript": "^5.0.0"
77
- },
78
- "directories": {
79
- "example": "examples",
80
- "test": "test"
81
62
  }
82
63
  }
@@ -1,85 +0,0 @@
1
- /**
2
- * ContractX Document Compliance Service
3
- * Validates permissions-contractx package compliance with PermisosRoles.odt document requirements
4
- */
5
- export interface ComplianceValidationResult {
6
- isCompliant: boolean;
7
- summary: {
8
- totalRoles: number;
9
- validatedRoles: number;
10
- totalPermissions: number;
11
- validatedPermissions: number;
12
- compliantRoles: string[];
13
- nonCompliantRoles: string[];
14
- };
15
- roleAnalysis: Array<{
16
- role: string;
17
- isCompliant: boolean;
18
- expectedPermissions: string[];
19
- actualPermissions: string[];
20
- missingPermissions: string[];
21
- extraPermissions: string[];
22
- documentReference: string;
23
- }>;
24
- modulesCoverage: Array<{
25
- module: string;
26
- covered: boolean;
27
- usedByRoles: string[];
28
- }>;
29
- warnings: string[];
30
- errors: string[];
31
- }
32
- export interface DocumentRequirement {
33
- role: string;
34
- category: 'system' | 'client' | 'provider';
35
- permissions: Record<string, string[]>;
36
- restrictions: string[];
37
- }
38
- export declare class ContractXDocumentComplianceService {
39
- private readonly logger;
40
- /**
41
- * Document-based role requirements extracted from PermisosRoles.odt
42
- */
43
- private readonly DOCUMENT_REQUIREMENTS;
44
- /**
45
- * Permission action mappings from document notation to system notation
46
- */
47
- private readonly ACTION_MAPPINGS;
48
- /**
49
- * Validates complete package compliance with PermisosRoles.odt document
50
- */
51
- validateDocumentCompliance(): Promise<ComplianceValidationResult>;
52
- /**
53
- * Validates a specific role against document requirements
54
- */
55
- private validateRoleCompliance;
56
- /**
57
- * Converts document requirements to permission strings
58
- */
59
- private convertRequirementsToPermissions;
60
- /**
61
- * Validates module coverage across all roles
62
- */
63
- private validateModulesCoverage;
64
- /**
65
- * Finds roles that use a specific module
66
- */
67
- private findRolesUsingModule;
68
- /**
69
- * Counts total validated permissions across all roles
70
- */
71
- private countValidatedPermissions;
72
- /**
73
- * Adds warnings for roles present in package but not in document
74
- */
75
- private addMissingRoleWarnings;
76
- /**
77
- * Gets the document section for a role
78
- */
79
- private getRoleSection;
80
- /**
81
- * Generates a compliance report summary
82
- */
83
- generateComplianceReport(validation: ComplianceValidationResult): string;
84
- }
85
- //# sourceMappingURL=contractx-document-compliance.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contractx-document-compliance.service.d.ts","sourceRoot":"","sources":["../../src/services/contractx-document-compliance.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBACa,kCAAkC;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuD;IAE9E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAwRpC;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAO9B;IAEF;;OAEG;IACG,0BAA0B,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAuDvE;;OAEG;YACW,sBAAsB;IA+BpC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAexC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,0BAA0B,GAAG,MAAM;CA2DzE"}