@omnitronix/game-engine-sdk 1.0.1

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 (177) hide show
  1. package/dist/bootstrap/index.d.ts +15 -0
  2. package/dist/bootstrap/index.d.ts.map +1 -0
  3. package/dist/bootstrap/index.js +156 -0
  4. package/dist/common/api-docs/setup-documentation.d.ts +3 -0
  5. package/dist/common/api-docs/setup-documentation.d.ts.map +1 -0
  6. package/dist/common/api-docs/setup-documentation.js +27 -0
  7. package/dist/common/application-bootstrap-options.interface.d.ts +4 -0
  8. package/dist/common/application-bootstrap-options.interface.d.ts.map +1 -0
  9. package/dist/common/application-bootstrap-options.interface.js +2 -0
  10. package/dist/common/error-handling/all-exceptions.filter.d.ts +22 -0
  11. package/dist/common/error-handling/all-exceptions.filter.d.ts.map +1 -0
  12. package/dist/common/error-handling/all-exceptions.filter.js +131 -0
  13. package/dist/common/error-handling/domain.exception.d.ts +8 -0
  14. package/dist/common/error-handling/domain.exception.d.ts.map +1 -0
  15. package/dist/common/error-handling/domain.exception.js +14 -0
  16. package/dist/common/error-handling/error-code-mapper.d.ts +6 -0
  17. package/dist/common/error-handling/error-code-mapper.d.ts.map +1 -0
  18. package/dist/common/error-handling/error-code-mapper.js +93 -0
  19. package/dist/common/error-handling/internal-error-code.d.ts +67 -0
  20. package/dist/common/error-handling/internal-error-code.d.ts.map +1 -0
  21. package/dist/common/error-handling/internal-error-code.js +80 -0
  22. package/dist/common/index.d.ts +21 -0
  23. package/dist/common/index.d.ts.map +1 -0
  24. package/dist/common/index.js +51 -0
  25. package/dist/common/logger/logger.d.ts +24 -0
  26. package/dist/common/logger/logger.d.ts.map +1 -0
  27. package/dist/common/logger/logger.js +137 -0
  28. package/dist/common/logger/logger.module.d.ts +3 -0
  29. package/dist/common/logger/logger.module.d.ts.map +1 -0
  30. package/dist/common/logger/logger.module.js +19 -0
  31. package/dist/common/logger/logging.middleware.d.ts +8 -0
  32. package/dist/common/logger/logging.middleware.d.ts.map +1 -0
  33. package/dist/common/logger/logging.middleware.js +44 -0
  34. package/dist/common/metrics/database-metrics.service.d.ts +8 -0
  35. package/dist/common/metrics/database-metrics.service.d.ts.map +1 -0
  36. package/dist/common/metrics/database-metrics.service.js +39 -0
  37. package/dist/common/metrics/helpers/metrics.helpers.d.ts +5 -0
  38. package/dist/common/metrics/helpers/metrics.helpers.d.ts.map +1 -0
  39. package/dist/common/metrics/helpers/metrics.helpers.js +38 -0
  40. package/dist/common/metrics/metrics.module.d.ts +3 -0
  41. package/dist/common/metrics/metrics.module.d.ts.map +1 -0
  42. package/dist/common/metrics/metrics.module.js +207 -0
  43. package/dist/common/metrics/metrics.port.d.ts +22 -0
  44. package/dist/common/metrics/metrics.port.d.ts.map +1 -0
  45. package/dist/common/metrics/metrics.port.js +4 -0
  46. package/dist/common/metrics/prometheus.service.d.ts +25 -0
  47. package/dist/common/metrics/prometheus.service.d.ts.map +1 -0
  48. package/dist/common/metrics/prometheus.service.js +105 -0
  49. package/dist/common/retry/retry-policies.d.ts +8 -0
  50. package/dist/common/retry/retry-policies.d.ts.map +1 -0
  51. package/dist/common/retry/retry-policies.js +43 -0
  52. package/dist/common/retry/retry-policy.d.ts +25 -0
  53. package/dist/common/retry/retry-policy.d.ts.map +1 -0
  54. package/dist/common/retry/retry-policy.js +65 -0
  55. package/dist/common/secrets-provider/secrets-provider.aws.d.ts +13 -0
  56. package/dist/common/secrets-provider/secrets-provider.aws.d.ts.map +1 -0
  57. package/dist/common/secrets-provider/secrets-provider.aws.js +72 -0
  58. package/dist/common/secrets-provider/secrets-provider.d.ts +5 -0
  59. package/dist/common/secrets-provider/secrets-provider.d.ts.map +1 -0
  60. package/dist/common/secrets-provider/secrets-provider.js +4 -0
  61. package/dist/common/secrets-provider/secrets-provider.local.d.ts +8 -0
  62. package/dist/common/secrets-provider/secrets-provider.local.d.ts.map +1 -0
  63. package/dist/common/secrets-provider/secrets-provider.local.js +75 -0
  64. package/dist/common/secrets-provider/secrets-provider.module.d.ts +5 -0
  65. package/dist/common/secrets-provider/secrets-provider.module.d.ts.map +1 -0
  66. package/dist/common/secrets-provider/secrets-provider.module.js +47 -0
  67. package/dist/esm/bootstrap/index.js +120 -0
  68. package/dist/esm/common/api-docs/setup-documentation.js +23 -0
  69. package/dist/esm/common/application-bootstrap-options.interface.js +1 -0
  70. package/dist/esm/common/error-handling/all-exceptions.filter.js +128 -0
  71. package/dist/esm/common/error-handling/domain.exception.js +10 -0
  72. package/dist/esm/common/error-handling/error-code-mapper.js +89 -0
  73. package/dist/esm/common/error-handling/internal-error-code.js +77 -0
  74. package/dist/esm/common/index.js +25 -0
  75. package/dist/esm/common/logger/logger.js +133 -0
  76. package/dist/esm/common/logger/logger.module.js +16 -0
  77. package/dist/esm/common/logger/logging.middleware.js +41 -0
  78. package/dist/esm/common/metrics/database-metrics.service.js +36 -0
  79. package/dist/esm/common/metrics/helpers/metrics.helpers.js +32 -0
  80. package/dist/esm/common/metrics/metrics.module.js +204 -0
  81. package/dist/esm/common/metrics/metrics.port.js +1 -0
  82. package/dist/esm/common/metrics/prometheus.service.js +102 -0
  83. package/dist/esm/common/retry/retry-policies.js +39 -0
  84. package/dist/esm/common/retry/retry-policy.js +61 -0
  85. package/dist/esm/common/secrets-provider/secrets-provider.aws.js +69 -0
  86. package/dist/esm/common/secrets-provider/secrets-provider.js +1 -0
  87. package/dist/esm/common/secrets-provider/secrets-provider.local.js +39 -0
  88. package/dist/esm/common/secrets-provider/secrets-provider.module.js +44 -0
  89. package/dist/esm/generated/game-engine-registry_pb.js +28 -0
  90. package/dist/esm/generated/game-engine_pb.js +57 -0
  91. package/dist/esm/grpc/connect-router.middleware.js +16 -0
  92. package/dist/esm/grpc/game-engine.grpc.in-adapter.js +109 -0
  93. package/dist/esm/grpc/index.js +2 -0
  94. package/dist/esm/health/application/ports/in/health-in.port.js +1 -0
  95. package/dist/esm/health/application/ports/out/database-health.out-port.js +1 -0
  96. package/dist/esm/health/application/ports/out/shutdown.out-port.js +1 -0
  97. package/dist/esm/health/application/ports/out/system-health.out-port.js +1 -0
  98. package/dist/esm/health/application/services/health.service.js +81 -0
  99. package/dist/esm/health/domain/health.js +7 -0
  100. package/dist/esm/health/health.module.js +65 -0
  101. package/dist/esm/health/index.js +15 -0
  102. package/dist/esm/health/infrastructure/adapters/in/health.http.in-adapter.js +96 -0
  103. package/dist/esm/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.js +45 -0
  104. package/dist/esm/health/infrastructure/adapters/out/system/system-health.out-adapter.js +43 -0
  105. package/dist/esm/index.js +15 -0
  106. package/dist/esm/registration/adapters/game-engine-registry.grpc.out-adapter.js +59 -0
  107. package/dist/esm/registration/index.js +3 -0
  108. package/dist/esm/registration/ports/game-engine-registry.out-port.js +1 -0
  109. package/dist/esm/registration/services/game-engine-auto-register.service.js +78 -0
  110. package/dist/esm/types.js +8 -0
  111. package/dist/generated/game-engine-registry_pb.d.ts +76 -0
  112. package/dist/generated/game-engine-registry_pb.d.ts.map +1 -0
  113. package/dist/generated/game-engine-registry_pb.js +31 -0
  114. package/dist/generated/game-engine_pb.d.ts +171 -0
  115. package/dist/generated/game-engine_pb.d.ts.map +1 -0
  116. package/dist/generated/game-engine_pb.js +60 -0
  117. package/dist/grpc/connect-router.middleware.d.ts +7 -0
  118. package/dist/grpc/connect-router.middleware.d.ts.map +1 -0
  119. package/dist/grpc/connect-router.middleware.js +19 -0
  120. package/dist/grpc/game-engine.grpc.in-adapter.d.ts +21 -0
  121. package/dist/grpc/game-engine.grpc.in-adapter.d.ts.map +1 -0
  122. package/dist/grpc/game-engine.grpc.in-adapter.js +112 -0
  123. package/dist/grpc/index.d.ts +3 -0
  124. package/dist/grpc/index.d.ts.map +1 -0
  125. package/dist/grpc/index.js +7 -0
  126. package/dist/health/application/ports/in/health-in.port.d.ts +7 -0
  127. package/dist/health/application/ports/in/health-in.port.d.ts.map +1 -0
  128. package/dist/health/application/ports/in/health-in.port.js +4 -0
  129. package/dist/health/application/ports/out/database-health.out-port.d.ts +6 -0
  130. package/dist/health/application/ports/out/database-health.out-port.d.ts.map +1 -0
  131. package/dist/health/application/ports/out/database-health.out-port.js +4 -0
  132. package/dist/health/application/ports/out/shutdown.out-port.d.ts +6 -0
  133. package/dist/health/application/ports/out/shutdown.out-port.d.ts.map +1 -0
  134. package/dist/health/application/ports/out/shutdown.out-port.js +4 -0
  135. package/dist/health/application/ports/out/system-health.out-port.d.ts +7 -0
  136. package/dist/health/application/ports/out/system-health.out-port.d.ts.map +1 -0
  137. package/dist/health/application/ports/out/system-health.out-port.js +4 -0
  138. package/dist/health/application/services/health.service.d.ts +13 -0
  139. package/dist/health/application/services/health.service.d.ts.map +1 -0
  140. package/dist/health/application/services/health.service.js +84 -0
  141. package/dist/health/domain/health.d.ts +15 -0
  142. package/dist/health/domain/health.d.ts.map +1 -0
  143. package/dist/health/domain/health.js +11 -0
  144. package/dist/health/health.module.d.ts +10 -0
  145. package/dist/health/health.module.d.ts.map +1 -0
  146. package/dist/health/health.module.js +68 -0
  147. package/dist/health/index.d.ts +11 -0
  148. package/dist/health/index.d.ts.map +1 -0
  149. package/dist/health/index.js +28 -0
  150. package/dist/health/infrastructure/adapters/in/health.http.in-adapter.d.ts +16 -0
  151. package/dist/health/infrastructure/adapters/in/health.http.in-adapter.d.ts.map +1 -0
  152. package/dist/health/infrastructure/adapters/in/health.http.in-adapter.js +99 -0
  153. package/dist/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.d.ts +13 -0
  154. package/dist/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.d.ts.map +1 -0
  155. package/dist/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.js +48 -0
  156. package/dist/health/infrastructure/adapters/out/system/system-health.out-adapter.d.ts +12 -0
  157. package/dist/health/infrastructure/adapters/out/system/system-health.out-adapter.d.ts.map +1 -0
  158. package/dist/health/infrastructure/adapters/out/system/system-health.out-adapter.js +46 -0
  159. package/dist/index.d.ts +9 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +43 -0
  162. package/dist/registration/adapters/game-engine-registry.grpc.out-adapter.d.ts +12 -0
  163. package/dist/registration/adapters/game-engine-registry.grpc.out-adapter.d.ts.map +1 -0
  164. package/dist/registration/adapters/game-engine-registry.grpc.out-adapter.js +62 -0
  165. package/dist/registration/index.d.ts +4 -0
  166. package/dist/registration/index.d.ts.map +1 -0
  167. package/dist/registration/index.js +9 -0
  168. package/dist/registration/ports/game-engine-registry.out-port.d.ts +9 -0
  169. package/dist/registration/ports/game-engine-registry.out-port.d.ts.map +1 -0
  170. package/dist/registration/ports/game-engine-registry.out-port.js +4 -0
  171. package/dist/registration/services/game-engine-auto-register.service.d.ts +14 -0
  172. package/dist/registration/services/game-engine-auto-register.service.d.ts.map +1 -0
  173. package/dist/registration/services/game-engine-auto-register.service.js +81 -0
  174. package/dist/types.d.ts +53 -0
  175. package/dist/types.d.ts.map +1 -0
  176. package/dist/types.js +11 -0
  177. package/package.json +159 -0
@@ -0,0 +1,45 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var ShutdownOutAdapter_1;
11
+ import { Logger } from '../../../../../common/logger/logger';
12
+ import { Injectable } from '@nestjs/common';
13
+ import { ConfigService } from '@nestjs/config';
14
+ let ShutdownOutAdapter = ShutdownOutAdapter_1 = class ShutdownOutAdapter {
15
+ constructor(configService) {
16
+ this.configService = configService;
17
+ this.logger = new Logger(ShutdownOutAdapter_1.name);
18
+ this.shuttingDown = false;
19
+ }
20
+ isShuttingDown() {
21
+ return this.shuttingDown;
22
+ }
23
+ async startGracefulShutdown() {
24
+ if (this.shuttingDown) {
25
+ this.logger.warn('Graceful shutdown already in progress, ignoring duplicate SIGTERM');
26
+ return;
27
+ }
28
+ this.shuttingDown = true;
29
+ this.logger.warn(`SIGTERM received - starting graceful shutdown sequence\n` +
30
+ `Health endpoint now returns HTTP 503 (draining state)`);
31
+ void this.cleanup();
32
+ }
33
+ async cleanup() {
34
+ this.logger.log('Starting application resources cleanup...');
35
+ this.logger.log('Application resources cleanup completed');
36
+ }
37
+ delay(ms) {
38
+ return new Promise(resolve => setTimeout(resolve, ms));
39
+ }
40
+ };
41
+ ShutdownOutAdapter = ShutdownOutAdapter_1 = __decorate([
42
+ Injectable(),
43
+ __metadata("design:paramtypes", [ConfigService])
44
+ ], ShutdownOutAdapter);
45
+ export { ShutdownOutAdapter };
@@ -0,0 +1,43 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { loadavg } from 'node:os';
11
+ import { Injectable } from '@nestjs/common';
12
+ import { ConfigService } from '@nestjs/config';
13
+ let SystemHealthOutAdapter = class SystemHealthOutAdapter {
14
+ constructor(configService) {
15
+ this.configService = configService;
16
+ this.maxHeapUsagePercentage = Number(this.configService.get('HEALTH_MAX_HEAP_USAGE_PERCENTAGE', 98));
17
+ this.maxLoadAvg = Number(this.configService.get('HEALTH_MAX_MEMORY_USAGE_PART', 10));
18
+ }
19
+ checkMemoryUsage() {
20
+ const memUsage = process.memoryUsage();
21
+ const maxHeapSize = memUsage.heapTotal;
22
+ const usedHeapSize = memUsage.heapUsed;
23
+ const heapUsagePercent = (usedHeapSize / maxHeapSize) * 100;
24
+ const healthy = heapUsagePercent < this.maxHeapUsagePercentage;
25
+ return {
26
+ healthy,
27
+ component: 'memory',
28
+ };
29
+ }
30
+ checkSystemResources() {
31
+ const loadAvg = loadavg() ? loadavg() : [0, 0, 0];
32
+ const healthy = loadAvg[0] < this.maxLoadAvg;
33
+ return {
34
+ healthy,
35
+ component: 'system',
36
+ };
37
+ }
38
+ };
39
+ SystemHealthOutAdapter = __decorate([
40
+ Injectable(),
41
+ __metadata("design:paramtypes", [ConfigService])
42
+ ], SystemHealthOutAdapter);
43
+ export { SystemHealthOutAdapter };
@@ -0,0 +1,15 @@
1
+ // Core types
2
+ export { GAME_ENGINE, GAME_ENGINE_IN_PORT, } from './types';
3
+ // Common module
4
+ export * from './common';
5
+ // Health module
6
+ export * from './health';
7
+ // Registration module
8
+ export * from './registration';
9
+ // gRPC module
10
+ export * from './grpc';
11
+ // Bootstrap
12
+ export { createGameEngineApp } from './bootstrap';
13
+ // Generated proto types (re-exported for convenience)
14
+ export { GameEngineService, ProcessCommandRequestSchema, ProcessCommandResponseSchema, GetGameEngineInfoRequestSchema, GetGameEngineInfoResponseSchema, } from './generated/game-engine_pb';
15
+ export { GameEngineRegistryService, RegisterGameEngineRequestSchema, RegisterGameEngineResponseSchema, } from './generated/game-engine-registry_pb';
@@ -0,0 +1,59 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { create } from '@bufbuild/protobuf';
11
+ import { Logger } from '../../common/logger/logger';
12
+ import { createClient } from '@connectrpc/connect';
13
+ import { createConnectTransport } from '@connectrpc/connect-node';
14
+ import { GameEngineRegistryService, RegisterGameEngineRequestSchema, } from '../../generated/game-engine-registry_pb';
15
+ import { Injectable } from '@nestjs/common';
16
+ import { ConfigService } from '@nestjs/config';
17
+ let GameEngineRegistryGrpcOutAdapter = class GameEngineRegistryGrpcOutAdapter {
18
+ constructor(configService) {
19
+ this.configService = configService;
20
+ this.logger = new Logger('GameEngineRegistryGrpcOutAdapter');
21
+ const gameEngineRegistryUrl = this.configService.get('GAME_ENGINE_REGISTRY_GRPC_URL');
22
+ if (!gameEngineRegistryUrl) {
23
+ throw new Error('GAME_ENGINE_REGISTRY_GRPC_URL is not configured');
24
+ }
25
+ const transport = createConnectTransport({
26
+ baseUrl: gameEngineRegistryUrl,
27
+ httpVersion: '2',
28
+ });
29
+ this.logger.log(`Connecting to Game Engine Registry at ${gameEngineRegistryUrl}`);
30
+ try {
31
+ this.client = createClient(GameEngineRegistryService, transport);
32
+ }
33
+ catch (error) {
34
+ this.logger.error(`Failed to connect to Game Engine Registry at ${gameEngineRegistryUrl}`, {
35
+ error,
36
+ stack: error.stack,
37
+ });
38
+ throw new Error(`Failed to connect to Game Engine Registry at ${gameEngineRegistryUrl}`);
39
+ }
40
+ }
41
+ async registerGameEngine(input) {
42
+ const request = create(RegisterGameEngineRequestSchema, {
43
+ gameCode: input.gameCode,
44
+ version: input.version,
45
+ rtp: input.rtp,
46
+ gameType: input.gameType,
47
+ grpcUrl: input.grpcUrl,
48
+ gameName: input.gameName,
49
+ provider: input.provider,
50
+ });
51
+ const response = await this.client.registerGameEngine(request);
52
+ return { success: response.success };
53
+ }
54
+ };
55
+ GameEngineRegistryGrpcOutAdapter = __decorate([
56
+ Injectable(),
57
+ __metadata("design:paramtypes", [ConfigService])
58
+ ], GameEngineRegistryGrpcOutAdapter);
59
+ export { GameEngineRegistryGrpcOutAdapter };
@@ -0,0 +1,3 @@
1
+ export { GAME_ENGINE_REGISTRY_OUT_PORT, } from './ports/game-engine-registry.out-port';
2
+ export { GameEngineAutoRegisterService } from './services/game-engine-auto-register.service';
3
+ export { GameEngineRegistryGrpcOutAdapter } from './adapters/game-engine-registry.grpc.out-adapter';
@@ -0,0 +1 @@
1
+ export const GAME_ENGINE_REGISTRY_OUT_PORT = Symbol('GAME_ENGINE_REGISTRY_OUT_PORT');
@@ -0,0 +1,78 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var GameEngineAutoRegisterService_1;
14
+ import { HTTP_RETRYABLE_ERRORS } from '../../common/retry/retry-policies';
15
+ import { RetryPolicy } from '../../common/retry/retry-policy';
16
+ import { GAME_ENGINE_REGISTRY_OUT_PORT, } from '../ports/game-engine-registry.out-port';
17
+ import { GAME_ENGINE } from '../../types';
18
+ import { Inject, Injectable, Logger } from '@nestjs/common';
19
+ import { ConfigService } from '@nestjs/config';
20
+ let GameEngineAutoRegisterService = GameEngineAutoRegisterService_1 = class GameEngineAutoRegisterService {
21
+ constructor(gameEngineRegistryOutPort, gameEngine, configService) {
22
+ this.gameEngineRegistryOutPort = gameEngineRegistryOutPort;
23
+ this.gameEngine = gameEngine;
24
+ this.configService = configService;
25
+ this.logger = new Logger(GameEngineAutoRegisterService_1.name);
26
+ }
27
+ async onModuleInit() {
28
+ // do not await here to not block module initialization
29
+ this.register().catch(error => {
30
+ this.logger.error('Auto-registration failed', {
31
+ error,
32
+ stack: error.stack,
33
+ });
34
+ });
35
+ }
36
+ async register() {
37
+ const gameEngineInfo = this.gameEngine.getGameEngineInfo();
38
+ const serviceHost = this.configService.get('HOST_NAME');
39
+ if (!serviceHost) {
40
+ this.logger.error('HOST_NAME is not configured. Skipping auto-registration.');
41
+ return;
42
+ }
43
+ const retryPolicy = new RetryPolicy({
44
+ operationName: 'GameEngineAutoRegister.register',
45
+ maxAttempts: 5,
46
+ delayMs: 1000,
47
+ backoffMultiplier: 2,
48
+ maxDelayMs: 30000,
49
+ retryableErrors: HTTP_RETRYABLE_ERRORS,
50
+ });
51
+ try {
52
+ const result = await retryPolicy.execute(() => this.gameEngineRegistryOutPort.registerGameEngine({
53
+ ...gameEngineInfo,
54
+ grpcUrl: `http://${serviceHost}:${this.configService.get('GRPC_PORT', 50051)}`,
55
+ }));
56
+ if (result.success) {
57
+ this.logger.log(`Successfully registered game engine ${gameEngineInfo.gameCode} v${gameEngineInfo.version} at ${serviceHost}`);
58
+ }
59
+ else {
60
+ this.logger.error(`Failed to register game engine ${gameEngineInfo.gameCode} v${gameEngineInfo.version} at ${serviceHost}. Reason: ${result.message || 'unknown'}.`);
61
+ }
62
+ }
63
+ catch (error) {
64
+ this.logger.error(`Failed to register game engine ${gameEngineInfo.gameCode} v${gameEngineInfo.version} at ${serviceHost}`, {
65
+ error,
66
+ stack: error?.stack,
67
+ });
68
+ return;
69
+ }
70
+ }
71
+ };
72
+ GameEngineAutoRegisterService = GameEngineAutoRegisterService_1 = __decorate([
73
+ Injectable(),
74
+ __param(0, Inject(GAME_ENGINE_REGISTRY_OUT_PORT)),
75
+ __param(1, Inject(GAME_ENGINE)),
76
+ __metadata("design:paramtypes", [Object, Object, ConfigService])
77
+ ], GameEngineAutoRegisterService);
78
+ export { GameEngineAutoRegisterService };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Core types for game engine services.
3
+ *
4
+ * These types define the contract between the SDK infrastructure
5
+ * and game-specific engine implementations.
6
+ */
7
+ export const GAME_ENGINE = Symbol('GAME_ENGINE');
8
+ export const GAME_ENGINE_IN_PORT = Symbol('GAME_ENGINE_IN_PORT');
@@ -0,0 +1,76 @@
1
+ import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2';
2
+ import type { Message } from '@bufbuild/protobuf';
3
+ /**
4
+ * Describes the file game-engine-registry.proto.
5
+ */
6
+ export declare const file_game_engine_registry: GenFile;
7
+ /**
8
+ * @generated from message game_engine_registry.RegisterGameEngineRequest
9
+ */
10
+ export type RegisterGameEngineRequest = Message<'game_engine_registry.RegisterGameEngineRequest'> & {
11
+ /**
12
+ * @generated from field: string game_code = 1;
13
+ */
14
+ gameCode: string;
15
+ /**
16
+ * @generated from field: string version = 2;
17
+ */
18
+ version: string;
19
+ /**
20
+ * @generated from field: double rtp = 3;
21
+ */
22
+ rtp: number;
23
+ /**
24
+ * @generated from field: string game_type = 4;
25
+ */
26
+ gameType: string;
27
+ /**
28
+ * @generated from field: string grpc_url = 5;
29
+ */
30
+ grpcUrl: string;
31
+ /**
32
+ * @generated from field: string game_name = 6;
33
+ */
34
+ gameName: string;
35
+ /**
36
+ * @generated from field: string provider = 7;
37
+ */
38
+ provider: string;
39
+ };
40
+ /**
41
+ * Describes the message game_engine_registry.RegisterGameEngineRequest.
42
+ * Use `create(RegisterGameEngineRequestSchema)` to create a new message.
43
+ */
44
+ export declare const RegisterGameEngineRequestSchema: GenMessage<RegisterGameEngineRequest>;
45
+ /**
46
+ * @generated from message game_engine_registry.RegisterGameEngineResponse
47
+ */
48
+ export type RegisterGameEngineResponse = Message<'game_engine_registry.RegisterGameEngineResponse'> & {
49
+ /**
50
+ * @generated from field: bool success = 1;
51
+ */
52
+ success: boolean;
53
+ /**
54
+ * @generated from field: optional string message = 2;
55
+ */
56
+ message?: string;
57
+ };
58
+ /**
59
+ * Describes the message game_engine_registry.RegisterGameEngineResponse.
60
+ * Use `create(RegisterGameEngineResponseSchema)` to create a new message.
61
+ */
62
+ export declare const RegisterGameEngineResponseSchema: GenMessage<RegisterGameEngineResponse>;
63
+ /**
64
+ * @generated from service game_engine_registry.GameEngineRegistryService
65
+ */
66
+ export declare const GameEngineRegistryService: GenService<{
67
+ /**
68
+ * @generated from rpc game_engine_registry.GameEngineRegistryService.RegisterGameEngine
69
+ */
70
+ registerGameEngine: {
71
+ methodKind: 'unary';
72
+ input: typeof RegisterGameEngineRequestSchema;
73
+ output: typeof RegisterGameEngineResponseSchema;
74
+ };
75
+ }>;
76
+ //# sourceMappingURL=game-engine-registry_pb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-engine-registry_pb.d.ts","sourceRoot":"","sources":["../../src/generated/game-engine-registry_pb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,OAIrC,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACnC,OAAO,CAAC,gDAAgD,CAAC,GAAG;IAC1D;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,+BAA+B,EAAE,UAAU,CAAC,yBAAyB,CAEvC,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,0BAA0B,GACpC,OAAO,CAAC,iDAAiD,CAAC,GAAG;IAC3D;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,gCAAgC,EAAE,UAAU,CAAC,0BAA0B,CAEzC,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,UAAU,CAAC;IACjD;;OAEG;IACH,kBAAkB,EAAE;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,OAAO,+BAA+B,CAAC;QAC9C,MAAM,EAAE,OAAO,gCAAgC,CAAC;KACjD,CAAC;CACH,CAA2D,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ // @generated by protoc-gen-es v2.10.0 with parameter "target=ts"
3
+ // @generated from file game-engine-registry.proto (package game_engine_registry, syntax proto3)
4
+ /* eslint-disable */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GameEngineRegistryService = exports.RegisterGameEngineResponseSchema = exports.RegisterGameEngineRequestSchema = exports.file_game_engine_registry = void 0;
7
+ const codegenv2_1 = require("@bufbuild/protobuf/codegenv2");
8
+ /**
9
+ * Describes the file game-engine-registry.proto.
10
+ */
11
+ exports.file_game_engine_registry =
12
+ /*@__PURE__*/
13
+ (0, codegenv2_1.fileDesc)('ChpnYW1lLWVuZ2luZS1yZWdpc3RyeS5wcm90bxIUZ2FtZV9lbmdpbmVfcmVnaXN0cnkilgEKGVJlZ2lzdGVyR2FtZUVuZ2luZVJlcXVlc3QSEQoJZ2FtZV9jb2RlGAEgASgJEg8KB3ZlcnNpb24YAiABKAkSCwoDcnRwGAMgASgBEhEKCWdhbWVfdHlwZRgEIAEoCRIQCghncnBjX3VybBgFIAEoCRIRCglnYW1lX25hbWUYBiABKAkSEAoIcHJvdmlkZXIYByABKAkiTwoaUmVnaXN0ZXJHYW1lRW5naW5lUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCBIUCgdtZXNzYWdlGAIgASgJSACIAQFCCgoIX21lc3NhZ2UylAEKGUdhbWVFbmdpbmVSZWdpc3RyeVNlcnZpY2USdwoSUmVnaXN0ZXJHYW1lRW5naW5lEi8uZ2FtZV9lbmdpbmVfcmVnaXN0cnkuUmVnaXN0ZXJHYW1lRW5naW5lUmVxdWVzdBowLmdhbWVfZW5naW5lX3JlZ2lzdHJ5LlJlZ2lzdGVyR2FtZUVuZ2luZVJlc3BvbnNlYgZwcm90bzM');
14
+ /**
15
+ * Describes the message game_engine_registry.RegisterGameEngineRequest.
16
+ * Use `create(RegisterGameEngineRequestSchema)` to create a new message.
17
+ */
18
+ exports.RegisterGameEngineRequestSchema =
19
+ /*@__PURE__*/
20
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine_registry, 0);
21
+ /**
22
+ * Describes the message game_engine_registry.RegisterGameEngineResponse.
23
+ * Use `create(RegisterGameEngineResponseSchema)` to create a new message.
24
+ */
25
+ exports.RegisterGameEngineResponseSchema =
26
+ /*@__PURE__*/
27
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine_registry, 1);
28
+ /**
29
+ * @generated from service game_engine_registry.GameEngineRegistryService
30
+ */
31
+ exports.GameEngineRegistryService = (0, codegenv2_1.serviceDesc)(exports.file_game_engine_registry, 0);
@@ -0,0 +1,171 @@
1
+ import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2';
2
+ import type { JsonObject, Message } from '@bufbuild/protobuf';
3
+ /**
4
+ * Describes the file game-engine.proto.
5
+ */
6
+ export declare const file_game_engine: GenFile;
7
+ /**
8
+ * @generated from message game_engine.ProcessCommandRequest
9
+ */
10
+ export type ProcessCommandRequest = Message<'game_engine.ProcessCommandRequest'> & {
11
+ /**
12
+ * @generated from field: optional google.protobuf.Struct public_state = 1;
13
+ */
14
+ publicState?: JsonObject;
15
+ /**
16
+ * @generated from field: optional google.protobuf.Struct private_state = 2;
17
+ */
18
+ privateState?: JsonObject;
19
+ /**
20
+ * @generated from field: optional game_engine.GameActionCommand command = 3;
21
+ */
22
+ command?: GameActionCommand;
23
+ };
24
+ /**
25
+ * Describes the message game_engine.ProcessCommandRequest.
26
+ * Use `create(ProcessCommandRequestSchema)` to create a new message.
27
+ */
28
+ export declare const ProcessCommandRequestSchema: GenMessage<ProcessCommandRequest>;
29
+ /**
30
+ * @generated from message game_engine.GameActionCommand
31
+ */
32
+ export type GameActionCommand = Message<'game_engine.GameActionCommand'> & {
33
+ /**
34
+ * @generated from field: string id = 1;
35
+ */
36
+ id: string;
37
+ /**
38
+ * @generated from field: string type = 2;
39
+ */
40
+ type: string;
41
+ /**
42
+ * @generated from field: optional google.protobuf.Struct payload = 3;
43
+ */
44
+ payload?: JsonObject;
45
+ };
46
+ /**
47
+ * Describes the message game_engine.GameActionCommand.
48
+ * Use `create(GameActionCommandSchema)` to create a new message.
49
+ */
50
+ export declare const GameActionCommandSchema: GenMessage<GameActionCommand>;
51
+ /**
52
+ * @generated from message game_engine.RngOutcomeRecord
53
+ */
54
+ export type RngOutcomeRecord = Message<'game_engine.RngOutcomeRecord'> & {
55
+ /**
56
+ * @generated from field: double result = 1;
57
+ */
58
+ result: number;
59
+ /**
60
+ * @generated from field: string seed = 2;
61
+ */
62
+ seed: string;
63
+ /**
64
+ * @generated from field: double min = 3;
65
+ */
66
+ min: number;
67
+ /**
68
+ * @generated from field: double max = 4;
69
+ */
70
+ max: number;
71
+ };
72
+ /**
73
+ * Describes the message game_engine.RngOutcomeRecord.
74
+ * Use `create(RngOutcomeRecordSchema)` to create a new message.
75
+ */
76
+ export declare const RngOutcomeRecordSchema: GenMessage<RngOutcomeRecord>;
77
+ /**
78
+ * @generated from message game_engine.ProcessCommandResponse
79
+ */
80
+ export type ProcessCommandResponse = Message<'game_engine.ProcessCommandResponse'> & {
81
+ /**
82
+ * @generated from field: bool success = 1;
83
+ */
84
+ success: boolean;
85
+ /**
86
+ * @generated from field: optional google.protobuf.Struct public_state = 2;
87
+ */
88
+ publicState?: JsonObject;
89
+ /**
90
+ * @generated from field: optional google.protobuf.Struct private_state = 3;
91
+ */
92
+ privateState?: JsonObject;
93
+ /**
94
+ * @generated from field: optional google.protobuf.Struct outcome = 4;
95
+ */
96
+ outcome?: JsonObject;
97
+ /**
98
+ * @generated from field: optional string message = 5;
99
+ */
100
+ message?: string;
101
+ /**
102
+ * optional, key = actionId
103
+ *
104
+ * @generated from field: map<string, game_engine.RngOutcomeRecord> rng_outcome = 6;
105
+ */
106
+ rngOutcome: {
107
+ [key: string]: RngOutcomeRecord;
108
+ };
109
+ };
110
+ /**
111
+ * Describes the message game_engine.ProcessCommandResponse.
112
+ * Use `create(ProcessCommandResponseSchema)` to create a new message.
113
+ */
114
+ export declare const ProcessCommandResponseSchema: GenMessage<ProcessCommandResponse>;
115
+ /**
116
+ * @generated from message game_engine.GetGameEngineInfoRequest
117
+ */
118
+ export type GetGameEngineInfoRequest = Message<'game_engine.GetGameEngineInfoRequest'> & {};
119
+ /**
120
+ * Describes the message game_engine.GetGameEngineInfoRequest.
121
+ * Use `create(GetGameEngineInfoRequestSchema)` to create a new message.
122
+ */
123
+ export declare const GetGameEngineInfoRequestSchema: GenMessage<GetGameEngineInfoRequest>;
124
+ /**
125
+ * @generated from message game_engine.GetGameEngineInfoResponse
126
+ */
127
+ export type GetGameEngineInfoResponse = Message<'game_engine.GetGameEngineInfoResponse'> & {
128
+ /**
129
+ * @generated from field: string game_code = 1;
130
+ */
131
+ gameCode: string;
132
+ /**
133
+ * @generated from field: string version = 2;
134
+ */
135
+ version: string;
136
+ /**
137
+ * @generated from field: double rtp = 3;
138
+ */
139
+ rtp: number;
140
+ /**
141
+ * @generated from field: string game_type = 4;
142
+ */
143
+ gameType: string;
144
+ };
145
+ /**
146
+ * Describes the message game_engine.GetGameEngineInfoResponse.
147
+ * Use `create(GetGameEngineInfoResponseSchema)` to create a new message.
148
+ */
149
+ export declare const GetGameEngineInfoResponseSchema: GenMessage<GetGameEngineInfoResponse>;
150
+ /**
151
+ * @generated from service game_engine.GameEngineService
152
+ */
153
+ export declare const GameEngineService: GenService<{
154
+ /**
155
+ * @generated from rpc game_engine.GameEngineService.ProcessCommand
156
+ */
157
+ processCommand: {
158
+ methodKind: 'unary';
159
+ input: typeof ProcessCommandRequestSchema;
160
+ output: typeof ProcessCommandResponseSchema;
161
+ };
162
+ /**
163
+ * @generated from rpc game_engine.GameEngineService.GetGameEngineInfo
164
+ */
165
+ getGameEngineInfo: {
166
+ methodKind: 'unary';
167
+ input: typeof GetGameEngineInfoRequestSchema;
168
+ output: typeof GetGameEngineInfoResponseSchema;
169
+ };
170
+ }>;
171
+ //# sourceMappingURL=game-engine_pb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-engine_pb.d.ts","sourceRoot":"","sources":["../../src/generated/game-engine_pb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ // @generated by protoc-gen-es v2.10.0 with parameter "target=ts"
3
+ // @generated from file game-engine.proto (package game_engine, syntax proto3)
4
+ /* eslint-disable */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GameEngineService = exports.GetGameEngineInfoResponseSchema = exports.GetGameEngineInfoRequestSchema = exports.ProcessCommandResponseSchema = exports.RngOutcomeRecordSchema = exports.GameActionCommandSchema = exports.ProcessCommandRequestSchema = exports.file_game_engine = void 0;
7
+ const codegenv2_1 = require("@bufbuild/protobuf/codegenv2");
8
+ const wkt_1 = require("@bufbuild/protobuf/wkt");
9
+ /**
10
+ * Describes the file game-engine.proto.
11
+ */
12
+ exports.file_game_engine =
13
+ /*@__PURE__*/
14
+ (0, codegenv2_1.fileDesc)('ChFnYW1lLWVuZ2luZS5wcm90bxILZ2FtZV9lbmdpbmUi5QEKFVByb2Nlc3NDb21tYW5kUmVxdWVzdBIyCgxwdWJsaWNfc3RhdGUYASABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQESMwoNcHJpdmF0ZV9zdGF0ZRgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAYgBARI0Cgdjb21tYW5kGAMgASgLMh4uZ2FtZV9lbmdpbmUuR2FtZUFjdGlvbkNvbW1hbmRIAogBAUIPCg1fcHVibGljX3N0YXRlQhAKDl9wcml2YXRlX3N0YXRlQgoKCF9jb21tYW5kImgKEUdhbWVBY3Rpb25Db21tYW5kEgoKAmlkGAEgASgJEgwKBHR5cGUYAiABKAkSLQoHcGF5bG9hZBgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIKCghfcGF5bG9hZCJKChBSbmdPdXRjb21lUmVjb3JkEg4KBnJlc3VsdBgBIAEoARIMCgRzZWVkGAIgASgJEgsKA21pbhgDIAEoARILCgNtYXgYBCABKAEirgMKFlByb2Nlc3NDb21tYW5kUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCBIyCgxwdWJsaWNfc3RhdGUYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQESMwoNcHJpdmF0ZV9zdGF0ZRgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAYgBARItCgdvdXRjb21lGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgCiAEBEhQKB21lc3NhZ2UYBSABKAlIA4gBARJICgtybmdfb3V0Y29tZRgGIAMoCzIzLmdhbWVfZW5naW5lLlByb2Nlc3NDb21tYW5kUmVzcG9uc2UuUm5nT3V0Y29tZUVudHJ5GlAKD1JuZ091dGNvbWVFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS5nYW1lX2VuZ2luZS5SbmdPdXRjb21lUmVjb3JkOgI4AUIPCg1fcHVibGljX3N0YXRlQhAKDl9wcml2YXRlX3N0YXRlQgoKCF9vdXRjb21lQgoKCF9tZXNzYWdlIhoKGEdldEdhbWVFbmdpbmVJbmZvUmVxdWVzdCJfChlHZXRHYW1lRW5naW5lSW5mb1Jlc3BvbnNlEhEKCWdhbWVfY29kZRgBIAEoCRIPCgd2ZXJzaW9uGAIgASgJEgsKA3J0cBgDIAEoARIRCglnYW1lX3R5cGUYBCABKAky0gEKEUdhbWVFbmdpbmVTZXJ2aWNlElkKDlByb2Nlc3NDb21tYW5kEiIuZ2FtZV9lbmdpbmUuUHJvY2Vzc0NvbW1hbmRSZXF1ZXN0GiMuZ2FtZV9lbmdpbmUuUHJvY2Vzc0NvbW1hbmRSZXNwb25zZRJiChFHZXRHYW1lRW5naW5lSW5mbxIlLmdhbWVfZW5naW5lLkdldEdhbWVFbmdpbmVJbmZvUmVxdWVzdBomLmdhbWVfZW5naW5lLkdldEdhbWVFbmdpbmVJbmZvUmVzcG9uc2ViBnByb3RvMw', [wkt_1.file_google_protobuf_struct]);
15
+ /**
16
+ * Describes the message game_engine.ProcessCommandRequest.
17
+ * Use `create(ProcessCommandRequestSchema)` to create a new message.
18
+ */
19
+ exports.ProcessCommandRequestSchema =
20
+ /*@__PURE__*/
21
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine, 0);
22
+ /**
23
+ * Describes the message game_engine.GameActionCommand.
24
+ * Use `create(GameActionCommandSchema)` to create a new message.
25
+ */
26
+ exports.GameActionCommandSchema =
27
+ /*@__PURE__*/
28
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine, 1);
29
+ /**
30
+ * Describes the message game_engine.RngOutcomeRecord.
31
+ * Use `create(RngOutcomeRecordSchema)` to create a new message.
32
+ */
33
+ exports.RngOutcomeRecordSchema =
34
+ /*@__PURE__*/
35
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine, 2);
36
+ /**
37
+ * Describes the message game_engine.ProcessCommandResponse.
38
+ * Use `create(ProcessCommandResponseSchema)` to create a new message.
39
+ */
40
+ exports.ProcessCommandResponseSchema =
41
+ /*@__PURE__*/
42
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine, 3);
43
+ /**
44
+ * Describes the message game_engine.GetGameEngineInfoRequest.
45
+ * Use `create(GetGameEngineInfoRequestSchema)` to create a new message.
46
+ */
47
+ exports.GetGameEngineInfoRequestSchema =
48
+ /*@__PURE__*/
49
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine, 4);
50
+ /**
51
+ * Describes the message game_engine.GetGameEngineInfoResponse.
52
+ * Use `create(GetGameEngineInfoResponseSchema)` to create a new message.
53
+ */
54
+ exports.GetGameEngineInfoResponseSchema =
55
+ /*@__PURE__*/
56
+ (0, codegenv2_1.messageDesc)(exports.file_game_engine, 5);
57
+ /**
58
+ * @generated from service game_engine.GameEngineService
59
+ */
60
+ exports.GameEngineService = (0, codegenv2_1.serviceDesc)(exports.file_game_engine, 0);
@@ -0,0 +1,7 @@
1
+ import { GameEngineGrpcInAdapter } from './game-engine.grpc.in-adapter';
2
+ /**
3
+ * Creates Connect router middleware for GameEngineService.
4
+ * This replaces NestJS built-in gRPC transport with Connect-compatible server.
5
+ */
6
+ export declare function createConnectRouter(gameEngineAdapter: GameEngineGrpcInAdapter): import("@connectrpc/connect-node/dist/cjs/node-universal-handler").NodeHandlerFn;
7
+ //# sourceMappingURL=connect-router.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-router.middleware.d.ts","sourceRoot":"","sources":["../../src/grpc/connect-router.middleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,iBAAiB,EAAE,uBAAuB,oFAS7E"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createConnectRouter = createConnectRouter;
4
+ const connect_node_1 = require("@connectrpc/connect-node");
5
+ const game_engine_pb_1 = require("../generated/game-engine_pb");
6
+ /**
7
+ * Creates Connect router middleware for GameEngineService.
8
+ * This replaces NestJS built-in gRPC transport with Connect-compatible server.
9
+ */
10
+ function createConnectRouter(gameEngineAdapter) {
11
+ return (0, connect_node_1.connectNodeAdapter)({
12
+ routes: router => {
13
+ router.service(game_engine_pb_1.GameEngineService, {
14
+ processCommand: gameEngineAdapter.processCommand.bind(gameEngineAdapter),
15
+ getGameEngineInfo: gameEngineAdapter.getGameEngineInfo.bind(gameEngineAdapter),
16
+ });
17
+ },
18
+ });
19
+ }