@aichatwar/shared 1.0.147 → 1.0.148

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.
@@ -10,6 +10,7 @@ interface UserCreatedEvent extends BaseEvent {
10
10
  version: number;
11
11
  isAgent?: boolean;
12
12
  ownerUserId?: string;
13
+ role?: 'user' | 'admin';
13
14
  };
14
15
  }
15
16
  interface UserUpdatedEvent extends BaseEvent {
@@ -19,6 +20,7 @@ interface UserUpdatedEvent extends BaseEvent {
19
20
  email: string;
20
21
  status: UserStatus;
21
22
  version: number;
23
+ role?: 'user' | 'admin';
22
24
  };
23
25
  }
24
26
  interface UserSingedInEvent extends BaseEvent {
package/build/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export * from "./errors/requestValidationError";
7
7
  export * from "./middlewares/error-handler";
8
8
  export * from "./middlewares/jwt-extractor";
9
9
  export * from "./middlewares/login-required";
10
+ export * from "./middlewares/require-role";
10
11
  export * from "./middlewares/validate-request";
11
12
  export * from "./observability/logger";
12
13
  export * from "./observability/correlation";
package/build/index.js CHANGED
@@ -23,6 +23,7 @@ __exportStar(require("./errors/requestValidationError"), exports);
23
23
  __exportStar(require("./middlewares/error-handler"), exports);
24
24
  __exportStar(require("./middlewares/jwt-extractor"), exports);
25
25
  __exportStar(require("./middlewares/login-required"), exports);
26
+ __exportStar(require("./middlewares/require-role"), exports);
26
27
  __exportStar(require("./middlewares/validate-request"), exports);
27
28
  // Observability (Phase 1)
28
29
  __exportStar(require("./observability/logger"), exports);
@@ -1,7 +1,8 @@
1
1
  import { Request, Response, NextFunction } from "express";
2
- interface JwtPayload {
2
+ export interface JwtPayload {
3
3
  id: string;
4
4
  email: string;
5
+ role?: 'user' | 'admin';
5
6
  }
6
7
  declare global {
7
8
  namespace Express {
@@ -0,0 +1,21 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ /**
3
+ * Middleware to require a specific role or roles
4
+ * Must be used after extractJWTPayload and loginRequired middleware
5
+ *
6
+ * @param allowedRoles - Single role string or array of role strings
7
+ * @returns Express middleware function
8
+ *
9
+ * @example
10
+ * router.get('/admin/users', extractJWTPayload, loginRequired, requireRole('admin'), handler);
11
+ * router.get('/moderator/content', extractJWTPayload, loginRequired, requireRole(['admin', 'moderator']), handler);
12
+ */
13
+ export declare const requireRole: (allowedRoles: string | string[]) => (req: Request, res: Response, next: NextFunction) => void;
14
+ /**
15
+ * Convenience middleware to require admin role
16
+ * Must be used after extractJWTPayload and loginRequired middleware
17
+ *
18
+ * @example
19
+ * router.get('/admin/users', extractJWTPayload, loginRequired, requireAdmin, handler);
20
+ */
21
+ export declare const requireAdmin: (req: Request, res: Response, next: NextFunction) => void;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireAdmin = exports.requireRole = void 0;
4
+ const notAuthorizedError_1 = require("../errors/notAuthorizedError");
5
+ /**
6
+ * Middleware to require a specific role or roles
7
+ * Must be used after extractJWTPayload and loginRequired middleware
8
+ *
9
+ * @param allowedRoles - Single role string or array of role strings
10
+ * @returns Express middleware function
11
+ *
12
+ * @example
13
+ * router.get('/admin/users', extractJWTPayload, loginRequired, requireRole('admin'), handler);
14
+ * router.get('/moderator/content', extractJWTPayload, loginRequired, requireRole(['admin', 'moderator']), handler);
15
+ */
16
+ const requireRole = (allowedRoles) => {
17
+ return (req, res, next) => {
18
+ if (!req.jwtPayload) {
19
+ throw new notAuthorizedError_1.NotAuthorizedError(['Authentication required']);
20
+ }
21
+ const roles = Array.isArray(allowedRoles) ? allowedRoles : [allowedRoles];
22
+ const userRole = req.jwtPayload.role || 'user'; // Default to 'user' if role not set
23
+ if (!roles.includes(userRole)) {
24
+ throw new notAuthorizedError_1.NotAuthorizedError(['Insufficient permissions']);
25
+ }
26
+ next();
27
+ };
28
+ };
29
+ exports.requireRole = requireRole;
30
+ /**
31
+ * Convenience middleware to require admin role
32
+ * Must be used after extractJWTPayload and loginRequired middleware
33
+ *
34
+ * @example
35
+ * router.get('/admin/users', extractJWTPayload, loginRequired, requireAdmin, handler);
36
+ */
37
+ exports.requireAdmin = (0, exports.requireRole)('admin');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aichatwar/shared",
3
- "version": "1.0.147",
3
+ "version": "1.0.148",
4
4
  "main": "./build/index.js",
5
5
  "typs": "./build/index.d.ts",
6
6
  "files": [