@roomkit/worker 1.1.3 → 1.3.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 (65) hide show
  1. package/README.md +306 -55
  2. package/dist/src/config/config.module.d.ts +3 -0
  3. package/dist/src/config/config.module.d.ts.map +1 -1
  4. package/dist/src/config/config.module.js +16 -6
  5. package/dist/src/config/config.module.js.map +1 -1
  6. package/dist/src/config/config.service.d.ts +18 -1
  7. package/dist/src/config/config.service.d.ts.map +1 -1
  8. package/dist/src/config/config.service.js +19 -18
  9. package/dist/src/config/config.service.js.map +1 -1
  10. package/dist/src/config/worker.config.d.ts +18 -0
  11. package/dist/src/config/worker.config.d.ts.map +1 -1
  12. package/dist/src/config/worker.config.js +1 -0
  13. package/dist/src/config/worker.config.js.map +1 -1
  14. package/dist/src/index.d.ts +3 -3
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +29 -18
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/lifecycle/graceful-shutdown.service.d.ts +3 -3
  19. package/dist/src/lifecycle/graceful-shutdown.service.d.ts.map +1 -1
  20. package/dist/src/lifecycle/graceful-shutdown.service.js +6 -6
  21. package/dist/src/lifecycle/graceful-shutdown.service.js.map +1 -1
  22. package/dist/src/migration/room-migration.service.d.ts +4 -4
  23. package/dist/src/migration/room-migration.service.d.ts.map +1 -1
  24. package/dist/src/migration/room-migration.service.js +6 -6
  25. package/dist/src/migration/room-migration.service.js.map +1 -1
  26. package/dist/src/room/message-handler.service.js +1 -1
  27. package/dist/src/room/message-handler.service.js.map +1 -1
  28. package/dist/src/room/{game-room.d.ts → room-base.d.ts} +3 -3
  29. package/dist/src/room/room-base.d.ts.map +1 -0
  30. package/dist/src/room/{game-room.js → room-base.js} +5 -5
  31. package/dist/src/room/room-base.js.map +1 -0
  32. package/dist/src/room/room-manager.service.d.ts +11 -11
  33. package/dist/src/room/room-manager.service.d.ts.map +1 -1
  34. package/dist/src/room/room-manager.service.js +2 -2
  35. package/dist/src/room/room-manager.service.js.map +1 -1
  36. package/dist/src/room/room-persistence.service.d.ts +2 -2
  37. package/dist/src/room/room-persistence.service.d.ts.map +1 -1
  38. package/dist/src/room/room-persistence.service.js +4 -4
  39. package/dist/src/room/room-persistence.service.js.map +1 -1
  40. package/dist/src/room/room.module.d.ts +1 -1
  41. package/dist/src/room/room.module.d.ts.map +1 -1
  42. package/dist/src/room/room.module.js +3 -3
  43. package/dist/src/room/room.module.js.map +1 -1
  44. package/dist/src/room/rooms/echo-room.d.ts +2 -2
  45. package/dist/src/room/rooms/echo-room.d.ts.map +1 -1
  46. package/dist/src/room/rooms/echo-room.js +2 -2
  47. package/dist/src/room/rooms/echo-room.js.map +1 -1
  48. package/dist/src/worker.module.d.ts +8 -3
  49. package/dist/src/worker.module.d.ts.map +1 -1
  50. package/dist/src/worker.module.js +10 -6
  51. package/dist/src/worker.module.js.map +1 -1
  52. package/dist/test/migration/room-migration.spec.d.ts +2 -0
  53. package/dist/test/migration/room-migration.spec.d.ts.map +1 -0
  54. package/dist/test/migration/{game-room-migration.spec.js → room-migration.spec.js} +4 -4
  55. package/dist/test/migration/room-migration.spec.js.map +1 -0
  56. package/dist/test/room/game-room.spec.js +2 -2
  57. package/dist/test/room/game-room.spec.js.map +1 -1
  58. package/dist/test/room/room-manager.service.spec.js +2 -2
  59. package/dist/test/room/room-manager.service.spec.js.map +1 -1
  60. package/package.json +25 -21
  61. package/dist/src/room/game-room.d.ts.map +0 -1
  62. package/dist/src/room/game-room.js.map +0 -1
  63. package/dist/test/migration/game-room-migration.spec.d.ts +0 -2
  64. package/dist/test/migration/game-room-migration.spec.d.ts.map +0 -1
  65. package/dist/test/migration/game-room-migration.spec.js.map +0 -1
package/README.md CHANGED
@@ -1,121 +1,372 @@
1
1
  # @roomkit/worker
2
2
 
3
- Game logic Worker server for the RoomKit framework.
3
+ Worker server for the RoomKit framework - manages room state and game logic.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @roomkit/worker @roomkit/core @roomkit/state
8
+ npm install @roomkit/worker @roomkit/core
9
9
  ```
10
10
 
11
11
  ## Features
12
12
 
13
- - 🎮 **Room System** - Colyseus-style room lifecycle
14
- - 🔄 **State Synchronization** - Automatic state sync with clients
15
- - 🔧 **Circuit Breaker** - Fault tolerance and resilience
13
+ - 🎮 **Room Management** - Create and manage game rooms with state synchronization
14
+ - 🔄 **Message Handling** - Type-safe message handling with RoomKit protocol
15
+ - 💾 **State Persistence** - Optional room state persistence to Redis
16
+ - 🔌 **Hot Reload** - Seamless room migration between workers
17
+ - ��️ **Circuit Breaker** - Protection against overload with graceful degradation
16
18
  - 📊 **Metrics** - Built-in Prometheus metrics
17
- - 🔌 **Horizontal Scaling** - Multiple worker instances supported
18
- - 🚀 **Room Migration** - Move rooms between workers
19
+ - **High Performance** - Optimized for low-latency multiplayer games
19
20
 
20
21
  ## Quick Start
21
22
 
22
- ### Create a Game Room
23
+ ### 1. Define Your Room
23
24
 
24
25
  ```typescript
25
- import { GameRoom } from '@roomkit/worker';
26
+ import { Room } from '@roomkit/worker';
26
27
 
27
- export class MyGameRoom extends GameRoom {
28
+ interface GameState {
29
+ players: Map<string, Player>;
30
+ score: number;
31
+ }
32
+
33
+ class GameRoom extends Room<GameState> {
28
34
  maxClients = 4;
29
35
 
30
36
  onCreate(options: any) {
31
- console.log('Room created', options);
32
- this.setState({ players: [], status: 'waiting' });
37
+ this.setState({
38
+ players: new Map(),
39
+ score: 0,
40
+ });
33
41
  }
34
42
 
35
- onJoin(client: ClientProxy, options: any) {
36
- console.log('Player joined', client.userId);
37
- this.state.players.push({ id: client.userId });
38
- this.broadcastStateToAll();
43
+ onJoin(client: Client, options?: any) {
44
+ this.state.players.set(client.sessionId, {
45
+ name: options.name,
46
+ x: 0,
47
+ y: 0,
48
+ });
49
+ this.broadcast('player-joined', { id: client.sessionId });
39
50
  }
40
51
 
41
- onMessage(client: ClientProxy, type: number, message: any) {
42
- // Handle game logic
52
+ onMessage(client: Client, type: string, payload: any) {
53
+ if (type === 'move') {
54
+ const player = this.state.players.get(client.sessionId);
55
+ if (player) {
56
+ player.x = payload.x;
57
+ player.y = payload.y;
58
+ this.broadcast('player-moved', { id: client.sessionId, ...payload });
59
+ }
60
+ }
43
61
  }
44
62
 
45
- onLeave(client: ClientProxy) {
46
- console.log('Player left', client.userId);
63
+ onLeave(client: Client, consented: boolean) {
64
+ this.state.players.delete(client.sessionId);
65
+ this.broadcast('player-left', { id: client.sessionId });
47
66
  }
48
67
  }
49
68
  ```
50
69
 
51
- ### Register Room
70
+ ### 2. Start the Worker
52
71
 
53
72
  ```typescript
54
- import { RoomRegistry } from '@roomkit/worker';
55
- import { MyGameRoom } from './my-game-room';
73
+ import { createWorker, Room } from '@roomkit/worker';
74
+
75
+ class GameRoom extends Room<GameState> { /* ... */ }
76
+
77
+ const worker = await createWorker({
78
+ redis: 'redis://localhost:6379',
79
+ rooms: [
80
+ { name: 'game', room: GameRoom }
81
+ ],
82
+ admin: {
83
+ port: 28200
84
+ },
85
+ });
86
+
87
+ await worker.listen();
88
+ console.log(\`Worker listening on admin port \${worker.adminPort}\`);
89
+ ```
90
+
91
+ ## Configuration
56
92
 
57
- RoomRegistry.register('my_game', MyGameRoom);
93
+ ### Redis Configuration
94
+
95
+ ```typescript
96
+ // Option 1: URL string
97
+ redis: 'redis://:password@localhost:6379/0'
98
+
99
+ // Option 2: Object
100
+ redis: {
101
+ host: 'localhost',
102
+ port: 6379,
103
+ password: 'your-password',
104
+ db: 0
105
+ }
58
106
  ```
59
107
 
60
- ### Environment Variables
108
+ ### Room Registration
61
109
 
62
- ```bash
63
- # Server
64
- ADMIN_PORT=28200
110
+ ```typescript
111
+ rooms: [
112
+ {
113
+ name: 'lobby', // Room type name
114
+ room: LobbyRoom // Room class
115
+ },
116
+ {
117
+ name: 'game',
118
+ room: GameRoom
119
+ },
120
+ ]
121
+ ```
65
122
 
66
- # Redis
67
- REDIS_HOST=localhost
68
- REDIS_PORT=6379
69
- REDIS_PASSWORD=
123
+ ### Circuit Breaker
70
124
 
71
- # Worker
72
- WORKER_ID=worker-1
125
+ ```typescript
126
+ circuitBreaker: {
127
+ maxRooms: 1000, // Max rooms per worker (default: 1000)
128
+ maxPendingRequests: 100, // Max pending room creation requests (default: 100)
129
+ enabled: true, // Enable circuit breaker (default: true)
130
+ failureThreshold: 5, // Failures before opening (default: 5)
131
+ successThreshold: 2, // Successes before closing (default: 2)
132
+ timeout: 10000, // Timeout in ms (default: 10000)
133
+ resetTimeout: 30000, // Reset timeout in ms (default: 30000)
134
+ }
73
135
  ```
74
136
 
75
- ### Run Worker
137
+ ### State Persistence
76
138
 
77
- ```bash
78
- # Using the binary
79
- npx @roomkit/worker
139
+ ```typescript
140
+ persistence: {
141
+ enabled: true, // Enable persistence (default: false)
142
+ saveInterval: 5000, // Auto-save interval in ms (default: 5000)
143
+ loadOnCreate: true, // Load state on room creation (default: true)
144
+ }
145
+ ```
146
+
147
+ ### Admin API
80
148
 
81
- # Or using Node.js
82
- node node_modules/@roomkit/worker/dist/main.js
149
+ ```typescript
150
+ admin: {
151
+ port: 28200, // Admin API port (default: 28200)
152
+ enabled: true // Enable admin API (default: true)
153
+ }
154
+ ```
155
+
156
+ ## Complete Example
157
+
158
+ ```typescript
159
+ import { createWorker, Room } from '@roomkit/worker';
160
+ import { LobbyRoom } from './rooms/LobbyRoom';
161
+
162
+ class GameRoom extends Room<GameState> { /* ... */ }
163
+
164
+ const worker = await createWorker({
165
+ // Optional: Custom worker ID (auto-generated if not provided)
166
+ id: 'worker-1',
167
+
168
+ // Redis configuration (required)
169
+ redis: {
170
+ host: process.env.REDIS_HOST || 'localhost',
171
+ port: parseInt(process.env.REDIS_PORT || '6379'),
172
+ password: process.env.REDIS_PASSWORD,
173
+ },
174
+
175
+ // Room definitions (required)
176
+ rooms: [
177
+ { name: 'lobby', room: LobbyRoom },
178
+ { name: 'game', room: GameRoom },
179
+ ],
180
+
181
+ // Circuit breaker configuration
182
+ circuitBreaker: {
183
+ maxRooms: 1000,
184
+ maxPendingRequests: 100,
185
+ enabled: true,
186
+ failureThreshold: 5,
187
+ successThreshold: 2,
188
+ timeout: 10000,
189
+ resetTimeout: 30000,
190
+ },
191
+
192
+ // State persistence
193
+ persistence: {
194
+ enabled: true,
195
+ saveInterval: 5000,
196
+ loadOnCreate: true,
197
+ },
198
+
199
+ // Admin API
200
+ admin: {
201
+ port: 28200,
202
+ enabled: true,
203
+ },
204
+ });
205
+
206
+ // Start the worker
207
+ await worker.listen();
208
+
209
+ // Graceful shutdown
210
+ process.on('SIGTERM', async () => {
211
+ await worker.close();
212
+ process.exit(0);
213
+ });
83
214
  ```
84
215
 
85
216
  ## Room Lifecycle
86
217
 
87
218
  ```typescript
88
- class GameRoom {
89
- onCreate(options) {
90
- // Room initialization
219
+ class MyRoom extends Room<MyState> {
220
+ // Called when room is created
221
+ onCreate(options: any) {
222
+ this.setState({ ... });
91
223
  }
92
224
 
93
- onJoin(client, options) {
94
- // Player joins
225
+ // Called when a client joins
226
+ onJoin(client: Client, options?: any) {
227
+ // Add player to state
95
228
  }
96
229
 
97
- onMessage(client, type, message) {
98
- // Handle messages
230
+ // Called when client sends a message
231
+ onMessage(client: Client, type: string, payload: any) {
232
+ // Handle game logic
99
233
  }
100
234
 
101
- onLeave(client) {
102
- // Player leaves
235
+ // Called when a client leaves
236
+ onLeave(client: Client, consented: boolean) {
237
+ // Remove player from state
103
238
  }
104
239
 
240
+ // Called before room is destroyed
105
241
  onDispose() {
106
- // Room cleanup
242
+ // Cleanup resources
107
243
  }
108
244
  }
109
245
  ```
110
246
 
247
+ ## Room API
248
+
249
+ ### Broadcasting
250
+
251
+ ```typescript
252
+ // Broadcast to all clients
253
+ this.broadcast('event-type', { data: 'value' });
254
+
255
+ // Broadcast to all except one
256
+ this.broadcast('event-type', { data: 'value' }, { except: client });
257
+
258
+ // Send to specific client
259
+ client.send('event-type', { data: 'value' });
260
+ ```
261
+
262
+ ### State Management
263
+
264
+ ```typescript
265
+ // Set initial state
266
+ this.setState({ score: 0, players: new Map() });
267
+
268
+ // Update state (triggers automatic sync to clients)
269
+ this.state.score += 10;
270
+ this.state.players.set(id, player);
271
+
272
+ // Lock for atomic updates
273
+ this.lock.acquire('update-score', async () => {
274
+ this.state.score += 10;
275
+ });
276
+ ```
277
+
278
+ ### Room Metadata
279
+
280
+ ```typescript
281
+ // Set custom metadata (visible in lobby)
282
+ this.setMetadata({
283
+ mapName: 'Forest',
284
+ difficulty: 'Hard'
285
+ });
286
+
287
+ // Set if room is private
288
+ this.setPrivate(true);
289
+ ```
290
+
291
+ ## Environment Variables
292
+
293
+ The worker supports basic environment variables for infrastructure configuration:
294
+
295
+ ```bash
296
+ # Redis (infrastructure)
297
+ REDIS_HOST=localhost
298
+ REDIS_PORT=6379
299
+ REDIS_PASSWORD=your-password
300
+
301
+ # Note: Application-level configs (circuit breaker, persistence, etc.)
302
+ # should be passed via code parameters for better type safety.
303
+ ```
304
+
111
305
  ## Admin API
112
306
 
113
- The worker provides an admin API on port `ADMIN_PORT`:
307
+ ### Health Check
308
+ ```bash
309
+ GET http://localhost:28200/health
310
+ ```
311
+
312
+ ### Metrics
313
+ ```bash
314
+ GET http://localhost:28200/metrics
315
+ ```
316
+
317
+ ### Room Stats
318
+ ```bash
319
+ GET http://localhost:28200/admin/rooms
320
+ ```
321
+
322
+ ## Docker
323
+
324
+ ```dockerfile
325
+ FROM node:20-alpine
326
+ WORKDIR /app
327
+ COPY package*.json ./
328
+ RUN npm install
329
+ COPY . .
330
+ EXPOSE 28200
331
+ CMD ["node", "worker.js"]
332
+ ```
333
+
334
+ ```bash
335
+ docker run -p 28200:28200 \
336
+ -e REDIS_HOST=redis \
337
+ -e REDIS_PORT=6379 \
338
+ my-worker
339
+ ```
340
+
341
+ ## Production Deployment
342
+
343
+ ### Horizontal Scaling
344
+
345
+ Run multiple worker instances:
346
+
347
+ ```bash
348
+ # Worker 1
349
+ node worker.js --id worker-1
350
+
351
+ # Worker 2
352
+ node worker.js --id worker-2
353
+
354
+ # Workers register automatically via Redis
355
+ ```
356
+
357
+ ### Monitoring
358
+
359
+ - Monitor room count, client count, message rate
360
+ - Set up alerts for circuit breaker triggers
361
+ - Track room creation/disposal rates
362
+
363
+ ### Best Practices
114
364
 
115
- - `GET /health` - Health check
116
- - `GET /metrics` - Prometheus metrics
117
- - `GET /admin/rooms` - List active rooms
118
- - `GET /admin/stats` - Worker statistics
365
+ 1. **Set maxRooms** based on your server capacity
366
+ 2. **Enable persistence** for important game state
367
+ 3. **Use circuit breaker** to prevent overload
368
+ 4. **Implement proper cleanup** in onDispose()
369
+ 5. **Handle errors gracefully** in onMessage()
119
370
 
120
371
  ## License
121
372
 
@@ -1,3 +1,6 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { WorkerConfigOptions } from './config.service';
1
3
  export declare class ConfigModule {
4
+ static forRoot(config?: Partial<WorkerConfigOptions>): DynamicModule;
2
5
  }
3
6
  //# sourceMappingURL=config.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.module.d.ts","sourceRoot":"","sources":["../../../src/config/config.module.ts"],"names":[],"mappings":"AAGA,qBAKa,YAAY;CAAG"}
1
+ {"version":3,"file":"config.module.d.ts","sourceRoot":"","sources":["../../../src/config/config.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAiB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,qBAEa,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,aAAa;CAYrE"}
@@ -5,18 +5,28 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  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;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var ConfigModule_1;
8
9
  Object.defineProperty(exports, "__esModule", { value: true });
9
10
  exports.ConfigModule = void 0;
10
11
  const common_1 = require("@nestjs/common");
11
12
  const config_service_1 = require("./config.service");
12
- let ConfigModule = class ConfigModule {
13
+ let ConfigModule = ConfigModule_1 = class ConfigModule {
14
+ static forRoot(config) {
15
+ return {
16
+ module: ConfigModule_1,
17
+ providers: [
18
+ {
19
+ provide: config_service_1.ConfigService,
20
+ useValue: new config_service_1.ConfigService(config),
21
+ },
22
+ ],
23
+ exports: [config_service_1.ConfigService],
24
+ };
25
+ }
13
26
  };
14
27
  exports.ConfigModule = ConfigModule;
15
- exports.ConfigModule = ConfigModule = __decorate([
28
+ exports.ConfigModule = ConfigModule = ConfigModule_1 = __decorate([
16
29
  (0, common_1.Global)(),
17
- (0, common_1.Module)({
18
- providers: [config_service_1.ConfigService],
19
- exports: [config_service_1.ConfigService],
20
- })
30
+ (0, common_1.Module)({})
21
31
  ], ConfigModule);
22
32
  //# sourceMappingURL=config.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.module.js","sourceRoot":"","sources":["../../../src/config/config.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,qDAAiD;AAO1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"}
1
+ {"version":3,"file":"config.module.js","sourceRoot":"","sources":["../../../src/config/config.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+D;AAC/D,qDAAsE;AAI/D,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,MAAqC;QAClD,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,8BAAa;oBACtB,QAAQ,EAAE,IAAI,8BAAa,CAAC,MAAM,CAAC;iBACpC;aACF;YACD,OAAO,EAAE,CAAC,8BAAa,CAAC;SACzB,CAAC;IACJ,CAAC;CACF,CAAA;AAbY,oCAAY;uBAAZ,YAAY;IAFxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,YAAY,CAaxB"}
@@ -1,3 +1,20 @@
1
+ export interface WorkerConfigOptions {
2
+ workerId: string;
3
+ adminPort: number;
4
+ redisHost: string;
5
+ redisPort: number;
6
+ redisPassword?: string;
7
+ maxRooms: number;
8
+ circuitFailureThreshold: number;
9
+ circuitSuccessThreshold: number;
10
+ circuitOpenTimeout: number;
11
+ maxPendingRequests: number;
12
+ persistenceEnabled: boolean;
13
+ snapshotInterval: number;
14
+ eventFlushInterval: number;
15
+ snapshotTTL: number;
16
+ eventTTL: number;
17
+ }
1
18
  export declare class ConfigService {
2
19
  readonly workerId: string;
3
20
  readonly adminPort: number;
@@ -14,6 +31,6 @@ export declare class ConfigService {
14
31
  readonly eventFlushInterval: number;
15
32
  readonly snapshotTTL: number;
16
33
  readonly eventTTL: number;
17
- constructor();
34
+ constructor(config?: Partial<WorkerConfigOptions>);
18
35
  }
19
36
  //# sourceMappingURL=config.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../../src/config/config.service.ts"],"names":[],"mappings":"AAGA,qBACa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAGpC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;;CAuB3B"}
1
+ {"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../../src/config/config.service.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAGpC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;CAsBlD"}
@@ -30,29 +30,30 @@ let ConfigService = class ConfigService {
30
30
  eventFlushInterval;
31
31
  snapshotTTL;
32
32
  eventTTL;
33
- constructor() {
34
- this.workerId = process.env.GW_WORKER_ID || `worker-${(0, uuid_1.v4)().substring(0, 8)}`;
35
- this.adminPort = parseInt(process.env.GW_WORKER_ADMIN_PORT || '28200', 10);
36
- this.redisHost = process.env.GW_REDIS_HOST || 'localhost';
37
- this.redisPort = parseInt(process.env.GW_REDIS_PORT || '6379', 10);
38
- this.redisPassword = process.env.GW_REDIS_PASSWORD;
39
- this.maxRooms = parseInt(process.env.GW_MAX_ROOMS || '500', 10);
33
+ constructor(config) {
34
+ // 优先使用传入的配置,其次使用环境变量(仅支持 REDIS_* 用于基础设施)
35
+ this.workerId = config?.workerId || process.env.WORKER_ID || `worker-${(0, uuid_1.v4)().substring(0, 8)}`;
36
+ this.adminPort = config?.adminPort || parseInt(process.env.WORKER_ADMIN_PORT || '28200', 10);
37
+ this.redisHost = config?.redisHost || process.env.REDIS_HOST || 'localhost';
38
+ this.redisPort = config?.redisPort || parseInt(process.env.REDIS_PORT || '6379', 10);
39
+ this.redisPassword = config?.redisPassword || process.env.REDIS_PASSWORD;
40
+ this.maxRooms = config?.maxRooms || parseInt(process.env.MAX_ROOMS || '500', 10);
40
41
  // 熔断器配置
41
- this.circuitFailureThreshold = parseInt(process.env.GW_CIRCUIT_FAILURE_THRESHOLD || '10', 10);
42
- this.circuitSuccessThreshold = parseInt(process.env.GW_CIRCUIT_SUCCESS_THRESHOLD || '5', 10);
43
- this.circuitOpenTimeout = parseInt(process.env.GW_CIRCUIT_OPEN_TIMEOUT || '30000', 10);
44
- this.maxPendingRequests = parseInt(process.env.GW_MAX_PENDING_REQUESTS || '1000', 10);
45
- // 持久化配置
46
- this.persistenceEnabled = process.env.GW_PERSISTENCE_ENABLED !== 'false'; // 默认开启
47
- this.snapshotInterval = parseInt(process.env.GW_SNAPSHOT_INTERVAL || '10000', 10); // 10秒
48
- this.eventFlushInterval = parseInt(process.env.GW_EVENT_FLUSH_INTERVAL || '1000', 10); // 1秒
49
- this.snapshotTTL = parseInt(process.env.GW_SNAPSHOT_TTL || '3600', 10); // 1小时
50
- this.eventTTL = parseInt(process.env.GW_EVENT_TTL || '3600', 10); // 1小时
42
+ this.circuitFailureThreshold = config?.circuitFailureThreshold || parseInt(process.env.CIRCUIT_FAILURE_THRESHOLD || '10', 10);
43
+ this.circuitSuccessThreshold = config?.circuitSuccessThreshold || parseInt(process.env.CIRCUIT_SUCCESS_THRESHOLD || '5', 10);
44
+ this.circuitOpenTimeout = config?.circuitOpenTimeout || parseInt(process.env.CIRCUIT_OPEN_TIMEOUT || '30000', 10);
45
+ this.maxPendingRequests = config?.maxPendingRequests || parseInt(process.env.MAX_PENDING_REQUESTS || '1000', 10);
46
+ // 持久化配置(默认禁用)
47
+ this.persistenceEnabled = config?.persistenceEnabled ?? (process.env.PERSISTENCE_ENABLED === 'true');
48
+ this.snapshotInterval = config?.snapshotInterval || parseInt(process.env.SNAPSHOT_INTERVAL || '10000', 10);
49
+ this.eventFlushInterval = config?.eventFlushInterval || parseInt(process.env.EVENT_FLUSH_INTERVAL || '1000', 10);
50
+ this.snapshotTTL = config?.snapshotTTL || parseInt(process.env.SNAPSHOT_TTL || '3600', 10);
51
+ this.eventTTL = config?.eventTTL || parseInt(process.env.EVENT_TTL || '3600', 10);
51
52
  }
52
53
  };
53
54
  exports.ConfigService = ConfigService;
54
55
  exports.ConfigService = ConfigService = __decorate([
55
56
  (0, common_1.Injectable)(),
56
- __metadata("design:paramtypes", [])
57
+ __metadata("design:paramtypes", [Object])
57
58
  ], ConfigService);
58
59
  //# sourceMappingURL=config.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/config/config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+BAAkC;AAG3B,IAAM,aAAa,GAAnB,MAAM,aAAa;IACf,QAAQ,CAAS;IACjB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,aAAa,CAAU;IACvB,QAAQ,CAAS;IAE1B,QAAQ;IACC,uBAAuB,CAAS;IAChC,uBAAuB,CAAS;IAChC,kBAAkB,CAAS;IAC3B,kBAAkB,CAAS;IAEpC,QAAQ;IACC,kBAAkB,CAAU;IAC5B,gBAAgB,CAAS;IACzB,kBAAkB,CAAS;IAC3B,WAAW,CAAS;IACpB,QAAQ,CAAS;IAE1B;QACE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,UAAU,IAAA,SAAI,GAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW,CAAC;QAC1D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;QAEhE,QAAQ;QACR,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QAEtF,QAAQ;QACR,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,OAAO,CAAC,CAAC,OAAO;QACjF,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;QACzF,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;QAC5F,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;QAC9E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;IAC1E,CAAC;CACF,CAAA;AA1CY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;;GACA,aAAa,CA0CzB"}
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/config/config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+BAAkC;AAqB3B,IAAM,aAAa,GAAnB,MAAM,aAAa;IACf,QAAQ,CAAS;IACjB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,aAAa,CAAU;IACvB,QAAQ,CAAS;IAE1B,QAAQ;IACC,uBAAuB,CAAS;IAChC,uBAAuB,CAAS;IAChC,kBAAkB,CAAS;IAC3B,kBAAkB,CAAS;IAEpC,QAAQ;IACC,kBAAkB,CAAU;IAC5B,gBAAgB,CAAS;IACzB,kBAAkB,CAAS;IAC3B,WAAW,CAAS;IACpB,QAAQ,CAAS;IAE1B,YAAY,MAAqC;QAC/C,yCAAyC;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,UAAU,IAAA,SAAI,GAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAChG,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,CAAC;QAC5E,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACzE,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;QAEjF,QAAQ;QACR,IAAI,CAAC,uBAAuB,GAAG,MAAM,EAAE,uBAAuB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9H,IAAI,CAAC,uBAAuB,GAAG,MAAM,EAAE,uBAAuB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7H,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,kBAAkB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,kBAAkB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QAEjH,cAAc;QACd,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,kBAAkB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,CAAC,CAAC;QACrG,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE,gBAAgB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,kBAAkB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;CACF,CAAA;AA3CY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;;GACA,aAAa,CA2CzB"}
@@ -20,6 +20,20 @@ export interface CircuitBreakerConfig {
20
20
  successThreshold?: number;
21
21
  /** Time to wait before trying again (ms) */
22
22
  openTimeout?: number;
23
+ /** Maximum pending requests */
24
+ maxPendingRequests?: number;
25
+ }
26
+ export interface PersistenceConfig {
27
+ /** Enable persistence */
28
+ enabled?: boolean;
29
+ /** Snapshot interval in milliseconds */
30
+ snapshotInterval?: number;
31
+ /** Event flush interval in milliseconds */
32
+ eventFlushInterval?: number;
33
+ /** Snapshot TTL in seconds */
34
+ snapshotTTL?: number;
35
+ /** Event TTL in seconds */
36
+ eventTTL?: number;
23
37
  }
24
38
  export interface AdminConfig {
25
39
  /** Admin API port */
@@ -50,12 +64,16 @@ export interface WorkerConfig {
50
64
  id?: string;
51
65
  /** Redis configuration */
52
66
  redis: RedisConfig | string;
67
+ /** Maximum number of rooms this worker can handle */
68
+ maxRooms?: number;
53
69
  /** Room types to register */
54
70
  rooms?: Record<string, new (...args: any[]) => any>;
55
71
  /** Circuit breaker configuration */
56
72
  circuitBreaker?: CircuitBreakerConfig;
57
73
  /** Admin API configuration */
58
74
  admin?: AdminConfig;
75
+ /** Persistence configuration */
76
+ persistence?: PersistenceConfig;
59
77
  /**
60
78
  * Custom authentication handler
61
79
  * If not provided, uses default pass-through authentication (token = userId)
@@ -1 +1 @@
1
- {"version":3,"file":"worker.config.d.ts","sourceRoot":"","sources":["../../../src/config/worker.config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC;IACpD,oCAAoC;IACpC,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,8BAA8B;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,CAW9E;AAED;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,oBAAoB,CAIzE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAGtD,CAAC"}
1
+ {"version":3,"file":"worker.config.d.ts","sourceRoot":"","sources":["../../../src/config/worker.config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC;IACpD,oCAAoC;IACpC,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,8BAA8B;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,gCAAgC;IAChC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,CAW9E;AAED;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,oBAAoB,CAKzE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAGtD,CAAC"}
@@ -27,6 +27,7 @@ exports.DEFAULT_CIRCUIT_BREAKER_CONFIG = {
27
27
  failureThreshold: 10,
28
28
  successThreshold: 5,
29
29
  openTimeout: 30000,
30
+ maxPendingRequests: 1000,
30
31
  };
31
32
  exports.DEFAULT_ADMIN_CONFIG = {
32
33
  port: 27300,
@@ -1 +1 @@
1
- {"version":3,"file":"worker.config.js","sourceRoot":"","sources":["../../../src/config/worker.config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgFH,oDAWC;AAdD;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAA4B;IAC/D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;YAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;YACnC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACU,QAAA,8BAA8B,GAAmC;IAC5E,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,CAAC;IACnB,WAAW,EAAE,KAAK;CACnB,CAAC;AAEW,QAAA,oBAAoB,GAA0B;IACzD,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,IAAI;CACd,CAAC"}
1
+ {"version":3,"file":"worker.config.js","sourceRoot":"","sources":["../../../src/config/worker.config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAmGH,oDAWC;AAdD;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAA4B;IAC/D,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI;YAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;YACnC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACU,QAAA,8BAA8B,GAAmC;IAC5E,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,CAAC;IACnB,WAAW,EAAE,KAAK;IAClB,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEW,QAAA,oBAAoB,GAA0B;IACzD,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,IAAI;CACd,CAAC"}