atomic-queues 2.2.0 → 3.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.
Files changed (236) hide show
  1. package/README.md +296 -417
  2. package/dist/cli/generators/classes.d.ts +1 -1
  3. package/dist/cli/generators/json-schema.d.ts +1 -1
  4. package/dist/cli/generators/typescript.d.ts +1 -1
  5. package/dist/cli/index.js +147 -5
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cluster/cluster-discovery.service.d.ts +91 -0
  8. package/dist/cluster/cluster-discovery.service.d.ts.map +1 -0
  9. package/dist/cluster/cluster-discovery.service.js +423 -0
  10. package/dist/cluster/cluster-discovery.service.js.map +1 -0
  11. package/dist/cluster/grpc-peer-monitor.service.d.ts +31 -0
  12. package/dist/cluster/grpc-peer-monitor.service.d.ts.map +1 -0
  13. package/dist/cluster/grpc-peer-monitor.service.js +192 -0
  14. package/dist/cluster/grpc-peer-monitor.service.js.map +1 -0
  15. package/dist/cluster/index.d.ts +7 -0
  16. package/dist/cluster/index.d.ts.map +1 -0
  17. package/dist/cluster/index.js +23 -0
  18. package/dist/cluster/index.js.map +1 -0
  19. package/dist/cluster/leader-election.service.d.ts +38 -0
  20. package/dist/cluster/leader-election.service.d.ts.map +1 -0
  21. package/dist/cluster/leader-election.service.js +184 -0
  22. package/dist/cluster/leader-election.service.js.map +1 -0
  23. package/dist/cluster/master-coordinator.d.ts +50 -0
  24. package/dist/cluster/master-coordinator.d.ts.map +1 -0
  25. package/dist/cluster/master-coordinator.js +307 -0
  26. package/dist/cluster/master-coordinator.js.map +1 -0
  27. package/dist/cluster/redis-health-monitor.service.d.ts +23 -0
  28. package/dist/cluster/redis-health-monitor.service.d.ts.map +1 -0
  29. package/dist/cluster/redis-health-monitor.service.js +100 -0
  30. package/dist/cluster/redis-health-monitor.service.js.map +1 -0
  31. package/dist/cluster/server-ring.service.d.ts +48 -0
  32. package/dist/cluster/server-ring.service.d.ts.map +1 -0
  33. package/dist/cluster/server-ring.service.js +136 -0
  34. package/dist/cluster/server-ring.service.js.map +1 -0
  35. package/dist/decorators/constants.d.ts +0 -3
  36. package/dist/decorators/constants.d.ts.map +1 -1
  37. package/dist/decorators/constants.js +1 -5
  38. package/dist/decorators/constants.js.map +1 -1
  39. package/dist/decorators/entity.decorators.d.ts +16 -24
  40. package/dist/decorators/entity.decorators.d.ts.map +1 -1
  41. package/dist/decorators/entity.decorators.js +0 -39
  42. package/dist/decorators/entity.decorators.js.map +1 -1
  43. package/dist/decorators/index.d.ts +0 -1
  44. package/dist/decorators/index.d.ts.map +1 -1
  45. package/dist/decorators/index.js +0 -1
  46. package/dist/decorators/index.js.map +1 -1
  47. package/dist/decorators/interfaces.d.ts +10 -28
  48. package/dist/decorators/interfaces.d.ts.map +1 -1
  49. package/dist/decorators/job.decorators.d.ts +4 -52
  50. package/dist/decorators/job.decorators.d.ts.map +1 -1
  51. package/dist/decorators/job.decorators.js +6 -54
  52. package/dist/decorators/job.decorators.js.map +1 -1
  53. package/dist/decorators/metadata-readers.d.ts +5 -5
  54. package/dist/decorators/metadata-readers.d.ts.map +1 -1
  55. package/dist/decorators/metadata-readers.js +2 -8
  56. package/dist/decorators/metadata-readers.js.map +1 -1
  57. package/dist/decorators/schema.decorators.d.ts +1 -1
  58. package/dist/decorators/schema.decorators.d.ts.map +1 -1
  59. package/dist/decorators/schema.decorators.js.map +1 -1
  60. package/dist/decorators/utils.d.ts +1 -1
  61. package/dist/decorators/utils.d.ts.map +1 -1
  62. package/dist/decorators/utils.js +5 -1
  63. package/dist/decorators/utils.js.map +1 -1
  64. package/dist/domain/interfaces/config.interfaces.d.ts +92 -35
  65. package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -1
  66. package/dist/domain/interfaces/index.d.ts +1 -0
  67. package/dist/domain/interfaces/index.d.ts.map +1 -1
  68. package/dist/domain/interfaces/index.js +1 -0
  69. package/dist/domain/interfaces/index.js.map +1 -1
  70. package/dist/{services/registry → domain/interfaces}/registry.types.d.ts.map +1 -1
  71. package/dist/domain/interfaces/registry.types.js.map +1 -0
  72. package/dist/grpc/grpc-client-pool.service.d.ts +71 -0
  73. package/dist/grpc/grpc-client-pool.service.d.ts.map +1 -0
  74. package/dist/grpc/grpc-client-pool.service.js +307 -0
  75. package/dist/grpc/grpc-client-pool.service.js.map +1 -0
  76. package/dist/grpc/grpc-server.service.d.ts +47 -0
  77. package/dist/grpc/grpc-server.service.d.ts.map +1 -0
  78. package/dist/grpc/grpc-server.service.js +494 -0
  79. package/dist/grpc/grpc-server.service.js.map +1 -0
  80. package/dist/grpc/index.d.ts +3 -0
  81. package/dist/grpc/index.d.ts.map +1 -0
  82. package/dist/{services/gate → grpc}/index.js +2 -1
  83. package/dist/grpc/index.js.map +1 -0
  84. package/dist/index.d.ts +4 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +4 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/module/atomic-queues.module.d.ts +1 -0
  89. package/dist/module/atomic-queues.module.d.ts.map +1 -1
  90. package/dist/module/atomic-queues.module.js +60 -11
  91. package/dist/module/atomic-queues.module.js.map +1 -1
  92. package/dist/services/command-discovery/command-discovery.service.js +2 -2
  93. package/dist/services/command-discovery/command-discovery.service.js.map +1 -1
  94. package/dist/services/entity-type-registry/entity-type-registry.service.d.ts +13 -0
  95. package/dist/services/entity-type-registry/entity-type-registry.service.d.ts.map +1 -0
  96. package/dist/services/entity-type-registry/entity-type-registry.service.js +75 -0
  97. package/dist/services/entity-type-registry/entity-type-registry.service.js.map +1 -0
  98. package/dist/services/entity-type-registry/index.d.ts +2 -0
  99. package/dist/services/entity-type-registry/index.d.ts.map +1 -0
  100. package/dist/services/{actor-system → entity-type-registry}/index.js +1 -1
  101. package/dist/services/entity-type-registry/index.js.map +1 -0
  102. package/dist/services/handler-executor/handler-executor.service.d.ts +0 -2
  103. package/dist/services/handler-executor/handler-executor.service.d.ts.map +1 -1
  104. package/dist/services/handler-executor/handler-executor.service.js +0 -19
  105. package/dist/services/handler-executor/handler-executor.service.js.map +1 -1
  106. package/dist/services/index.d.ts +3 -9
  107. package/dist/services/index.d.ts.map +1 -1
  108. package/dist/services/index.js +3 -9
  109. package/dist/services/index.js.map +1 -1
  110. package/dist/services/message-router/index.d.ts +2 -0
  111. package/dist/services/message-router/index.d.ts.map +1 -0
  112. package/dist/services/{actor-registry → message-router}/index.js +1 -1
  113. package/dist/services/message-router/index.js.map +1 -0
  114. package/dist/services/message-router/message-router.service.d.ts +53 -0
  115. package/dist/services/message-router/message-router.service.d.ts.map +1 -0
  116. package/dist/services/message-router/message-router.service.js +519 -0
  117. package/dist/services/message-router/message-router.service.js.map +1 -0
  118. package/dist/services/queue-bus/cluster-contracts.d.ts +1 -1
  119. package/dist/services/queue-bus/cluster-contracts.d.ts.map +1 -1
  120. package/dist/services/queue-bus/cluster-contracts.js.map +1 -1
  121. package/dist/services/queue-bus/queue-bus.service.d.ts +3 -21
  122. package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
  123. package/dist/services/queue-bus/queue-bus.service.js +15 -119
  124. package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
  125. package/dist/utils/id.utils.d.ts +3 -0
  126. package/dist/utils/id.utils.d.ts.map +1 -0
  127. package/dist/utils/id.utils.js +14 -0
  128. package/dist/utils/id.utils.js.map +1 -0
  129. package/dist/utils/index.d.ts +1 -0
  130. package/dist/utils/index.d.ts.map +1 -1
  131. package/dist/utils/index.js +1 -0
  132. package/dist/utils/index.js.map +1 -1
  133. package/dist/wal/index.d.ts +4 -0
  134. package/dist/wal/index.d.ts.map +1 -0
  135. package/dist/{services/executor-pool → wal}/index.js +3 -1
  136. package/dist/wal/index.js.map +1 -0
  137. package/dist/wal/wal.scripts.d.ts +51 -0
  138. package/dist/wal/wal.scripts.d.ts.map +1 -0
  139. package/dist/wal/wal.scripts.js +84 -0
  140. package/dist/wal/wal.scripts.js.map +1 -0
  141. package/dist/wal/wal.service.d.ts +46 -0
  142. package/dist/wal/wal.service.d.ts.map +1 -0
  143. package/dist/wal/wal.service.js +243 -0
  144. package/dist/wal/wal.service.js.map +1 -0
  145. package/dist/wal/wal.types.d.ts +23 -0
  146. package/dist/wal/wal.types.d.ts.map +1 -0
  147. package/dist/wal/wal.types.js +3 -0
  148. package/dist/wal/wal.types.js.map +1 -0
  149. package/dist/workers/consistent-hash.d.ts +97 -0
  150. package/dist/workers/consistent-hash.d.ts.map +1 -0
  151. package/dist/workers/consistent-hash.js +231 -0
  152. package/dist/workers/consistent-hash.js.map +1 -0
  153. package/dist/workers/entity-worker-manager.d.ts +35 -0
  154. package/dist/workers/entity-worker-manager.d.ts.map +1 -0
  155. package/dist/workers/entity-worker-manager.js +237 -0
  156. package/dist/workers/entity-worker-manager.js.map +1 -0
  157. package/dist/workers/entity-worker.d.ts +54 -0
  158. package/dist/workers/entity-worker.d.ts.map +1 -0
  159. package/dist/workers/entity-worker.js +142 -0
  160. package/dist/workers/entity-worker.js.map +1 -0
  161. package/dist/workers/index.d.ts +4 -0
  162. package/dist/workers/index.d.ts.map +1 -0
  163. package/dist/workers/index.js +20 -0
  164. package/dist/workers/index.js.map +1 -0
  165. package/package.json +17 -4
  166. package/dist/decorators/actor.decorators.d.ts +0 -4
  167. package/dist/decorators/actor.decorators.d.ts.map +0 -1
  168. package/dist/decorators/actor.decorators.js +0 -32
  169. package/dist/decorators/actor.decorators.js.map +0 -1
  170. package/dist/services/actor-registry/actor-registry.service.d.ts +0 -32
  171. package/dist/services/actor-registry/actor-registry.service.d.ts.map +0 -1
  172. package/dist/services/actor-registry/actor-registry.service.js +0 -220
  173. package/dist/services/actor-registry/actor-registry.service.js.map +0 -1
  174. package/dist/services/actor-registry/index.d.ts +0 -2
  175. package/dist/services/actor-registry/index.d.ts.map +0 -1
  176. package/dist/services/actor-registry/index.js.map +0 -1
  177. package/dist/services/actor-system/actor-system.service.d.ts +0 -19
  178. package/dist/services/actor-system/actor-system.service.d.ts.map +0 -1
  179. package/dist/services/actor-system/actor-system.service.js +0 -86
  180. package/dist/services/actor-system/actor-system.service.js.map +0 -1
  181. package/dist/services/actor-system/index.d.ts +0 -2
  182. package/dist/services/actor-system/index.d.ts.map +0 -1
  183. package/dist/services/actor-system/index.js.map +0 -1
  184. package/dist/services/executor-pool/executor-pool.service.d.ts +0 -38
  185. package/dist/services/executor-pool/executor-pool.service.d.ts.map +0 -1
  186. package/dist/services/executor-pool/executor-pool.service.js +0 -180
  187. package/dist/services/executor-pool/executor-pool.service.js.map +0 -1
  188. package/dist/services/executor-pool/index.d.ts +0 -2
  189. package/dist/services/executor-pool/index.d.ts.map +0 -1
  190. package/dist/services/executor-pool/index.js.map +0 -1
  191. package/dist/services/gate/gate.service.d.ts +0 -17
  192. package/dist/services/gate/gate.service.d.ts.map +0 -1
  193. package/dist/services/gate/gate.service.js +0 -81
  194. package/dist/services/gate/gate.service.js.map +0 -1
  195. package/dist/services/gate/index.d.ts +0 -2
  196. package/dist/services/gate/index.d.ts.map +0 -1
  197. package/dist/services/gate/index.js.map +0 -1
  198. package/dist/services/log/index.d.ts +0 -2
  199. package/dist/services/log/index.d.ts.map +0 -1
  200. package/dist/services/log/index.js +0 -18
  201. package/dist/services/log/index.js.map +0 -1
  202. package/dist/services/log/log.service.d.ts +0 -21
  203. package/dist/services/log/log.service.d.ts.map +0 -1
  204. package/dist/services/log/log.service.js +0 -92
  205. package/dist/services/log/log.service.js.map +0 -1
  206. package/dist/services/registry/index.d.ts +0 -4
  207. package/dist/services/registry/index.d.ts.map +0 -1
  208. package/dist/services/registry/index.js +0 -20
  209. package/dist/services/registry/index.js.map +0 -1
  210. package/dist/services/registry/registry.service.d.ts +0 -43
  211. package/dist/services/registry/registry.service.d.ts.map +0 -1
  212. package/dist/services/registry/registry.service.js +0 -402
  213. package/dist/services/registry/registry.service.js.map +0 -1
  214. package/dist/services/registry/registry.types.js.map +0 -1
  215. package/dist/services/registry/schema-converter.d.ts +0 -2
  216. package/dist/services/registry/schema-converter.d.ts.map +0 -1
  217. package/dist/services/registry/schema-converter.js +0 -27
  218. package/dist/services/registry/schema-converter.js.map +0 -1
  219. package/dist/services/result-collector/index.d.ts +0 -2
  220. package/dist/services/result-collector/index.d.ts.map +0 -1
  221. package/dist/services/result-collector/index.js +0 -18
  222. package/dist/services/result-collector/index.js.map +0 -1
  223. package/dist/services/result-collector/result-collector.service.d.ts +0 -17
  224. package/dist/services/result-collector/result-collector.service.d.ts.map +0 -1
  225. package/dist/services/result-collector/result-collector.service.js +0 -92
  226. package/dist/services/result-collector/result-collector.service.js.map +0 -1
  227. package/dist/services/scheduler/index.d.ts +0 -2
  228. package/dist/services/scheduler/index.d.ts.map +0 -1
  229. package/dist/services/scheduler/index.js +0 -18
  230. package/dist/services/scheduler/index.js.map +0 -1
  231. package/dist/services/scheduler/scheduler.service.d.ts +0 -17
  232. package/dist/services/scheduler/scheduler.service.d.ts.map +0 -1
  233. package/dist/services/scheduler/scheduler.service.js +0 -140
  234. package/dist/services/scheduler/scheduler.service.js.map +0 -1
  235. /package/dist/{services/registry → domain/interfaces}/registry.types.d.ts +0 -0
  236. /package/dist/{services/registry → domain/interfaces}/registry.types.js +0 -0
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
45
+ return function (target, key) { decorator(target, key, paramIndex); }
46
+ };
47
+ var GrpcClientPool_1;
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.GrpcClientPool = void 0;
50
+ const common_1 = require("@nestjs/common");
51
+ const path = __importStar(require("path"));
52
+ const uuid_1 = require("uuid");
53
+ const constants_1 = require("../services/constants");
54
+ /**
55
+ * gRPC Client Pool — maintains connections to peer servers.
56
+ *
57
+ * Provides `forward()` and `forwardAndWait()` methods that the
58
+ * MessageRouter calls when an entity is owned by a remote server.
59
+ */
60
+ let GrpcClientPool = GrpcClientPool_1 = class GrpcClientPool {
61
+ constructor(config) {
62
+ this.config = config;
63
+ this.logger = new common_1.Logger(GrpcClientPool_1.name);
64
+ this.clients = new Map();
65
+ this.circuitBreakers = new Map();
66
+ this.grpcModule = null;
67
+ this.protoDescriptor = null;
68
+ this.failureThreshold = config.grpc?.circuitBreakerFailureThreshold ?? 3;
69
+ this.cooldownMs = config.grpc?.circuitBreakerCooldownMs ?? 2000;
70
+ }
71
+ async onModuleInit() {
72
+ if (this.config.grpc?.enabled) {
73
+ await this.ensureLoaded();
74
+ }
75
+ }
76
+ async onApplicationShutdown() {
77
+ for (const [, { client }] of this.clients) {
78
+ try {
79
+ client.close();
80
+ }
81
+ catch {
82
+ // ignore
83
+ }
84
+ }
85
+ this.clients.clear();
86
+ this.circuitBreakers.clear();
87
+ }
88
+ /**
89
+ * Ensure the gRPC module is loaded (lazy, for optional dependency).
90
+ */
91
+ async ensureLoaded() {
92
+ if (this.grpcModule)
93
+ return;
94
+ /* eslint-disable @typescript-eslint/no-var-requires */
95
+ const grpc = require('@grpc/grpc-js');
96
+ const protoLoader = require('@grpc/proto-loader');
97
+ /* eslint-enable @typescript-eslint/no-var-requires */
98
+ const protoPath = path.join(__dirname, 'atomicqueues.proto');
99
+ const packageDef = protoLoader.loadSync(protoPath, {
100
+ keepCase: false,
101
+ longs: String,
102
+ enums: String,
103
+ defaults: true,
104
+ oneofs: true,
105
+ });
106
+ this.grpcModule = grpc;
107
+ this.protoDescriptor = grpc.loadPackageDefinition(packageDef);
108
+ }
109
+ /**
110
+ * Get or create a client connection to a peer server.
111
+ */
112
+ checkCircuit(serverId) {
113
+ const cb = this.circuitBreakers.get(serverId);
114
+ if (!cb || cb.state === 'closed')
115
+ return;
116
+ if (cb.state === 'open') {
117
+ if (Date.now() - cb.openedAt >= this.cooldownMs) {
118
+ cb.state = 'half-open';
119
+ return;
120
+ }
121
+ throw new Error('PEER_CIRCUIT_OPEN');
122
+ }
123
+ }
124
+ recordSuccess(serverId) {
125
+ const cb = this.circuitBreakers.get(serverId);
126
+ if (cb) {
127
+ cb.state = 'closed';
128
+ cb.consecutiveFailures = 0;
129
+ }
130
+ }
131
+ recordFailure(serverId) {
132
+ let cb = this.circuitBreakers.get(serverId);
133
+ if (!cb) {
134
+ cb = { state: 'closed', consecutiveFailures: 0, lastFailureAt: 0, openedAt: 0 };
135
+ this.circuitBreakers.set(serverId, cb);
136
+ }
137
+ cb.consecutiveFailures++;
138
+ cb.lastFailureAt = Date.now();
139
+ if (cb.consecutiveFailures >= this.failureThreshold) {
140
+ cb.state = 'open';
141
+ cb.openedAt = Date.now();
142
+ }
143
+ }
144
+ openCircuit(serverId) {
145
+ let cb = this.circuitBreakers.get(serverId);
146
+ if (!cb) {
147
+ cb = { state: 'closed', consecutiveFailures: 0, lastFailureAt: 0, openedAt: 0 };
148
+ this.circuitBreakers.set(serverId, cb);
149
+ }
150
+ cb.state = 'open';
151
+ cb.openedAt = Date.now();
152
+ }
153
+ closeCircuit(serverId) {
154
+ const cb = this.circuitBreakers.get(serverId);
155
+ if (cb) {
156
+ cb.state = 'closed';
157
+ cb.consecutiveFailures = 0;
158
+ }
159
+ }
160
+ async getClient(serverId, address) {
161
+ this.checkCircuit(serverId);
162
+ const existing = this.clients.get(serverId);
163
+ if (existing && existing.address === address) {
164
+ return existing.client;
165
+ }
166
+ await this.ensureLoaded();
167
+ const ServiceClass = this.protoDescriptor.atomicqueues.v1.AtomicQueuesNode;
168
+ const channelOptions = {
169
+ 'grpc.keepalive_time_ms': this.config.grpc?.keepaliveTimeMs ?? 10000,
170
+ 'grpc.keepalive_timeout_ms': this.config.grpc?.keepaliveTimeoutMs ?? 5000,
171
+ 'grpc.keepalive_permit_without_calls': 1,
172
+ };
173
+ const client = new ServiceClass(address, this.grpcModule.credentials.createInsecure(), channelOptions);
174
+ this.clients.set(serverId, { address, client });
175
+ this.logger.log(`Connected to peer ${serverId} at ${address}`);
176
+ return client;
177
+ }
178
+ /**
179
+ * Forward a message to a remote server (fire-and-forget).
180
+ */
181
+ async forward(serverId, address, message, originServerId, hops, senderEpoch = 0) {
182
+ const client = await this.getClient(serverId, address);
183
+ const envelope = {
184
+ id: message.id,
185
+ name: message.name,
186
+ payload: Buffer.from(JSON.stringify(message.data), 'utf-8'),
187
+ entityType: message.entityType,
188
+ entityId: message.entityId,
189
+ correlationId: message.correlationId ?? '',
190
+ isQuery: message.isQuery ?? false,
191
+ enqueuedAt: message.enqueuedAt,
192
+ attempts: message.attempts,
193
+ maxAttempts: message.maxAttempts,
194
+ originServer: originServerId,
195
+ hops: hops + 1,
196
+ senderEpoch,
197
+ };
198
+ const deadline = new Date(Date.now() + (this.config.grpc?.deadlines?.forwardMs ?? 1500));
199
+ return new Promise((resolve, reject) => {
200
+ client.forward(envelope, { deadline }, (err, response) => {
201
+ if (err) {
202
+ reject(new Error(`gRPC forward to ${serverId} failed: ${err.message}`));
203
+ return;
204
+ }
205
+ if (!response.accepted) {
206
+ reject(new Error(`Forward rejected by ${serverId}: ${response.rejectReason}`));
207
+ return;
208
+ }
209
+ resolve({
210
+ id: message.id,
211
+ entityKey: `${message.entityType}:${message.entityId}`,
212
+ });
213
+ });
214
+ });
215
+ }
216
+ /**
217
+ * Forward a message to a remote server and wait for the result.
218
+ */
219
+ async forwardAndWait(serverId, address, message, originServerId, hops, timeout, senderEpoch = 0) {
220
+ const client = await this.getClient(serverId, address);
221
+ const envelope = {
222
+ id: message.id,
223
+ name: message.name,
224
+ payload: Buffer.from(JSON.stringify(message.data), 'utf-8'),
225
+ entityType: message.entityType,
226
+ entityId: message.entityId,
227
+ correlationId: message.correlationId ?? (0, uuid_1.v4)(),
228
+ isQuery: true,
229
+ enqueuedAt: message.enqueuedAt,
230
+ attempts: message.attempts,
231
+ maxAttempts: message.maxAttempts,
232
+ originServer: originServerId,
233
+ hops: hops + 1,
234
+ senderEpoch,
235
+ };
236
+ return new Promise((resolve, reject) => {
237
+ const timer = setTimeout(() => {
238
+ reject(new Error(`gRPC forwardAndWait to ${serverId} timed out after ${timeout}ms`));
239
+ }, timeout);
240
+ const stream = client.forwardAndWait(envelope);
241
+ stream.on('data', (response) => {
242
+ clearTimeout(timer);
243
+ if (response.error) {
244
+ reject(new Error(response.error));
245
+ }
246
+ else if (response.result) {
247
+ const resultJson = Buffer.from(response.result).toString('utf-8');
248
+ resolve(JSON.parse(resultJson));
249
+ }
250
+ else {
251
+ reject(new Error('Empty result from remote server'));
252
+ }
253
+ });
254
+ stream.on('error', (err) => {
255
+ clearTimeout(timer);
256
+ reject(new Error(`gRPC stream error from ${serverId}: ${err.message}`));
257
+ });
258
+ stream.on('end', () => {
259
+ clearTimeout(timer);
260
+ // If we haven't resolved yet, the stream ended without data
261
+ });
262
+ });
263
+ }
264
+ /**
265
+ * Ping a peer server.
266
+ */
267
+ async ping(serverId, address) {
268
+ const client = await this.getClient(serverId, address);
269
+ const myServerId = this.config.grpc?.serverId ?? 'unknown';
270
+ const deadline = new Date(Date.now() + (this.config.grpc?.deadlines?.pingMs ?? 1000));
271
+ return new Promise((resolve, _reject) => {
272
+ client.ping({ senderId: myServerId }, { deadline }, (err, response) => {
273
+ if (err) {
274
+ resolve({ healthy: false, queueDepth: 0 });
275
+ return;
276
+ }
277
+ resolve({
278
+ healthy: true,
279
+ queueDepth: response.queueDepth ?? 0,
280
+ });
281
+ });
282
+ });
283
+ }
284
+ /**
285
+ * Remove a client connection.
286
+ */
287
+ removeClient(serverId) {
288
+ const existing = this.clients.get(serverId);
289
+ if (existing) {
290
+ try {
291
+ existing.client.close();
292
+ }
293
+ catch {
294
+ // ignore
295
+ }
296
+ this.clients.delete(serverId);
297
+ }
298
+ this.circuitBreakers.delete(serverId);
299
+ }
300
+ };
301
+ exports.GrpcClientPool = GrpcClientPool;
302
+ exports.GrpcClientPool = GrpcClientPool = GrpcClientPool_1 = __decorate([
303
+ (0, common_1.Injectable)(),
304
+ __param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
305
+ __metadata("design:paramtypes", [Object])
306
+ ], GrpcClientPool);
307
+ //# sourceMappingURL=grpc-client-pool.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc-client-pool.service.js","sourceRoot":"","sources":["../../src/grpc/grpc-client-pool.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { OnModuleInit, OnApplicationShutdown } from '@nestjs/common';
2
+ import { IAtomicQueuesModuleConfig } from '../domain';
3
+ import { MessageRouter } from '../services/message-router';
4
+ import { EntityWorkerManager } from '../workers';
5
+ import { MasterCoordinator, LeaderElectionService, ClusterDiscoveryService } from '../cluster';
6
+ /**
7
+ * gRPC Server — handles all cross-replica and cross-service communication.
8
+ *
9
+ * RPCs:
10
+ * - SpawnWorker / TeardownWorker / ListWorkers: Master → Replica
11
+ * - EnqueueToWorker / EnqueueToWorkerAndWait: Master → Replica (dispatch)
12
+ * - Petition / PetitionAndWait: Replica → Master (routing)
13
+ * - ReportIdle: Replica → Master (idle teardown)
14
+ * - Forward / ForwardAndWait: Master → Master (cross-service)
15
+ */
16
+ export declare class GrpcServerService implements OnModuleInit, OnApplicationShutdown {
17
+ private readonly config;
18
+ private readonly router;
19
+ private readonly workerManager;
20
+ private readonly masterCoordinator;
21
+ private readonly leaderElection;
22
+ private readonly clusterDiscovery?;
23
+ private readonly logger;
24
+ private server;
25
+ private activePetitions;
26
+ private readonly maxConcurrentPetitions;
27
+ private nodeAddressCache;
28
+ constructor(config: IAtomicQueuesModuleConfig, router: MessageRouter, workerManager: EntityWorkerManager, masterCoordinator: MasterCoordinator, leaderElection: LeaderElectionService, clusterDiscovery?: ClusterDiscoveryService | undefined);
29
+ onModuleInit(): Promise<void>;
30
+ onApplicationShutdown(): Promise<void>;
31
+ private handleSpawnWorker;
32
+ private handleEnqueueToWorker;
33
+ private handleEnqueueToWorkerAndWait;
34
+ private handleTeardownWorker;
35
+ private handleListWorkers;
36
+ private handlePetition;
37
+ private handlePetitionAndWait;
38
+ private handleReportIdle;
39
+ private handleReportWorkers;
40
+ private handleForward;
41
+ private handleForwardAndWait;
42
+ private handlePing;
43
+ private resolveAndWaitTimeout;
44
+ private getReplicaAddress;
45
+ private deserializeEnvelope;
46
+ }
47
+ //# sourceMappingURL=grpc-server.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc-server.service.d.ts","sourceRoot":"","sources":["../../src/grpc/grpc-server.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,YAAY,EACZ,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAsB,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAkC/F;;;;;;;;;GASG;AACH,qBACa,iBAAkB,YAAW,YAAY,EAAE,qBAAqB;IAQ3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc;IACnB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAbhD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,gBAAgB,CAAgE;gBAGvC,MAAM,EAAE,yBAAyB,EACtB,MAAM,EAAE,aAAa,EAC9D,aAAa,EAAE,mBAAmB,EAElC,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,qBAAqB,EACzB,gBAAgB,CAAC,EAAE,uBAAuB,YAAA;IAKnE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAyE7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5C,OAAO,CAAC,iBAAiB;YAUX,qBAAqB;YA+BrB,4BAA4B;YAiD5B,oBAAoB;IAUlC,OAAO,CAAC,iBAAiB;YAeX,cAAc;YA2Cd,qBAAqB;IAgEnC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,mBAAmB;YAab,aAAa;YA2Bb,oBAAoB;IAqDlC,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,qBAAqB;YAQf,iBAAiB;IAkB/B,OAAO,CAAC,mBAAmB;CAkB5B"}