@morojs/moro 1.6.8 → 1.7.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 (300) hide show
  1. package/README.md +3 -1
  2. package/dist/core/auth/morojs-adapter.js +16 -6
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-sources.js +27 -15
  5. package/dist/core/config/config-sources.js.map +1 -1
  6. package/dist/core/config/config-validator.js +201 -6
  7. package/dist/core/config/config-validator.js.map +1 -1
  8. package/dist/core/docs/openapi-generator.js +8 -9
  9. package/dist/core/docs/openapi-generator.js.map +1 -1
  10. package/dist/core/events/event-bus.js +1 -1
  11. package/dist/core/events/event-bus.js.map +1 -1
  12. package/dist/core/framework.d.ts +4 -2
  13. package/dist/core/framework.js +25 -24
  14. package/dist/core/framework.js.map +1 -1
  15. package/dist/core/graphql/core.js +34 -8
  16. package/dist/core/graphql/core.js.map +1 -1
  17. package/dist/core/grpc/adapters/grpc-js-adapter.d.ts +28 -0
  18. package/dist/core/grpc/adapters/grpc-js-adapter.js +449 -0
  19. package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -0
  20. package/dist/core/grpc/adapters/index.d.ts +1 -0
  21. package/dist/core/grpc/adapters/index.js +6 -0
  22. package/dist/core/grpc/adapters/index.js.map +1 -0
  23. package/dist/core/grpc/grpc-adapter.d.ts +47 -0
  24. package/dist/core/grpc/grpc-adapter.js +4 -0
  25. package/dist/core/grpc/grpc-adapter.js.map +1 -0
  26. package/dist/core/grpc/grpc-manager.d.ts +59 -0
  27. package/dist/core/grpc/grpc-manager.js +218 -0
  28. package/dist/core/grpc/grpc-manager.js.map +1 -0
  29. package/dist/core/grpc/index.d.ts +7 -0
  30. package/dist/core/grpc/index.js +10 -0
  31. package/dist/core/grpc/index.js.map +1 -0
  32. package/dist/core/grpc/middleware/auth.d.ts +22 -0
  33. package/dist/core/grpc/middleware/auth.js +126 -0
  34. package/dist/core/grpc/middleware/auth.js.map +1 -0
  35. package/dist/core/grpc/middleware/logging.d.ts +19 -0
  36. package/dist/core/grpc/middleware/logging.js +57 -0
  37. package/dist/core/grpc/middleware/logging.js.map +1 -0
  38. package/dist/core/grpc/middleware/validation.d.ts +18 -0
  39. package/dist/core/grpc/middleware/validation.js +126 -0
  40. package/dist/core/grpc/middleware/validation.js.map +1 -0
  41. package/dist/core/grpc/types.d.ts +233 -0
  42. package/dist/core/grpc/types.js +36 -0
  43. package/dist/core/grpc/types.js.map +1 -0
  44. package/dist/core/http/http-server.d.ts +13 -84
  45. package/dist/core/http/http-server.js +205 -792
  46. package/dist/core/http/http-server.js.map +1 -1
  47. package/dist/core/http/http2-server.d.ts +131 -0
  48. package/dist/core/http/http2-server.js +803 -0
  49. package/dist/core/http/http2-server.js.map +1 -0
  50. package/dist/core/http/index.d.ts +3 -1
  51. package/dist/core/http/index.js +2 -1
  52. package/dist/core/http/index.js.map +1 -1
  53. package/dist/core/http/uws-http-server.js +21 -26
  54. package/dist/core/http/uws-http-server.js.map +1 -1
  55. package/dist/core/jobs/job-executor.js +6 -1
  56. package/dist/core/jobs/job-executor.js.map +1 -1
  57. package/dist/core/jobs/job-scheduler.js +4 -1
  58. package/dist/core/jobs/job-scheduler.js.map +1 -1
  59. package/dist/core/jobs/leader-election.js +2 -1
  60. package/dist/core/jobs/leader-election.js.map +1 -1
  61. package/dist/core/logger/logger.js +41 -18
  62. package/dist/core/logger/logger.js.map +1 -1
  63. package/dist/core/logger/outputs.js +9 -3
  64. package/dist/core/logger/outputs.js.map +1 -1
  65. package/dist/core/mail/adapters/console-adapter.d.ts +14 -0
  66. package/dist/core/mail/adapters/console-adapter.js +89 -0
  67. package/dist/core/mail/adapters/console-adapter.js.map +1 -0
  68. package/dist/core/mail/adapters/index.d.ts +5 -0
  69. package/dist/core/mail/adapters/index.js +8 -0
  70. package/dist/core/mail/adapters/index.js.map +1 -0
  71. package/dist/core/mail/adapters/nodemailer-adapter.d.ts +18 -0
  72. package/dist/core/mail/adapters/nodemailer-adapter.js +188 -0
  73. package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -0
  74. package/dist/core/mail/adapters/resend-adapter.d.ts +18 -0
  75. package/dist/core/mail/adapters/resend-adapter.js +169 -0
  76. package/dist/core/mail/adapters/resend-adapter.js.map +1 -0
  77. package/dist/core/mail/adapters/sendgrid-adapter.d.ts +19 -0
  78. package/dist/core/mail/adapters/sendgrid-adapter.js +186 -0
  79. package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -0
  80. package/dist/core/mail/adapters/ses-adapter.d.ts +18 -0
  81. package/dist/core/mail/adapters/ses-adapter.js +167 -0
  82. package/dist/core/mail/adapters/ses-adapter.js.map +1 -0
  83. package/dist/core/mail/index.d.ts +5 -0
  84. package/dist/core/mail/index.js +8 -0
  85. package/dist/core/mail/index.js.map +1 -0
  86. package/dist/core/mail/mail-adapter.d.ts +62 -0
  87. package/dist/core/mail/mail-adapter.js +83 -0
  88. package/dist/core/mail/mail-adapter.js.map +1 -0
  89. package/dist/core/mail/mail-manager.d.ts +63 -0
  90. package/dist/core/mail/mail-manager.js +302 -0
  91. package/dist/core/mail/mail-manager.js.map +1 -0
  92. package/dist/core/mail/template-engine.d.ts +43 -0
  93. package/dist/core/mail/template-engine.js +239 -0
  94. package/dist/core/mail/template-engine.js.map +1 -0
  95. package/dist/core/mail/types.d.ts +237 -0
  96. package/dist/core/mail/types.js +4 -0
  97. package/dist/core/mail/types.js.map +1 -0
  98. package/dist/core/middleware/built-in/body-size/core.d.ts +12 -0
  99. package/dist/core/middleware/built-in/body-size/core.js +52 -0
  100. package/dist/core/middleware/built-in/body-size/core.js.map +1 -0
  101. package/dist/core/middleware/built-in/body-size/hook.d.ts +2 -0
  102. package/dist/core/middleware/built-in/body-size/hook.js +12 -0
  103. package/dist/core/middleware/built-in/body-size/hook.js.map +1 -0
  104. package/dist/core/middleware/built-in/body-size/index.d.ts +6 -0
  105. package/dist/core/middleware/built-in/body-size/index.js +7 -0
  106. package/dist/core/middleware/built-in/body-size/index.js.map +1 -0
  107. package/dist/core/middleware/built-in/body-size/middleware.d.ts +14 -0
  108. package/dist/core/middleware/built-in/body-size/middleware.js +22 -0
  109. package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -0
  110. package/dist/core/middleware/built-in/cache/core.d.ts +20 -1
  111. package/dist/core/middleware/built-in/cache/core.js.map +1 -1
  112. package/dist/core/middleware/built-in/cache/hook.d.ts +38 -1
  113. package/dist/core/middleware/built-in/cache/hook.js +202 -16
  114. package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
  115. package/dist/core/middleware/built-in/cache/index.js +1 -1
  116. package/dist/core/middleware/built-in/cache/index.js.map +1 -1
  117. package/dist/core/middleware/built-in/compression/core.d.ts +16 -0
  118. package/dist/core/middleware/built-in/compression/core.js +75 -0
  119. package/dist/core/middleware/built-in/compression/core.js.map +1 -0
  120. package/dist/core/middleware/built-in/compression/hook.d.ts +2 -0
  121. package/dist/core/middleware/built-in/compression/hook.js +14 -0
  122. package/dist/core/middleware/built-in/compression/hook.js.map +1 -0
  123. package/dist/core/middleware/built-in/compression/index.d.ts +6 -0
  124. package/dist/core/middleware/built-in/compression/index.js +7 -0
  125. package/dist/core/middleware/built-in/compression/index.js.map +1 -0
  126. package/dist/core/middleware/built-in/compression/middleware.d.ts +20 -0
  127. package/dist/core/middleware/built-in/compression/middleware.js +28 -0
  128. package/dist/core/middleware/built-in/compression/middleware.js.map +1 -0
  129. package/dist/core/middleware/built-in/cookie/core.js +37 -9
  130. package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
  131. package/dist/core/middleware/built-in/helmet/core.d.ts +19 -0
  132. package/dist/core/middleware/built-in/helmet/core.js +70 -0
  133. package/dist/core/middleware/built-in/helmet/core.js.map +1 -0
  134. package/dist/core/middleware/built-in/helmet/hook.d.ts +2 -0
  135. package/dist/core/middleware/built-in/helmet/hook.js +12 -0
  136. package/dist/core/middleware/built-in/helmet/hook.js.map +1 -0
  137. package/dist/core/middleware/built-in/helmet/index.d.ts +6 -0
  138. package/dist/core/middleware/built-in/helmet/index.js +7 -0
  139. package/dist/core/middleware/built-in/helmet/index.js.map +1 -0
  140. package/dist/core/middleware/built-in/helmet/middleware.d.ts +22 -0
  141. package/dist/core/middleware/built-in/helmet/middleware.js +28 -0
  142. package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -0
  143. package/dist/core/middleware/built-in/http2/core.d.ts +35 -0
  144. package/dist/core/middleware/built-in/http2/core.js +128 -0
  145. package/dist/core/middleware/built-in/http2/core.js.map +1 -0
  146. package/dist/core/middleware/built-in/http2/hook.d.ts +5 -0
  147. package/dist/core/middleware/built-in/http2/hook.js +34 -0
  148. package/dist/core/middleware/built-in/http2/hook.js.map +1 -0
  149. package/dist/core/middleware/built-in/http2/index.d.ts +8 -0
  150. package/dist/core/middleware/built-in/http2/index.js +10 -0
  151. package/dist/core/middleware/built-in/http2/index.js.map +1 -0
  152. package/dist/core/middleware/built-in/http2/middleware.d.ts +20 -0
  153. package/dist/core/middleware/built-in/http2/middleware.js +31 -0
  154. package/dist/core/middleware/built-in/http2/middleware.js.map +1 -0
  155. package/dist/core/middleware/built-in/index.d.ts +18 -0
  156. package/dist/core/middleware/built-in/index.js +28 -0
  157. package/dist/core/middleware/built-in/index.js.map +1 -1
  158. package/dist/core/middleware/built-in/range/core.d.ts +16 -0
  159. package/dist/core/middleware/built-in/range/core.js +112 -0
  160. package/dist/core/middleware/built-in/range/core.js.map +1 -0
  161. package/dist/core/middleware/built-in/range/hook.d.ts +2 -0
  162. package/dist/core/middleware/built-in/range/hook.js +12 -0
  163. package/dist/core/middleware/built-in/range/hook.js.map +1 -0
  164. package/dist/core/middleware/built-in/range/index.d.ts +6 -0
  165. package/dist/core/middleware/built-in/range/index.js +7 -0
  166. package/dist/core/middleware/built-in/range/index.js.map +1 -0
  167. package/dist/core/middleware/built-in/range/middleware.d.ts +21 -0
  168. package/dist/core/middleware/built-in/range/middleware.js +27 -0
  169. package/dist/core/middleware/built-in/range/middleware.js.map +1 -0
  170. package/dist/core/middleware/built-in/session/core.js +14 -1
  171. package/dist/core/middleware/built-in/session/core.js.map +1 -1
  172. package/dist/core/middleware/built-in/static/core.d.ts +20 -0
  173. package/dist/core/middleware/built-in/static/core.js +143 -0
  174. package/dist/core/middleware/built-in/static/core.js.map +1 -0
  175. package/dist/core/middleware/built-in/static/hook.d.ts +2 -0
  176. package/dist/core/middleware/built-in/static/hook.js +12 -0
  177. package/dist/core/middleware/built-in/static/hook.js.map +1 -0
  178. package/dist/core/middleware/built-in/static/index.d.ts +6 -0
  179. package/dist/core/middleware/built-in/static/index.js +7 -0
  180. package/dist/core/middleware/built-in/static/index.js.map +1 -0
  181. package/dist/core/middleware/built-in/static/middleware.d.ts +18 -0
  182. package/dist/core/middleware/built-in/static/middleware.js +26 -0
  183. package/dist/core/middleware/built-in/static/middleware.js.map +1 -0
  184. package/dist/core/middleware/built-in/template/core.d.ts +19 -0
  185. package/dist/core/middleware/built-in/template/core.js +108 -0
  186. package/dist/core/middleware/built-in/template/core.js.map +1 -0
  187. package/dist/core/middleware/built-in/template/hook.d.ts +2 -0
  188. package/dist/core/middleware/built-in/template/hook.js +12 -0
  189. package/dist/core/middleware/built-in/template/hook.js.map +1 -0
  190. package/dist/core/middleware/built-in/template/index.d.ts +6 -0
  191. package/dist/core/middleware/built-in/template/index.js +7 -0
  192. package/dist/core/middleware/built-in/template/index.js.map +1 -0
  193. package/dist/core/middleware/built-in/template/middleware.d.ts +21 -0
  194. package/dist/core/middleware/built-in/template/middleware.js +27 -0
  195. package/dist/core/middleware/built-in/template/middleware.js.map +1 -0
  196. package/dist/core/middleware/built-in/upload/core.d.ts +29 -0
  197. package/dist/core/middleware/built-in/upload/core.js +66 -0
  198. package/dist/core/middleware/built-in/upload/core.js.map +1 -0
  199. package/dist/core/middleware/built-in/upload/hook.d.ts +2 -0
  200. package/dist/core/middleware/built-in/upload/hook.js +25 -0
  201. package/dist/core/middleware/built-in/upload/hook.js.map +1 -0
  202. package/dist/core/middleware/built-in/upload/index.d.ts +6 -0
  203. package/dist/core/middleware/built-in/upload/index.js +7 -0
  204. package/dist/core/middleware/built-in/upload/index.js.map +1 -0
  205. package/dist/core/middleware/built-in/upload/middleware.d.ts +18 -0
  206. package/dist/core/middleware/built-in/upload/middleware.js +41 -0
  207. package/dist/core/middleware/built-in/upload/middleware.js.map +1 -0
  208. package/dist/core/middleware/built-in/validation/middleware.js +2 -1
  209. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
  210. package/dist/core/networking/adapters/uws-adapter.js +54 -6
  211. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  212. package/dist/core/networking/adapters/ws-adapter.js +56 -17
  213. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  214. package/dist/core/pooling/object-pool-manager.js +9 -1
  215. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  216. package/dist/core/queue/adapters/bull-adapter.d.ts +86 -0
  217. package/dist/core/queue/adapters/bull-adapter.js +330 -0
  218. package/dist/core/queue/adapters/bull-adapter.js.map +1 -0
  219. package/dist/core/queue/adapters/index.d.ts +9 -0
  220. package/dist/core/queue/adapters/index.js +10 -0
  221. package/dist/core/queue/adapters/index.js.map +1 -0
  222. package/dist/core/queue/adapters/kafka-adapter.d.ts +86 -0
  223. package/dist/core/queue/adapters/kafka-adapter.js +462 -0
  224. package/dist/core/queue/adapters/kafka-adapter.js.map +1 -0
  225. package/dist/core/queue/adapters/memory-adapter.d.ts +87 -0
  226. package/dist/core/queue/adapters/memory-adapter.js +415 -0
  227. package/dist/core/queue/adapters/memory-adapter.js.map +1 -0
  228. package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +86 -0
  229. package/dist/core/queue/adapters/rabbitmq-adapter.js +436 -0
  230. package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -0
  231. package/dist/core/queue/adapters/sqs-adapter.d.ts +102 -0
  232. package/dist/core/queue/adapters/sqs-adapter.js +522 -0
  233. package/dist/core/queue/adapters/sqs-adapter.js.map +1 -0
  234. package/dist/core/queue/index.d.ts +11 -0
  235. package/dist/core/queue/index.js +14 -0
  236. package/dist/core/queue/index.js.map +1 -0
  237. package/dist/core/queue/middleware/index.d.ts +7 -0
  238. package/dist/core/queue/middleware/index.js +8 -0
  239. package/dist/core/queue/middleware/index.js.map +1 -0
  240. package/dist/core/queue/middleware/monitoring.d.ts +84 -0
  241. package/dist/core/queue/middleware/monitoring.js +145 -0
  242. package/dist/core/queue/middleware/monitoring.js.map +1 -0
  243. package/dist/core/queue/middleware/priority.d.ts +61 -0
  244. package/dist/core/queue/middleware/priority.js +90 -0
  245. package/dist/core/queue/middleware/priority.js.map +1 -0
  246. package/dist/core/queue/middleware/rate-limit.d.ts +34 -0
  247. package/dist/core/queue/middleware/rate-limit.js +109 -0
  248. package/dist/core/queue/middleware/rate-limit.js.map +1 -0
  249. package/dist/core/queue/queue-adapter.d.ts +73 -0
  250. package/dist/core/queue/queue-adapter.js +20 -0
  251. package/dist/core/queue/queue-adapter.js.map +1 -0
  252. package/dist/core/queue/queue-manager.d.ts +92 -0
  253. package/dist/core/queue/queue-manager.js +327 -0
  254. package/dist/core/queue/queue-manager.js.map +1 -0
  255. package/dist/core/queue/types.d.ts +205 -0
  256. package/dist/core/queue/types.js +6 -0
  257. package/dist/core/queue/types.js.map +1 -0
  258. package/dist/core/routing/index.js +41 -10
  259. package/dist/core/routing/index.js.map +1 -1
  260. package/dist/core/routing/radix-tree.d.ts +48 -0
  261. package/dist/core/routing/radix-tree.js +211 -0
  262. package/dist/core/routing/radix-tree.js.map +1 -0
  263. package/dist/core/routing/router.d.ts +10 -9
  264. package/dist/core/routing/router.js +3 -1
  265. package/dist/core/routing/router.js.map +1 -1
  266. package/dist/core/routing/unified-router.d.ts +18 -12
  267. package/dist/core/routing/unified-router.js +220 -163
  268. package/dist/core/routing/unified-router.js.map +1 -1
  269. package/dist/core/runtime/aws-lambda-adapter.js +21 -10
  270. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  271. package/dist/core/runtime/base-adapter.js +15 -5
  272. package/dist/core/runtime/base-adapter.js.map +1 -1
  273. package/dist/core/runtime/cloudflare-workers-adapter.js +35 -12
  274. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  275. package/dist/core/runtime/vercel-edge-adapter.js +16 -6
  276. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  277. package/dist/core/utilities/container.js +3 -1
  278. package/dist/core/utilities/container.js.map +1 -1
  279. package/dist/core/workers/facade.d.ts +74 -0
  280. package/dist/core/workers/facade.js +98 -0
  281. package/dist/core/workers/facade.js.map +1 -0
  282. package/dist/core/workers/index.d.ts +2 -0
  283. package/dist/core/workers/index.js +6 -0
  284. package/dist/core/workers/index.js.map +1 -0
  285. package/dist/core/workers/worker-manager.d.ts +124 -0
  286. package/dist/core/workers/worker-manager.js +299 -0
  287. package/dist/core/workers/worker-manager.js.map +1 -0
  288. package/dist/core/workers/worker.d.ts +1 -0
  289. package/dist/core/workers/worker.js +225 -0
  290. package/dist/core/workers/worker.js.map +1 -0
  291. package/dist/index.d.ts +8 -1
  292. package/dist/index.js +6 -1
  293. package/dist/index.js.map +1 -1
  294. package/dist/moro.d.ts +345 -13
  295. package/dist/moro.js +803 -214
  296. package/dist/moro.js.map +1 -1
  297. package/dist/types/cache.d.ts +4 -0
  298. package/dist/types/config.d.ts +42 -0
  299. package/dist/types/core.d.ts +18 -1
  300. package/package.json +94 -20
@@ -0,0 +1,218 @@
1
+ // gRPC Manager - Main orchestrator for gRPC functionality
2
+ // Handles adapter initialization, service registration, and lifecycle management
3
+ import { createFrameworkLogger } from '../logger/index.js';
4
+ import { isPackageAvailable } from '../utilities/package-utils.js';
5
+ /**
6
+ * gRPC Manager for MoroJS
7
+ * Manages gRPC server lifecycle, service registration, and client creation
8
+ */
9
+ export class GrpcManager {
10
+ adapter;
11
+ options;
12
+ logger = createFrameworkLogger('GRPC_MANAGER');
13
+ server;
14
+ services = new Map();
15
+ isInitialized = false;
16
+ isStarted = false;
17
+ constructor(options = {}) {
18
+ this.options = {
19
+ port: 50051,
20
+ host: '0.0.0.0',
21
+ adapter: 'grpc-js',
22
+ enableHealthCheck: true,
23
+ enableReflection: false,
24
+ maxReceiveMessageLength: 4 * 1024 * 1024, // 4MB
25
+ maxSendMessageLength: 4 * 1024 * 1024, // 4MB
26
+ compression: true,
27
+ ...options,
28
+ };
29
+ }
30
+ /**
31
+ * Initialize gRPC manager with the specified adapter
32
+ */
33
+ async initialize() {
34
+ if (this.isInitialized) {
35
+ this.logger.warn('gRPC manager already initialized', 'Init');
36
+ return;
37
+ }
38
+ try {
39
+ // Detect and load adapter
40
+ const adapterName = this.options.adapter || 'grpc-js';
41
+ if (adapterName === 'grpc-js') {
42
+ await this.loadGrpcJsAdapter();
43
+ }
44
+ else {
45
+ throw new Error(`Unknown gRPC adapter: ${adapterName}`);
46
+ }
47
+ if (!this.adapter) {
48
+ throw new Error('Failed to load gRPC adapter');
49
+ }
50
+ // Initialize adapter
51
+ await this.adapter.initialize(this.options);
52
+ // Enable optional features
53
+ if (this.options.enableHealthCheck) {
54
+ this.adapter.enableHealthCheck();
55
+ this.logger.info('Health check service enabled', 'Init');
56
+ }
57
+ if (this.options.enableReflection) {
58
+ this.adapter.enableReflection();
59
+ this.logger.info('Server reflection enabled', 'Init');
60
+ }
61
+ this.isInitialized = true;
62
+ this.logger.info(`gRPC manager initialized with ${adapterName} adapter`, 'Init');
63
+ }
64
+ catch (error) {
65
+ this.logger.error(`Failed to initialize gRPC manager: ${error}`, 'Init');
66
+ throw error;
67
+ }
68
+ }
69
+ /**
70
+ * Register a gRPC service from a proto file
71
+ */
72
+ async registerService(protoPath, serviceName, implementation, packageName, protoOptions) {
73
+ if (!this.isInitialized || !this.adapter) {
74
+ throw new Error('gRPC manager not initialized. Call initialize() first.');
75
+ }
76
+ try {
77
+ // Load proto file
78
+ const services = await this.adapter.loadProto(protoPath, packageName, protoOptions);
79
+ // Find the specified service
80
+ const serviceDefinition = services.find(s => s.serviceName === serviceName);
81
+ if (!serviceDefinition) {
82
+ throw new Error(`Service ${serviceName} not found in ${protoPath}. Available services: ${services.map(s => s.serviceName).join(', ')}`);
83
+ }
84
+ // Register service
85
+ const registration = this.adapter.addService(serviceName, serviceDefinition, implementation);
86
+ this.services.set(serviceName, registration);
87
+ this.logger.info(`Service ${serviceName} registered with ${registration.methods.length} method(s)`, 'Service');
88
+ return registration;
89
+ }
90
+ catch (error) {
91
+ this.logger.error(`Failed to register service ${serviceName}: ${error}`, 'Service');
92
+ throw error;
93
+ }
94
+ }
95
+ /**
96
+ * Start the gRPC server
97
+ */
98
+ async start() {
99
+ if (!this.isInitialized || !this.adapter) {
100
+ throw new Error('gRPC manager not initialized. Call initialize() first.');
101
+ }
102
+ if (this.isStarted) {
103
+ throw new Error('gRPC server already started');
104
+ }
105
+ try {
106
+ this.server = await this.adapter.start();
107
+ this.isStarted = true;
108
+ const host = this.options.host || '0.0.0.0';
109
+ const port = this.options.port || 50051;
110
+ this.logger.info(`gRPC server started on ${host}:${port}`, 'Start');
111
+ this.logger.info(`Registered services: ${Array.from(this.services.keys()).join(', ')}`, 'Start');
112
+ return this.server;
113
+ }
114
+ catch (error) {
115
+ this.logger.error(`Failed to start gRPC server: ${error}`, 'Start');
116
+ throw error;
117
+ }
118
+ }
119
+ /**
120
+ * Stop the gRPC server gracefully
121
+ */
122
+ async stop() {
123
+ if (!this.isStarted || !this.adapter) {
124
+ return;
125
+ }
126
+ try {
127
+ await this.adapter.stop();
128
+ this.isStarted = false;
129
+ this.logger.info('gRPC server stopped', 'Stop');
130
+ }
131
+ catch (error) {
132
+ this.logger.error(`Error stopping gRPC server: ${error}`, 'Stop');
133
+ throw error;
134
+ }
135
+ }
136
+ /**
137
+ * Force shutdown the gRPC server
138
+ */
139
+ forceShutdown() {
140
+ if (this.server) {
141
+ this.server.forceShutdown();
142
+ this.isStarted = false;
143
+ this.logger.warn('gRPC server force shutdown', 'Stop');
144
+ }
145
+ }
146
+ /**
147
+ * Create a gRPC client for calling remote services
148
+ */
149
+ async createClient(protoPath, serviceName, address, options = {}) {
150
+ if (!this.isInitialized || !this.adapter) {
151
+ throw new Error('gRPC manager not initialized. Call initialize() first.');
152
+ }
153
+ const clientOptions = {
154
+ address,
155
+ maxReceiveMessageLength: this.options.maxReceiveMessageLength,
156
+ maxSendMessageLength: this.options.maxSendMessageLength,
157
+ ...options,
158
+ };
159
+ try {
160
+ const client = await this.adapter.createClient(protoPath, serviceName, clientOptions);
161
+ this.logger.info(`Created gRPC client for ${serviceName} at ${address}`, 'Client');
162
+ return client;
163
+ }
164
+ catch (error) {
165
+ this.logger.error(`Failed to create gRPC client: ${error}`, 'Client');
166
+ throw error;
167
+ }
168
+ }
169
+ /**
170
+ * Get statistics about the gRPC server
171
+ */
172
+ getStats() {
173
+ if (!this.server) {
174
+ return null;
175
+ }
176
+ return this.server.getStats();
177
+ }
178
+ /**
179
+ * Get list of registered services
180
+ */
181
+ getServices() {
182
+ return Array.from(this.services.values());
183
+ }
184
+ /**
185
+ * Check if gRPC is initialized
186
+ */
187
+ isReady() {
188
+ return this.isInitialized && this.isStarted;
189
+ }
190
+ /**
191
+ * Get the gRPC server instance
192
+ */
193
+ getServer() {
194
+ return this.server;
195
+ }
196
+ /**
197
+ * Load @grpc/grpc-js adapter dynamically
198
+ */
199
+ async loadGrpcJsAdapter() {
200
+ if (!isPackageAvailable('@grpc/grpc-js')) {
201
+ throw new Error('@grpc/grpc-js package not found.\n' +
202
+ 'To use gRPC with MoroJS, install the required packages:\n' +
203
+ ' npm install @grpc/grpc-js @grpc/proto-loader\n\n' +
204
+ 'Then configure gRPC in your app:\n' +
205
+ " app.grpc({ port: 50051, adapter: 'grpc-js' });");
206
+ }
207
+ if (!isPackageAvailable('@grpc/proto-loader')) {
208
+ throw new Error('@grpc/proto-loader package not found.\n' +
209
+ 'To use gRPC with MoroJS, install the required packages:\n' +
210
+ ' npm install @grpc/grpc-js @grpc/proto-loader');
211
+ }
212
+ // Dynamic import of adapter
213
+ const { GrpcJsAdapter } = await import('./adapters/grpc-js-adapter.js');
214
+ this.adapter = new GrpcJsAdapter();
215
+ this.logger.info('@grpc/grpc-js adapter loaded', 'Adapter');
216
+ }
217
+ }
218
+ //# sourceMappingURL=grpc-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc-manager.js","sourceRoot":"","sources":["../../../src/core/grpc/grpc-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { GrpcManager } from './grpc-manager.js';
2
+ export type { GrpcAdapter } from './grpc-adapter.js';
3
+ export type { GrpcOptions, GrpcCall, GrpcCallback, GrpcMetadata, GrpcError, GrpcStatusCode, GrpcCredentials, GrpcServer, GrpcClient, GrpcClientOptions, GrpcInterceptor, ServiceImplementation, ServiceDefinition, ServiceRegistration, MethodDefinition, UnaryHandler, ServerStreamingHandler, ClientStreamingHandler, BidirectionalStreamingHandler, GrpcHandler, GrpcStats, HealthCheckStatus, HealthCheckResponse, ProtoLoadOptions, } from './types.js';
4
+ export { GrpcJsAdapter } from './adapters/index.js';
5
+ export { grpcAuth, grpcRequirePermission, grpcRequireRole, extractTokenFromMetadata, } from './middleware/auth.js';
6
+ export { grpcLogger, grpcSimpleLogger, grpcDetailedLogger } from './middleware/logging.js';
7
+ export { grpcValidate, grpcValidateHandler } from './middleware/validation.js';
@@ -0,0 +1,10 @@
1
+ // gRPC Module - Public API
2
+ // Central export point for gRPC functionality in MoroJS
3
+ export { GrpcManager } from './grpc-manager.js';
4
+ // Export adapters
5
+ export { GrpcJsAdapter } from './adapters/index.js';
6
+ // Export middleware
7
+ export { grpcAuth, grpcRequirePermission, grpcRequireRole, extractTokenFromMetadata, } from './middleware/auth.js';
8
+ export { grpcLogger, grpcSimpleLogger, grpcDetailedLogger } from './middleware/logging.js';
9
+ export { grpcValidate, grpcValidateHandler } from './middleware/validation.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/grpc/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,wDAAwD;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA+BhD,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oBAAoB;AACpB,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,eAAe,EACf,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { GrpcCall, GrpcCallback, GrpcMetadata } from '../types.js';
2
+ /**
3
+ * Extract JWT token from gRPC metadata
4
+ */
5
+ export declare function extractTokenFromMetadata(metadata: GrpcMetadata): string | null;
6
+ /**
7
+ * gRPC authentication middleware
8
+ * Verifies JWT tokens from gRPC metadata
9
+ */
10
+ export declare function grpcAuth(options: {
11
+ secret?: string;
12
+ verify?: (token: string) => Promise<any>;
13
+ required?: boolean;
14
+ }): (call: GrpcCall, callback?: GrpcCallback) => Promise<void>;
15
+ /**
16
+ * gRPC permission check middleware
17
+ */
18
+ export declare function grpcRequirePermission(permission: string | string[]): (call: GrpcCall, callback?: GrpcCallback) => Promise<void>;
19
+ /**
20
+ * gRPC role check middleware
21
+ */
22
+ export declare function grpcRequireRole(role: string | string[]): (call: GrpcCall, callback?: GrpcCallback) => Promise<void>;
@@ -0,0 +1,126 @@
1
+ // gRPC Middleware - Auth Integration
2
+ // Integrate Moro's authentication system with gRPC
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
+ const logger = createFrameworkLogger('GRPC_AUTH');
5
+ /**
6
+ * Extract JWT token from gRPC metadata
7
+ */
8
+ export function extractTokenFromMetadata(metadata) {
9
+ if (!metadata)
10
+ return null;
11
+ // Try to get authorization header
12
+ const authHeader = metadata.get('authorization');
13
+ if (!authHeader)
14
+ return null;
15
+ const authValue = Array.isArray(authHeader) ? authHeader[0] : authHeader;
16
+ if (typeof authValue === 'string') {
17
+ // Extract Bearer token
18
+ const match = authValue.match(/^Bearer\s+(\S+)$/i);
19
+ return match ? match[1] : null;
20
+ }
21
+ return null;
22
+ }
23
+ /**
24
+ * gRPC authentication middleware
25
+ * Verifies JWT tokens from gRPC metadata
26
+ */
27
+ export function grpcAuth(options) {
28
+ return async (call, callback) => {
29
+ try {
30
+ const token = extractTokenFromMetadata(call.metadata);
31
+ if (!token) {
32
+ if (options.required !== false) {
33
+ const error = new Error('Unauthenticated: No token provided');
34
+ error.code = 16; // UNAUTHENTICATED
35
+ throw error;
36
+ }
37
+ return;
38
+ }
39
+ // Verify token
40
+ let user;
41
+ if (options.verify) {
42
+ user = await options.verify(token);
43
+ }
44
+ else if (options.secret) {
45
+ // Simple JWT verification (requires jsonwebtoken package)
46
+ // This is a placeholder - full implementation would use jwt library
47
+ logger.warn('Token verification not fully implemented', 'Auth');
48
+ user = { token };
49
+ }
50
+ // Attach user to call context
51
+ if (!call.request) {
52
+ call.request = {};
53
+ }
54
+ call.user = user;
55
+ }
56
+ catch (error) {
57
+ logger.error(`Authentication error: ${error}`, 'Auth');
58
+ const grpcError = new Error(error instanceof Error ? error.message : 'Authentication failed');
59
+ grpcError.code = 16; // UNAUTHENTICATED
60
+ if (callback) {
61
+ callback(grpcError);
62
+ return;
63
+ }
64
+ throw grpcError;
65
+ }
66
+ };
67
+ }
68
+ /**
69
+ * gRPC permission check middleware
70
+ */
71
+ export function grpcRequirePermission(permission) {
72
+ return async (call, callback) => {
73
+ const user = call.user;
74
+ if (!user) {
75
+ const error = new Error('Unauthenticated: User not found in call context');
76
+ error.code = 16; // UNAUTHENTICATED
77
+ if (callback) {
78
+ callback(error);
79
+ return;
80
+ }
81
+ throw error;
82
+ }
83
+ const requiredPermissions = Array.isArray(permission) ? permission : [permission];
84
+ const userPermissions = user.permissions || [];
85
+ const hasPermission = requiredPermissions.some((perm) => userPermissions.includes(perm));
86
+ if (!hasPermission) {
87
+ const error = new Error(`Permission denied: Required ${requiredPermissions.join(' or ')}`);
88
+ error.code = 7; // PERMISSION_DENIED
89
+ if (callback) {
90
+ callback(error);
91
+ return;
92
+ }
93
+ throw error;
94
+ }
95
+ };
96
+ }
97
+ /**
98
+ * gRPC role check middleware
99
+ */
100
+ export function grpcRequireRole(role) {
101
+ return async (call, callback) => {
102
+ const user = call.user;
103
+ if (!user) {
104
+ const error = new Error('Unauthenticated: User not found in call context');
105
+ error.code = 16; // UNAUTHENTICATED
106
+ if (callback) {
107
+ callback(error);
108
+ return;
109
+ }
110
+ throw error;
111
+ }
112
+ const requiredRoles = Array.isArray(role) ? role : [role];
113
+ const userRoles = user.roles || [user.role];
114
+ const hasRole = requiredRoles.some((r) => userRoles.includes(r));
115
+ if (!hasRole) {
116
+ const error = new Error(`Permission denied: Required role ${requiredRoles.join(' or ')}`);
117
+ error.code = 7; // PERMISSION_DENIED
118
+ if (callback) {
119
+ callback(error);
120
+ return;
121
+ }
122
+ throw error;
123
+ }
124
+ };
125
+ }
126
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/core/grpc/middleware/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { GrpcCall, GrpcCallback } from '../types.js';
2
+ /**
3
+ * gRPC request logging middleware
4
+ * Logs all gRPC calls with timing and status
5
+ */
6
+ export declare function grpcLogger(options?: {
7
+ logger?: any;
8
+ logMetadata?: boolean;
9
+ logRequest?: boolean;
10
+ logResponse?: boolean;
11
+ }): (call: GrpcCall, callback?: GrpcCallback, next?: CallableFunction) => Promise<void>;
12
+ /**
13
+ * Simple request logger that just logs method and timing
14
+ */
15
+ export declare function grpcSimpleLogger(): (call: GrpcCall, callback?: GrpcCallback, next?: CallableFunction) => Promise<void>;
16
+ /**
17
+ * Detailed request logger that logs everything
18
+ */
19
+ export declare function grpcDetailedLogger(): (call: GrpcCall, callback?: GrpcCallback, next?: CallableFunction) => Promise<void>;
@@ -0,0 +1,57 @@
1
+ // gRPC Middleware - Logging Integration
2
+ // Integrate Moro's logging system with gRPC
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
+ /**
5
+ * gRPC request logging middleware
6
+ * Logs all gRPC calls with timing and status
7
+ */
8
+ export function grpcLogger(options = {}) {
9
+ const logger = options.logger || createFrameworkLogger('GRPC_REQUEST');
10
+ return async (call, callback, next) => {
11
+ const startTime = Date.now();
12
+ const peer = call.getPeer?.() || 'unknown';
13
+ const methodPath = call.methodPath || 'unknown';
14
+ // Log request
15
+ logger.info(`→ gRPC call: ${methodPath} from ${peer}`, 'Request');
16
+ if (options.logMetadata && call.metadata) {
17
+ logger.debug(`Metadata: ${JSON.stringify(call.metadata.getMap())}`, 'Request');
18
+ }
19
+ if (options.logRequest && call.request) {
20
+ logger.debug(`Request: ${JSON.stringify(call.request)}`, 'Request');
21
+ }
22
+ try {
23
+ // Execute handler
24
+ if (next) {
25
+ await next(call, callback);
26
+ }
27
+ const duration = Date.now() - startTime;
28
+ logger.info(`✓ gRPC call completed: ${methodPath} in ${duration}ms`, 'Response');
29
+ }
30
+ catch (error) {
31
+ const duration = Date.now() - startTime;
32
+ logger.error(`✗ gRPC call failed: ${methodPath} in ${duration}ms - ${error}`, 'Response');
33
+ throw error;
34
+ }
35
+ };
36
+ }
37
+ /**
38
+ * Simple request logger that just logs method and timing
39
+ */
40
+ export function grpcSimpleLogger() {
41
+ return grpcLogger({
42
+ logMetadata: false,
43
+ logRequest: false,
44
+ logResponse: false,
45
+ });
46
+ }
47
+ /**
48
+ * Detailed request logger that logs everything
49
+ */
50
+ export function grpcDetailedLogger() {
51
+ return grpcLogger({
52
+ logMetadata: true,
53
+ logRequest: true,
54
+ logResponse: true,
55
+ });
56
+ }
57
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../src/core/grpc/middleware/logging.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,4CAA4C;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,UAKI,EAAE;IAEN,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAEvE,OAAO,KAAK,EAAE,IAAc,EAAE,QAAuB,EAAE,IAAuB,EAAE,EAAE;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS,CAAC;QAC3C,MAAM,UAAU,GAAI,IAAY,CAAC,UAAU,IAAI,SAAS,CAAC;QAEzD,cAAc;QACd,MAAM,CAAC,IAAI,CAAC,gBAAgB,UAAU,SAAS,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;QAElE,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC;YACH,kBAAkB;YAClB,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,0BAA0B,UAAU,OAAO,QAAQ,IAAI,EAAE,UAAU,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,uBAAuB,UAAU,OAAO,QAAQ,QAAQ,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;YAC1F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,UAAU,CAAC;QAChB,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC;QAChB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { GrpcCall, GrpcCallback } from '../types.js';
2
+ /**
3
+ * gRPC request validation middleware
4
+ * Validates incoming gRPC requests using Zod, Joi, Yup, or any validation library
5
+ */
6
+ export declare function grpcValidate(options: {
7
+ request?: any;
8
+ response?: any;
9
+ stripUnknown?: boolean;
10
+ }): (call: GrpcCall, callback?: GrpcCallback) => Promise<void>;
11
+ /**
12
+ * Wrap a handler to validate both request and response
13
+ */
14
+ export declare function grpcValidateHandler<TRequest = any, TResponse = any>(handler: (call: GrpcCall<TRequest>, callback: GrpcCallback<TResponse>) => void | Promise<void>, options: {
15
+ request?: any;
16
+ response?: any;
17
+ stripUnknown?: boolean;
18
+ }): (call: GrpcCall<TRequest>, callback: GrpcCallback<TResponse>) => Promise<void>;
@@ -0,0 +1,126 @@
1
+ // gRPC Middleware - Validation Integration
2
+ // Integrate Moro's validation system with gRPC
3
+ import { normalizeValidationError } from '../../validation/schema-interface.js';
4
+ import { createFrameworkLogger } from '../../logger/index.js';
5
+ const logger = createFrameworkLogger('GRPC_VALIDATION');
6
+ /**
7
+ * gRPC request validation middleware
8
+ * Validates incoming gRPC requests using Zod, Joi, Yup, or any validation library
9
+ */
10
+ export function grpcValidate(options) {
11
+ return async (call, callback) => {
12
+ try {
13
+ // Validate request
14
+ if (options.request && call.request) {
15
+ try {
16
+ // Try to validate with the schema
17
+ if (typeof options.request.parse === 'function') {
18
+ // Zod-like schema
19
+ call.request = options.request.parse(call.request);
20
+ }
21
+ else if (typeof options.request.validate === 'function') {
22
+ // Joi-like schema
23
+ const result = options.request.validate(call.request, {
24
+ stripUnknown: options.stripUnknown,
25
+ });
26
+ if (result.error) {
27
+ throw result.error;
28
+ }
29
+ call.request = result.value;
30
+ }
31
+ else if (typeof options.request.validateSync === 'function') {
32
+ // Yup-like schema
33
+ call.request = options.request.validateSync(call.request, {
34
+ stripUnknown: options.stripUnknown,
35
+ });
36
+ }
37
+ }
38
+ catch (error) {
39
+ const normalizedError = normalizeValidationError(error);
40
+ logger.error(`Request validation failed: ${normalizedError.message}`, 'Validation');
41
+ const grpcError = new Error(`Invalid request: ${normalizedError.message}`);
42
+ grpcError.code = 3; // INVALID_ARGUMENT
43
+ grpcError.details = normalizedError.errors || normalizedError.message;
44
+ if (callback) {
45
+ callback(grpcError);
46
+ return;
47
+ }
48
+ throw grpcError;
49
+ }
50
+ }
51
+ // Note: Response validation would happen in a wrapper around the handler
52
+ // since we need to intercept the response before it's sent
53
+ }
54
+ catch (error) {
55
+ logger.error(`Validation error: ${error}`, 'Validation');
56
+ if (callback) {
57
+ callback(error);
58
+ return;
59
+ }
60
+ throw error;
61
+ }
62
+ };
63
+ }
64
+ /**
65
+ * Wrap a handler to validate both request and response
66
+ */
67
+ export function grpcValidateHandler(handler, options) {
68
+ return async (call, callback) => {
69
+ // Validate request
70
+ if (options.request) {
71
+ const validator = grpcValidate({
72
+ request: options.request,
73
+ stripUnknown: options.stripUnknown,
74
+ });
75
+ await validator(call, callback);
76
+ }
77
+ // Wrap callback to validate response
78
+ const wrappedCallback = (error, response) => {
79
+ if (error || !response) {
80
+ callback(error, response);
81
+ return;
82
+ }
83
+ // Validate response
84
+ if (options.response) {
85
+ try {
86
+ let validatedResponse = response;
87
+ if (typeof options.response.parse === 'function') {
88
+ // Zod-like schema
89
+ validatedResponse = options.response.parse(response);
90
+ }
91
+ else if (typeof options.response.validate === 'function') {
92
+ // Joi-like schema
93
+ const result = options.response.validate(response, {
94
+ stripUnknown: options.stripUnknown,
95
+ });
96
+ if (result.error) {
97
+ throw result.error;
98
+ }
99
+ validatedResponse = result.value;
100
+ }
101
+ else if (typeof options.response.validateSync === 'function') {
102
+ // Yup-like schema
103
+ validatedResponse = options.response.validateSync(response, {
104
+ stripUnknown: options.stripUnknown,
105
+ });
106
+ }
107
+ callback(null, validatedResponse);
108
+ }
109
+ catch (validationError) {
110
+ const normalizedError = normalizeValidationError(validationError);
111
+ logger.error(`Response validation failed: ${normalizedError.message}`, 'Validation');
112
+ const grpcError = new Error(`Invalid response: ${normalizedError.message}`);
113
+ grpcError.code = 13; // INTERNAL
114
+ grpcError.details = normalizedError.errors || normalizedError.message;
115
+ callback(grpcError);
116
+ }
117
+ }
118
+ else {
119
+ callback(null, response);
120
+ }
121
+ };
122
+ // Execute handler
123
+ await handler(call, wrappedCallback);
124
+ };
125
+ }
126
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/core/grpc/middleware/validation.ts"],"names":[],"mappings":"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"}