@heavybit/pendoadmin-shared-lib 1.0.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.
- package/dist/common/index.d.ts +6 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +6 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/jwt.utils.d.ts +7 -0
- package/dist/common/jwt.utils.d.ts.map +1 -0
- package/dist/common/jwt.utils.js +31 -0
- package/dist/common/jwt.utils.js.map +1 -0
- package/dist/common/password.utils.d.ts +4 -0
- package/dist/common/password.utils.d.ts.map +1 -0
- package/dist/common/password.utils.js +17 -0
- package/dist/common/password.utils.js.map +1 -0
- package/dist/common/phone.utils.d.ts +4 -0
- package/dist/common/phone.utils.d.ts.map +1 -0
- package/dist/common/phone.utils.js +36 -0
- package/dist/common/phone.utils.js.map +1 -0
- package/dist/common/response.utils.d.ts +6 -0
- package/dist/common/response.utils.d.ts.map +1 -0
- package/dist/common/response.utils.js +33 -0
- package/dist/common/response.utils.js.map +1 -0
- package/dist/common/uuid.utils.d.ts +5 -0
- package/dist/common/uuid.utils.d.ts.map +1 -0
- package/dist/common/uuid.utils.js +10 -0
- package/dist/common/uuid.utils.js.map +1 -0
- package/dist/config/index.d.ts +95 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +71 -0
- package/dist/config/index.js.map +1 -0
- package/dist/database/index.d.ts +25 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +62 -0
- package/dist/database/index.js.map +1 -0
- package/dist/express/auth.middleware.d.ts +20 -0
- package/dist/express/auth.middleware.d.ts.map +1 -0
- package/dist/express/auth.middleware.js +83 -0
- package/dist/express/auth.middleware.js.map +1 -0
- package/dist/express/correlation.middleware.d.ts +6 -0
- package/dist/express/correlation.middleware.d.ts.map +1 -0
- package/dist/express/correlation.middleware.js +15 -0
- package/dist/express/correlation.middleware.js.map +1 -0
- package/dist/express/error-handler.d.ts +8 -0
- package/dist/express/error-handler.d.ts.map +1 -0
- package/dist/express/error-handler.js +18 -0
- package/dist/express/error-handler.js.map +1 -0
- package/dist/express/index.d.ts +6 -0
- package/dist/express/index.d.ts.map +1 -0
- package/dist/express/index.js +6 -0
- package/dist/express/index.js.map +1 -0
- package/dist/express/permission.guard.d.ts +14 -0
- package/dist/express/permission.guard.d.ts.map +1 -0
- package/dist/express/permission.guard.js +66 -0
- package/dist/express/permission.guard.js.map +1 -0
- package/dist/express/validation.middleware.d.ts +14 -0
- package/dist/express/validation.middleware.d.ts.map +1 -0
- package/dist/express/validation.middleware.js +80 -0
- package/dist/express/validation.middleware.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/index.d.ts +4 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +24 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/messaging/index.d.ts +58 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +132 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/nestjs/auth.guard.d.ts +12 -0
- package/dist/nestjs/auth.guard.d.ts.map +1 -0
- package/dist/nestjs/auth.guard.js +75 -0
- package/dist/nestjs/auth.guard.js.map +1 -0
- package/dist/nestjs/correlation.interceptor.d.ts +9 -0
- package/dist/nestjs/correlation.interceptor.d.ts.map +1 -0
- package/dist/nestjs/correlation.interceptor.js +29 -0
- package/dist/nestjs/correlation.interceptor.js.map +1 -0
- package/dist/nestjs/exception.filter.d.ts +8 -0
- package/dist/nestjs/exception.filter.d.ts.map +1 -0
- package/dist/nestjs/exception.filter.js +54 -0
- package/dist/nestjs/exception.filter.js.map +1 -0
- package/dist/nestjs/index.d.ts +7 -0
- package/dist/nestjs/index.d.ts.map +1 -0
- package/dist/nestjs/index.js +7 -0
- package/dist/nestjs/index.js.map +1 -0
- package/dist/nestjs/permission.decorator.d.ts +22 -0
- package/dist/nestjs/permission.decorator.d.ts.map +1 -0
- package/dist/nestjs/permission.decorator.js +30 -0
- package/dist/nestjs/permission.decorator.js.map +1 -0
- package/dist/nestjs/permission.guard.d.ts +12 -0
- package/dist/nestjs/permission.guard.d.ts.map +1 -0
- package/dist/nestjs/permission.guard.js +66 -0
- package/dist/nestjs/permission.guard.js.map +1 -0
- package/dist/nestjs/user.decorator.d.ts +12 -0
- package/dist/nestjs/user.decorator.d.ts.map +1 -0
- package/dist/nestjs/user.decorator.js +16 -0
- package/dist/nestjs/user.decorator.js.map +1 -0
- package/dist/types/index.d.ts +193 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +17 -0
- package/dist/types/index.js.map +1 -0
- package/dist/validation/index.d.ts +32 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +21 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +100 -0
- package/src/common/index.ts +5 -0
- package/src/common/jwt.utils.ts +43 -0
- package/src/common/password.utils.ts +20 -0
- package/src/common/phone.utils.ts +36 -0
- package/src/common/response.utils.ts +48 -0
- package/src/common/uuid.utils.ts +11 -0
- package/src/config/index.ts +73 -0
- package/src/database/index.ts +77 -0
- package/src/express/auth.middleware.ts +93 -0
- package/src/express/correlation.middleware.ts +16 -0
- package/src/express/error-handler.ts +28 -0
- package/src/express/index.ts +5 -0
- package/src/express/permission.guard.ts +72 -0
- package/src/express/validation.middleware.ts +76 -0
- package/src/index.ts +23 -0
- package/src/logging/index.ts +31 -0
- package/src/messaging/index.ts +161 -0
- package/src/nestjs/auth.guard.ts +69 -0
- package/src/nestjs/correlation.interceptor.ts +30 -0
- package/src/nestjs/exception.filter.ts +53 -0
- package/src/nestjs/index.ts +11 -0
- package/src/nestjs/permission.decorator.ts +36 -0
- package/src/nestjs/permission.guard.ts +76 -0
- package/src/nestjs/user.decorator.ts +19 -0
- package/src/types/index.ts +239 -0
- package/src/validation/index.ts +26 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlation.middleware.d.ts","sourceRoot":"","sources":["../../src/express/correlation.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI/D;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,IAC/C,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAO/D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { GATEWAY_HEADERS } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ensures every request has a correlation ID for distributed tracing.
|
|
5
|
+
*/
|
|
6
|
+
export function correlationMiddleware(serviceName) {
|
|
7
|
+
return (req, res, next) => {
|
|
8
|
+
const correlationId = req.headers[GATEWAY_HEADERS.CORRELATION_ID] || uuidv4();
|
|
9
|
+
req.headers[GATEWAY_HEADERS.CORRELATION_ID] = correlationId;
|
|
10
|
+
req.headers[GATEWAY_HEADERS.SERVICE_NAME] = serviceName;
|
|
11
|
+
res.setHeader(GATEWAY_HEADERS.CORRELATION_ID, correlationId);
|
|
12
|
+
next();
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=correlation.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlation.middleware.js","sourceRoot":"","sources":["../../src/express/correlation.middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,aAAa,GAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAY,IAAI,MAAM,EAAE,CAAC;QAC1F,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC;QAC5D,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC;QACxD,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
export interface AppError extends Error {
|
|
3
|
+
statusCode?: number;
|
|
4
|
+
errors?: Record<string, string[]>;
|
|
5
|
+
}
|
|
6
|
+
export declare function globalErrorHandler(err: AppError, _req: Request, res: Response, _next: NextFunction): void;
|
|
7
|
+
export declare function notFoundHandler(_req: Request, res: Response): void;
|
|
8
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/express/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK/D,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAazG;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAElE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createLogger } from '../logging/index.js';
|
|
2
|
+
const logger = createLogger('error-handler');
|
|
3
|
+
export function globalErrorHandler(err, _req, res, _next) {
|
|
4
|
+
const statusCode = err.statusCode || 500;
|
|
5
|
+
const message = statusCode === 500 ? 'Internal server error' : err.message;
|
|
6
|
+
if (statusCode === 500) {
|
|
7
|
+
logger.error('Unhandled error', { error: err.message, stack: err.stack });
|
|
8
|
+
}
|
|
9
|
+
res.status(statusCode).json({
|
|
10
|
+
success: false,
|
|
11
|
+
message,
|
|
12
|
+
errors: err.errors,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export function notFoundHandler(_req, res) {
|
|
16
|
+
res.status(404).json({ success: false, message: 'Resource not found' });
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/express/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAO7C,MAAM,UAAU,kBAAkB,CAAC,GAAa,EAAE,IAAa,EAAE,GAAa,EAAE,KAAmB;IACjG,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;IAE3E,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,KAAK;QACd,OAAO;QACP,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,GAAa;IAC1D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Require a specific permission. Superadmins bypass all checks.
|
|
4
|
+
*/
|
|
5
|
+
export declare function requirePermission(...permissions: string[]): (req: Request, res: Response, next: NextFunction) => void;
|
|
6
|
+
/**
|
|
7
|
+
* Require ALL of the listed permissions.
|
|
8
|
+
*/
|
|
9
|
+
export declare function requireAllPermissions(...permissions: string[]): (req: Request, res: Response, next: NextFunction) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Require a specific role.
|
|
12
|
+
*/
|
|
13
|
+
export declare function requireRole(...roles: string[]): (req: Request, res: Response, next: NextFunction) => void;
|
|
14
|
+
//# sourceMappingURL=permission.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.guard.d.ts","sourceRoot":"","sources":["../../src/express/permission.guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,IAChD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAmB/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,IACpD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAmB/D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,IACpC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAe/D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Require a specific permission. Superadmins bypass all checks.
|
|
3
|
+
*/
|
|
4
|
+
export function requirePermission(...permissions) {
|
|
5
|
+
return (req, res, next) => {
|
|
6
|
+
if (!req.user) {
|
|
7
|
+
res.status(401).json({ success: false, message: 'Authentication required' });
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (req.user.isSuperAdmin)
|
|
11
|
+
return next();
|
|
12
|
+
const hasPermission = permissions.some(p => req.user.permissions.includes(p));
|
|
13
|
+
if (!hasPermission) {
|
|
14
|
+
res.status(403).json({
|
|
15
|
+
success: false,
|
|
16
|
+
message: 'Insufficient permissions',
|
|
17
|
+
errors: { required: permissions },
|
|
18
|
+
});
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
next();
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Require ALL of the listed permissions.
|
|
26
|
+
*/
|
|
27
|
+
export function requireAllPermissions(...permissions) {
|
|
28
|
+
return (req, res, next) => {
|
|
29
|
+
if (!req.user) {
|
|
30
|
+
res.status(401).json({ success: false, message: 'Authentication required' });
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (req.user.isSuperAdmin)
|
|
34
|
+
return next();
|
|
35
|
+
const hasAll = permissions.every(p => req.user.permissions.includes(p));
|
|
36
|
+
if (!hasAll) {
|
|
37
|
+
res.status(403).json({
|
|
38
|
+
success: false,
|
|
39
|
+
message: 'Insufficient permissions',
|
|
40
|
+
errors: { required: permissions },
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
next();
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Require a specific role.
|
|
49
|
+
*/
|
|
50
|
+
export function requireRole(...roles) {
|
|
51
|
+
return (req, res, next) => {
|
|
52
|
+
if (!req.user) {
|
|
53
|
+
res.status(401).json({ success: false, message: 'Authentication required' });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (req.user.isSuperAdmin)
|
|
57
|
+
return next();
|
|
58
|
+
const hasRole = roles.some(r => req.user.roles.includes(r));
|
|
59
|
+
if (!hasRole) {
|
|
60
|
+
res.status(403).json({ success: false, message: 'Insufficient role' });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
next();
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=permission.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.guard.js","sourceRoot":"","sources":["../../src/express/permission.guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
import type { ZodSchema } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* Zod validation middleware for Express routes.
|
|
5
|
+
* @param schema Zod schema to validate against
|
|
6
|
+
* @param property Which part of the request to validate ('body' | 'query' | 'params')
|
|
7
|
+
*/
|
|
8
|
+
export declare function validate(schema: ZodSchema, property?: 'body' | 'query' | 'params'): (req: Request, res: Response, next: NextFunction) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Zod validation middleware – accepts a compound schema with body/query/params
|
|
11
|
+
* keys, or a simple schema validated against body.
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateRequest(schema: ZodSchema): (req: Request, res: Response, next: NextFunction) => void;
|
|
14
|
+
//# sourceMappingURL=validation.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.middleware.d.ts","sourceRoot":"","sources":["../../src/express/validation.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAA0B,MAAM,KAAK,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAE,MAAM,GAAG,OAAO,GAAG,QAAiB,IAChF,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAe/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,IACvC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA4C/D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod validation middleware for Express routes.
|
|
3
|
+
* @param schema Zod schema to validate against
|
|
4
|
+
* @param property Which part of the request to validate ('body' | 'query' | 'params')
|
|
5
|
+
*/
|
|
6
|
+
export function validate(schema, property = 'body') {
|
|
7
|
+
return (req, res, next) => {
|
|
8
|
+
const result = schema.safeParse(req[property]);
|
|
9
|
+
if (!result.success) {
|
|
10
|
+
const errors = {};
|
|
11
|
+
for (const issue of result.error.issues) {
|
|
12
|
+
const key = issue.path.join('.');
|
|
13
|
+
if (!errors[key])
|
|
14
|
+
errors[key] = [];
|
|
15
|
+
errors[key].push(issue.message);
|
|
16
|
+
}
|
|
17
|
+
res.status(422).json({ success: false, message: 'Validation failed', errors });
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
req[property] = result.data;
|
|
21
|
+
next();
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Zod validation middleware – accepts a compound schema with body/query/params
|
|
26
|
+
* keys, or a simple schema validated against body.
|
|
27
|
+
*/
|
|
28
|
+
export function validateRequest(schema) {
|
|
29
|
+
return (req, res, next) => {
|
|
30
|
+
// Check if this is a compound schema with body/query/params keys
|
|
31
|
+
const shape = schema?.shape;
|
|
32
|
+
const isCompound = shape && ('body' in shape || 'query' in shape || 'params' in shape);
|
|
33
|
+
if (isCompound) {
|
|
34
|
+
const data = {};
|
|
35
|
+
if (shape.body)
|
|
36
|
+
data.body = req.body;
|
|
37
|
+
if (shape.query)
|
|
38
|
+
data.query = req.query;
|
|
39
|
+
if (shape.params)
|
|
40
|
+
data.params = req.params;
|
|
41
|
+
const result = schema.safeParse(data);
|
|
42
|
+
if (!result.success) {
|
|
43
|
+
const errors = {};
|
|
44
|
+
for (const issue of result.error.issues) {
|
|
45
|
+
const key = issue.path.join('.');
|
|
46
|
+
if (!errors[key])
|
|
47
|
+
errors[key] = [];
|
|
48
|
+
errors[key].push(issue.message);
|
|
49
|
+
}
|
|
50
|
+
res.status(422).json({ success: false, message: 'Validation failed', errors });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const parsed = result.data;
|
|
54
|
+
if (parsed.body)
|
|
55
|
+
req.body = parsed.body;
|
|
56
|
+
if (parsed.query)
|
|
57
|
+
req.query = parsed.query;
|
|
58
|
+
if (parsed.params)
|
|
59
|
+
req.params = parsed.params;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Simple schema – validate body
|
|
63
|
+
const result = schema.safeParse(req.body);
|
|
64
|
+
if (!result.success) {
|
|
65
|
+
const errors = {};
|
|
66
|
+
for (const issue of result.error.issues) {
|
|
67
|
+
const key = issue.path.join('.');
|
|
68
|
+
if (!errors[key])
|
|
69
|
+
errors[key] = [];
|
|
70
|
+
errors[key].push(issue.message);
|
|
71
|
+
}
|
|
72
|
+
res.status(422).json({ success: false, message: 'Validation failed', errors });
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
req.body = result.data;
|
|
76
|
+
}
|
|
77
|
+
next();
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=validation.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.middleware.js","sourceRoot":"","sources":["../../src/express/validation.middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './types/index.js';
|
|
2
|
+
export * from './common/index.js';
|
|
3
|
+
export * from './validation/index.js';
|
|
4
|
+
export * from './logging/index.js';
|
|
5
|
+
export * from './config/index.js';
|
|
6
|
+
export * from './messaging/index.js';
|
|
7
|
+
export * from './database/index.js';
|
|
8
|
+
export * from './express/index.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Types
|
|
2
|
+
export * from './types/index.js';
|
|
3
|
+
// Common utilities
|
|
4
|
+
export * from './common/index.js';
|
|
5
|
+
// Validation
|
|
6
|
+
export * from './validation/index.js';
|
|
7
|
+
// Logging
|
|
8
|
+
export * from './logging/index.js';
|
|
9
|
+
// Config
|
|
10
|
+
export * from './config/index.js';
|
|
11
|
+
// Messaging
|
|
12
|
+
export * from './messaging/index.js';
|
|
13
|
+
// Database
|
|
14
|
+
export * from './database/index.js';
|
|
15
|
+
// Express middleware (for Express-based services)
|
|
16
|
+
export * from './express/index.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,mBAAmB;AACnB,cAAc,mBAAmB,CAAC;AAElC,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,UAAU;AACV,cAAc,oBAAoB,CAAC;AAEnC,SAAS;AACT,cAAc,mBAAmB,CAAC;AAElC,YAAY;AACZ,cAAc,sBAAsB,CAAC;AAErC,WAAW;AACX,cAAc,qBAAqB,CAAC;AAEpC,kDAAkD;AAClD,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAe5E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CASjE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
const { combine, timestamp, json, errors, colorize, simple } = winston.format;
|
|
3
|
+
export function createLogger(service, level) {
|
|
4
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
5
|
+
return winston.createLogger({
|
|
6
|
+
level: level || process.env.LOG_LEVEL || (isProduction ? 'info' : 'debug'),
|
|
7
|
+
defaultMeta: { service },
|
|
8
|
+
format: combine(errors({ stack: true }), timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), isProduction ? json() : combine(colorize(), simple())),
|
|
9
|
+
transports: [
|
|
10
|
+
new winston.transports.Console(),
|
|
11
|
+
],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function createAuditLogger(service) {
|
|
15
|
+
return winston.createLogger({
|
|
16
|
+
level: 'info',
|
|
17
|
+
defaultMeta: { service, type: 'audit' },
|
|
18
|
+
format: combine(timestamp(), json()),
|
|
19
|
+
transports: [
|
|
20
|
+
new winston.transports.Console(),
|
|
21
|
+
],
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;AAE9E,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,KAAc;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAE3D,OAAO,OAAO,CAAC,YAAY,CAAC;QAC1B,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1E,WAAW,EAAE,EAAE,OAAO,EAAE;QACxB,MAAM,EAAE,OAAO,CACb,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACvB,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAC5C,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CACtD;QACD,UAAU,EAAE;YACV,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;SACjC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,OAAO,CAAC,YAAY,CAAC;QAC1B,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;QACvC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC;QACpC,UAAU,EAAE;YACV,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;SACjC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare const EVENTS: {
|
|
2
|
+
readonly AUTH_USER_CREATED: "auth.user.created";
|
|
3
|
+
readonly AUTH_USER_UPDATED: "auth.user.updated";
|
|
4
|
+
readonly AUTH_USER_DELETED: "auth.user.deleted";
|
|
5
|
+
readonly AUTH_USER_REGISTERED: "auth.user.registered";
|
|
6
|
+
readonly AUTH_LOGIN_SUCCESS: "auth.login.success";
|
|
7
|
+
readonly AUTH_LOGIN_FAILED: "auth.login.failed";
|
|
8
|
+
readonly AUTH_ROLE_UPDATED: "auth.role.updated";
|
|
9
|
+
readonly AUTH_COMPANY_CREATED: "auth.company.created";
|
|
10
|
+
readonly AUTH_COMPANY_UPDATED: "auth.company.updated";
|
|
11
|
+
readonly AUTH_COMPANY_CONFIG_UPDATED: "auth.company.config_updated";
|
|
12
|
+
readonly AUTH_PASSWORD_RESET_REQUESTED: "auth.password.reset_requested";
|
|
13
|
+
readonly AUTH_OTP_REQUESTED: "auth.otp.requested";
|
|
14
|
+
readonly SMS_MESSAGE_SENT: "sms.message.sent";
|
|
15
|
+
readonly SMS_MESSAGE_DELIVERED: "sms.message.delivered";
|
|
16
|
+
readonly SMS_MESSAGE_FAILED: "sms.message.failed";
|
|
17
|
+
readonly SMS_DELIVERY_FAILED: "sms.delivery.failed";
|
|
18
|
+
readonly SMS_SCHEDULE_TRIGGERED: "sms.schedule.triggered";
|
|
19
|
+
readonly SMS_PROCESS_SCHEDULED: "sms.process_scheduled";
|
|
20
|
+
readonly SMS_BULK_QUEUED: "sms.bulk.queued";
|
|
21
|
+
readonly SMS_BULK_COMPLETED: "sms.bulk.completed";
|
|
22
|
+
readonly MPESA_PAYMENT_RECEIVED: "mpesa.payment.received";
|
|
23
|
+
readonly MPESA_STK_PUSH_SUCCESS: "mpesa.stk_push.success";
|
|
24
|
+
readonly MPESA_STK_PUSH_FAILED: "mpesa.stk_push.failed";
|
|
25
|
+
readonly MPESA_STK_PUSH_COMPLETED: "mpesa.stk_push.completed";
|
|
26
|
+
readonly MPESA_B2C_COMPLETED: "mpesa.b2c.completed";
|
|
27
|
+
readonly USSD_SESSION_STARTED: "ussd.session.started";
|
|
28
|
+
readonly USSD_SESSION_ENDED: "ussd.session.ended";
|
|
29
|
+
readonly USSD_SUBSCRIBER_REGISTERED: "ussd.subscriber.registered";
|
|
30
|
+
readonly USSD_STK_PUSH_REQUEST: "ussd.stk_push.request";
|
|
31
|
+
readonly WHATSAPP_MESSAGE_SENT: "whatsapp.message.sent";
|
|
32
|
+
readonly WHATSAPP_MESSAGE_RECEIVED: "whatsapp.message.received";
|
|
33
|
+
readonly WHATSAPP_MESSAGE_DELIVERED: "whatsapp.message.delivered";
|
|
34
|
+
readonly WHATSAPP_MESSAGE_READ: "whatsapp.message.read";
|
|
35
|
+
readonly NOTIFICATION_SEND_SMS: "notification.send_sms";
|
|
36
|
+
readonly NOTIFICATION_SEND_WHATSAPP: "notification.send_whatsapp";
|
|
37
|
+
readonly NOTIFICATION_SEND_EMAIL: "notification.send_email";
|
|
38
|
+
readonly AI_COMPLETION_SUCCESS: "ai.completion.success";
|
|
39
|
+
readonly AI_COMPLETION_FAILED: "ai.completion.failed";
|
|
40
|
+
readonly AI_ANOMALY_DETECTED: "ai.anomaly.detected";
|
|
41
|
+
readonly GATEWAY_REQUEST_COMPLETED: "gateway.request.completed";
|
|
42
|
+
readonly GATEWAY_REQUEST_ERROR: "gateway.request.error";
|
|
43
|
+
};
|
|
44
|
+
export declare const EXCHANGES: {
|
|
45
|
+
readonly EVENTS: "pendoadmin.events";
|
|
46
|
+
readonly COMMANDS: "pendoadmin.commands";
|
|
47
|
+
};
|
|
48
|
+
export declare class RabbitMQClient {
|
|
49
|
+
private connection;
|
|
50
|
+
private channel;
|
|
51
|
+
private url;
|
|
52
|
+
constructor(url: string);
|
|
53
|
+
connect(): Promise<void>;
|
|
54
|
+
publish(routingKey: string, data: Record<string, unknown>, exchange?: string): Promise<void>;
|
|
55
|
+
subscribe(queueName: string, routingKeys: string | string[], handler: (data: Record<string, unknown>, routingKey: string) => Promise<void>, exchange?: string): Promise<void>;
|
|
56
|
+
close(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDT,CAAC;AAEX,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAIX,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,GAAG,CAAS;gBAER,GAAG,EAAE,MAAM;IAIjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBxB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAE,MAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9G,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAC7E,QAAQ,GAAE,MAAyB,GAClC,OAAO,CAAC,IAAI,CAAC;IAyBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import amqplib from 'amqplib';
|
|
2
|
+
import { createLogger } from '../logging/index.js';
|
|
3
|
+
const logger = createLogger('rabbitmq');
|
|
4
|
+
// ── Event Type Constants ──────────────────────────────
|
|
5
|
+
export const EVENTS = {
|
|
6
|
+
// Auth events
|
|
7
|
+
AUTH_USER_CREATED: 'auth.user.created',
|
|
8
|
+
AUTH_USER_UPDATED: 'auth.user.updated',
|
|
9
|
+
AUTH_USER_DELETED: 'auth.user.deleted',
|
|
10
|
+
AUTH_USER_REGISTERED: 'auth.user.registered',
|
|
11
|
+
AUTH_LOGIN_SUCCESS: 'auth.login.success',
|
|
12
|
+
AUTH_LOGIN_FAILED: 'auth.login.failed',
|
|
13
|
+
AUTH_ROLE_UPDATED: 'auth.role.updated',
|
|
14
|
+
AUTH_COMPANY_CREATED: 'auth.company.created',
|
|
15
|
+
AUTH_COMPANY_UPDATED: 'auth.company.updated',
|
|
16
|
+
AUTH_COMPANY_CONFIG_UPDATED: 'auth.company.config_updated',
|
|
17
|
+
AUTH_PASSWORD_RESET_REQUESTED: 'auth.password.reset_requested',
|
|
18
|
+
AUTH_OTP_REQUESTED: 'auth.otp.requested',
|
|
19
|
+
// SMS events
|
|
20
|
+
SMS_MESSAGE_SENT: 'sms.message.sent',
|
|
21
|
+
SMS_MESSAGE_DELIVERED: 'sms.message.delivered',
|
|
22
|
+
SMS_MESSAGE_FAILED: 'sms.message.failed',
|
|
23
|
+
SMS_DELIVERY_FAILED: 'sms.delivery.failed',
|
|
24
|
+
SMS_SCHEDULE_TRIGGERED: 'sms.schedule.triggered',
|
|
25
|
+
SMS_PROCESS_SCHEDULED: 'sms.process_scheduled',
|
|
26
|
+
SMS_BULK_QUEUED: 'sms.bulk.queued',
|
|
27
|
+
SMS_BULK_COMPLETED: 'sms.bulk.completed',
|
|
28
|
+
// M-Pesa events
|
|
29
|
+
MPESA_PAYMENT_RECEIVED: 'mpesa.payment.received',
|
|
30
|
+
MPESA_STK_PUSH_SUCCESS: 'mpesa.stk_push.success',
|
|
31
|
+
MPESA_STK_PUSH_FAILED: 'mpesa.stk_push.failed',
|
|
32
|
+
MPESA_STK_PUSH_COMPLETED: 'mpesa.stk_push.completed',
|
|
33
|
+
MPESA_B2C_COMPLETED: 'mpesa.b2c.completed',
|
|
34
|
+
// USSD events
|
|
35
|
+
USSD_SESSION_STARTED: 'ussd.session.started',
|
|
36
|
+
USSD_SESSION_ENDED: 'ussd.session.ended',
|
|
37
|
+
USSD_SUBSCRIBER_REGISTERED: 'ussd.subscriber.registered',
|
|
38
|
+
USSD_STK_PUSH_REQUEST: 'ussd.stk_push.request',
|
|
39
|
+
// WhatsApp events
|
|
40
|
+
WHATSAPP_MESSAGE_SENT: 'whatsapp.message.sent',
|
|
41
|
+
WHATSAPP_MESSAGE_RECEIVED: 'whatsapp.message.received',
|
|
42
|
+
WHATSAPP_MESSAGE_DELIVERED: 'whatsapp.message.delivered',
|
|
43
|
+
WHATSAPP_MESSAGE_READ: 'whatsapp.message.read',
|
|
44
|
+
// Notification events
|
|
45
|
+
NOTIFICATION_SEND_SMS: 'notification.send_sms',
|
|
46
|
+
NOTIFICATION_SEND_WHATSAPP: 'notification.send_whatsapp',
|
|
47
|
+
NOTIFICATION_SEND_EMAIL: 'notification.send_email',
|
|
48
|
+
// AI events
|
|
49
|
+
AI_COMPLETION_SUCCESS: 'ai.completion.success',
|
|
50
|
+
AI_COMPLETION_FAILED: 'ai.completion.failed',
|
|
51
|
+
AI_ANOMALY_DETECTED: 'ai.anomaly.detected',
|
|
52
|
+
// Gateway events
|
|
53
|
+
GATEWAY_REQUEST_COMPLETED: 'gateway.request.completed',
|
|
54
|
+
GATEWAY_REQUEST_ERROR: 'gateway.request.error',
|
|
55
|
+
};
|
|
56
|
+
export const EXCHANGES = {
|
|
57
|
+
EVENTS: 'pendoadmin.events',
|
|
58
|
+
COMMANDS: 'pendoadmin.commands',
|
|
59
|
+
};
|
|
60
|
+
// ── RabbitMQ Client ───────────────────────────────────
|
|
61
|
+
export class RabbitMQClient {
|
|
62
|
+
connection = null;
|
|
63
|
+
channel = null;
|
|
64
|
+
url;
|
|
65
|
+
constructor(url) {
|
|
66
|
+
this.url = url;
|
|
67
|
+
}
|
|
68
|
+
async connect() {
|
|
69
|
+
try {
|
|
70
|
+
this.connection = await amqplib.connect(this.url);
|
|
71
|
+
this.channel = await this.connection.createChannel();
|
|
72
|
+
// Set up exchanges
|
|
73
|
+
await this.channel.assertExchange(EXCHANGES.EVENTS, 'topic', { durable: true });
|
|
74
|
+
await this.channel.assertExchange(EXCHANGES.COMMANDS, 'direct', { durable: true });
|
|
75
|
+
this.connection.on('error', (err) => {
|
|
76
|
+
logger.error('RabbitMQ connection error', { error: err.message });
|
|
77
|
+
});
|
|
78
|
+
this.connection.on('close', () => {
|
|
79
|
+
logger.warn('RabbitMQ connection closed, reconnecting...');
|
|
80
|
+
setTimeout(() => this.connect(), 5000);
|
|
81
|
+
});
|
|
82
|
+
logger.info('Connected to RabbitMQ');
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
logger.error('Failed to connect to RabbitMQ', { error: error.message });
|
|
86
|
+
setTimeout(() => this.connect(), 5000);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async publish(routingKey, data, exchange = EXCHANGES.EVENTS) {
|
|
90
|
+
if (!this.channel) {
|
|
91
|
+
logger.warn('RabbitMQ channel not ready, message dropped', { routingKey });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const message = Buffer.from(JSON.stringify({
|
|
95
|
+
routingKey,
|
|
96
|
+
data,
|
|
97
|
+
timestamp: new Date().toISOString(),
|
|
98
|
+
}));
|
|
99
|
+
this.channel.publish(exchange, routingKey, message, {
|
|
100
|
+
persistent: true,
|
|
101
|
+
contentType: 'application/json',
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
async subscribe(queueName, routingKeys, handler, exchange = EXCHANGES.EVENTS) {
|
|
105
|
+
if (!this.channel)
|
|
106
|
+
throw new Error('RabbitMQ channel not ready');
|
|
107
|
+
const keys = Array.isArray(routingKeys) ? routingKeys : [routingKeys];
|
|
108
|
+
await this.channel.assertQueue(queueName, { durable: true });
|
|
109
|
+
for (const key of keys) {
|
|
110
|
+
await this.channel.bindQueue(queueName, exchange, key);
|
|
111
|
+
}
|
|
112
|
+
await this.channel.consume(queueName, async (msg) => {
|
|
113
|
+
if (!msg)
|
|
114
|
+
return;
|
|
115
|
+
try {
|
|
116
|
+
const parsed = JSON.parse(msg.content.toString());
|
|
117
|
+
await handler(parsed.data || parsed, msg.fields.routingKey);
|
|
118
|
+
this.channel.ack(msg);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error('Error processing message', { queue: queueName, error: error.message });
|
|
122
|
+
this.channel.nack(msg, false, false); // Dead letter
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
logger.info(`Subscribed to queue: ${queueName}`, { routingKeys });
|
|
126
|
+
}
|
|
127
|
+
async close() {
|
|
128
|
+
await this.channel?.close();
|
|
129
|
+
await this.connection?.close();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
export declare const IS_PUBLIC_KEY = "isPublic";
|
|
4
|
+
/**
|
|
5
|
+
* NestJS Guard: validates JWT or trusts gateway-injected headers.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AuthGuard implements CanActivate {
|
|
8
|
+
private reflector;
|
|
9
|
+
constructor(reflector: Reflector);
|
|
10
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=auth.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.guard.d.ts","sourceRoot":"","sources":["../../src/nestjs/auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC;;GAEG;AACH,qBACa,SAAU,YAAW,WAAW;IAC/B,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAElC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAiD/D"}
|