@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.
- package/dist/bootstrap/index.d.ts +15 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +156 -0
- package/dist/common/api-docs/setup-documentation.d.ts +3 -0
- package/dist/common/api-docs/setup-documentation.d.ts.map +1 -0
- package/dist/common/api-docs/setup-documentation.js +27 -0
- package/dist/common/application-bootstrap-options.interface.d.ts +4 -0
- package/dist/common/application-bootstrap-options.interface.d.ts.map +1 -0
- package/dist/common/application-bootstrap-options.interface.js +2 -0
- package/dist/common/error-handling/all-exceptions.filter.d.ts +22 -0
- package/dist/common/error-handling/all-exceptions.filter.d.ts.map +1 -0
- package/dist/common/error-handling/all-exceptions.filter.js +131 -0
- package/dist/common/error-handling/domain.exception.d.ts +8 -0
- package/dist/common/error-handling/domain.exception.d.ts.map +1 -0
- package/dist/common/error-handling/domain.exception.js +14 -0
- package/dist/common/error-handling/error-code-mapper.d.ts +6 -0
- package/dist/common/error-handling/error-code-mapper.d.ts.map +1 -0
- package/dist/common/error-handling/error-code-mapper.js +93 -0
- package/dist/common/error-handling/internal-error-code.d.ts +67 -0
- package/dist/common/error-handling/internal-error-code.d.ts.map +1 -0
- package/dist/common/error-handling/internal-error-code.js +80 -0
- package/dist/common/index.d.ts +21 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +51 -0
- package/dist/common/logger/logger.d.ts +24 -0
- package/dist/common/logger/logger.d.ts.map +1 -0
- package/dist/common/logger/logger.js +137 -0
- package/dist/common/logger/logger.module.d.ts +3 -0
- package/dist/common/logger/logger.module.d.ts.map +1 -0
- package/dist/common/logger/logger.module.js +19 -0
- package/dist/common/logger/logging.middleware.d.ts +8 -0
- package/dist/common/logger/logging.middleware.d.ts.map +1 -0
- package/dist/common/logger/logging.middleware.js +44 -0
- package/dist/common/metrics/database-metrics.service.d.ts +8 -0
- package/dist/common/metrics/database-metrics.service.d.ts.map +1 -0
- package/dist/common/metrics/database-metrics.service.js +39 -0
- package/dist/common/metrics/helpers/metrics.helpers.d.ts +5 -0
- package/dist/common/metrics/helpers/metrics.helpers.d.ts.map +1 -0
- package/dist/common/metrics/helpers/metrics.helpers.js +38 -0
- package/dist/common/metrics/metrics.module.d.ts +3 -0
- package/dist/common/metrics/metrics.module.d.ts.map +1 -0
- package/dist/common/metrics/metrics.module.js +207 -0
- package/dist/common/metrics/metrics.port.d.ts +22 -0
- package/dist/common/metrics/metrics.port.d.ts.map +1 -0
- package/dist/common/metrics/metrics.port.js +4 -0
- package/dist/common/metrics/prometheus.service.d.ts +25 -0
- package/dist/common/metrics/prometheus.service.d.ts.map +1 -0
- package/dist/common/metrics/prometheus.service.js +105 -0
- package/dist/common/retry/retry-policies.d.ts +8 -0
- package/dist/common/retry/retry-policies.d.ts.map +1 -0
- package/dist/common/retry/retry-policies.js +43 -0
- package/dist/common/retry/retry-policy.d.ts +25 -0
- package/dist/common/retry/retry-policy.d.ts.map +1 -0
- package/dist/common/retry/retry-policy.js +65 -0
- package/dist/common/secrets-provider/secrets-provider.aws.d.ts +13 -0
- package/dist/common/secrets-provider/secrets-provider.aws.d.ts.map +1 -0
- package/dist/common/secrets-provider/secrets-provider.aws.js +72 -0
- package/dist/common/secrets-provider/secrets-provider.d.ts +5 -0
- package/dist/common/secrets-provider/secrets-provider.d.ts.map +1 -0
- package/dist/common/secrets-provider/secrets-provider.js +4 -0
- package/dist/common/secrets-provider/secrets-provider.local.d.ts +8 -0
- package/dist/common/secrets-provider/secrets-provider.local.d.ts.map +1 -0
- package/dist/common/secrets-provider/secrets-provider.local.js +75 -0
- package/dist/common/secrets-provider/secrets-provider.module.d.ts +5 -0
- package/dist/common/secrets-provider/secrets-provider.module.d.ts.map +1 -0
- package/dist/common/secrets-provider/secrets-provider.module.js +47 -0
- package/dist/esm/bootstrap/index.js +120 -0
- package/dist/esm/common/api-docs/setup-documentation.js +23 -0
- package/dist/esm/common/application-bootstrap-options.interface.js +1 -0
- package/dist/esm/common/error-handling/all-exceptions.filter.js +128 -0
- package/dist/esm/common/error-handling/domain.exception.js +10 -0
- package/dist/esm/common/error-handling/error-code-mapper.js +89 -0
- package/dist/esm/common/error-handling/internal-error-code.js +77 -0
- package/dist/esm/common/index.js +25 -0
- package/dist/esm/common/logger/logger.js +133 -0
- package/dist/esm/common/logger/logger.module.js +16 -0
- package/dist/esm/common/logger/logging.middleware.js +41 -0
- package/dist/esm/common/metrics/database-metrics.service.js +36 -0
- package/dist/esm/common/metrics/helpers/metrics.helpers.js +32 -0
- package/dist/esm/common/metrics/metrics.module.js +204 -0
- package/dist/esm/common/metrics/metrics.port.js +1 -0
- package/dist/esm/common/metrics/prometheus.service.js +102 -0
- package/dist/esm/common/retry/retry-policies.js +39 -0
- package/dist/esm/common/retry/retry-policy.js +61 -0
- package/dist/esm/common/secrets-provider/secrets-provider.aws.js +69 -0
- package/dist/esm/common/secrets-provider/secrets-provider.js +1 -0
- package/dist/esm/common/secrets-provider/secrets-provider.local.js +39 -0
- package/dist/esm/common/secrets-provider/secrets-provider.module.js +44 -0
- package/dist/esm/generated/game-engine-registry_pb.js +28 -0
- package/dist/esm/generated/game-engine_pb.js +57 -0
- package/dist/esm/grpc/connect-router.middleware.js +16 -0
- package/dist/esm/grpc/game-engine.grpc.in-adapter.js +109 -0
- package/dist/esm/grpc/index.js +2 -0
- package/dist/esm/health/application/ports/in/health-in.port.js +1 -0
- package/dist/esm/health/application/ports/out/database-health.out-port.js +1 -0
- package/dist/esm/health/application/ports/out/shutdown.out-port.js +1 -0
- package/dist/esm/health/application/ports/out/system-health.out-port.js +1 -0
- package/dist/esm/health/application/services/health.service.js +81 -0
- package/dist/esm/health/domain/health.js +7 -0
- package/dist/esm/health/health.module.js +65 -0
- package/dist/esm/health/index.js +15 -0
- package/dist/esm/health/infrastructure/adapters/in/health.http.in-adapter.js +96 -0
- package/dist/esm/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.js +45 -0
- package/dist/esm/health/infrastructure/adapters/out/system/system-health.out-adapter.js +43 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/registration/adapters/game-engine-registry.grpc.out-adapter.js +59 -0
- package/dist/esm/registration/index.js +3 -0
- package/dist/esm/registration/ports/game-engine-registry.out-port.js +1 -0
- package/dist/esm/registration/services/game-engine-auto-register.service.js +78 -0
- package/dist/esm/types.js +8 -0
- package/dist/generated/game-engine-registry_pb.d.ts +76 -0
- package/dist/generated/game-engine-registry_pb.d.ts.map +1 -0
- package/dist/generated/game-engine-registry_pb.js +31 -0
- package/dist/generated/game-engine_pb.d.ts +171 -0
- package/dist/generated/game-engine_pb.d.ts.map +1 -0
- package/dist/generated/game-engine_pb.js +60 -0
- package/dist/grpc/connect-router.middleware.d.ts +7 -0
- package/dist/grpc/connect-router.middleware.d.ts.map +1 -0
- package/dist/grpc/connect-router.middleware.js +19 -0
- package/dist/grpc/game-engine.grpc.in-adapter.d.ts +21 -0
- package/dist/grpc/game-engine.grpc.in-adapter.d.ts.map +1 -0
- package/dist/grpc/game-engine.grpc.in-adapter.js +112 -0
- package/dist/grpc/index.d.ts +3 -0
- package/dist/grpc/index.d.ts.map +1 -0
- package/dist/grpc/index.js +7 -0
- package/dist/health/application/ports/in/health-in.port.d.ts +7 -0
- package/dist/health/application/ports/in/health-in.port.d.ts.map +1 -0
- package/dist/health/application/ports/in/health-in.port.js +4 -0
- package/dist/health/application/ports/out/database-health.out-port.d.ts +6 -0
- package/dist/health/application/ports/out/database-health.out-port.d.ts.map +1 -0
- package/dist/health/application/ports/out/database-health.out-port.js +4 -0
- package/dist/health/application/ports/out/shutdown.out-port.d.ts +6 -0
- package/dist/health/application/ports/out/shutdown.out-port.d.ts.map +1 -0
- package/dist/health/application/ports/out/shutdown.out-port.js +4 -0
- package/dist/health/application/ports/out/system-health.out-port.d.ts +7 -0
- package/dist/health/application/ports/out/system-health.out-port.d.ts.map +1 -0
- package/dist/health/application/ports/out/system-health.out-port.js +4 -0
- package/dist/health/application/services/health.service.d.ts +13 -0
- package/dist/health/application/services/health.service.d.ts.map +1 -0
- package/dist/health/application/services/health.service.js +84 -0
- package/dist/health/domain/health.d.ts +15 -0
- package/dist/health/domain/health.d.ts.map +1 -0
- package/dist/health/domain/health.js +11 -0
- package/dist/health/health.module.d.ts +10 -0
- package/dist/health/health.module.d.ts.map +1 -0
- package/dist/health/health.module.js +68 -0
- package/dist/health/index.d.ts +11 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +28 -0
- package/dist/health/infrastructure/adapters/in/health.http.in-adapter.d.ts +16 -0
- package/dist/health/infrastructure/adapters/in/health.http.in-adapter.d.ts.map +1 -0
- package/dist/health/infrastructure/adapters/in/health.http.in-adapter.js +99 -0
- package/dist/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.d.ts +13 -0
- package/dist/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.d.ts.map +1 -0
- package/dist/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.js +48 -0
- package/dist/health/infrastructure/adapters/out/system/system-health.out-adapter.d.ts +12 -0
- package/dist/health/infrastructure/adapters/out/system/system-health.out-adapter.d.ts.map +1 -0
- package/dist/health/infrastructure/adapters/out/system/system-health.out-adapter.js +46 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/registration/adapters/game-engine-registry.grpc.out-adapter.d.ts +12 -0
- package/dist/registration/adapters/game-engine-registry.grpc.out-adapter.d.ts.map +1 -0
- package/dist/registration/adapters/game-engine-registry.grpc.out-adapter.js +62 -0
- package/dist/registration/index.d.ts +4 -0
- package/dist/registration/index.d.ts.map +1 -0
- package/dist/registration/index.js +9 -0
- package/dist/registration/ports/game-engine-registry.out-port.d.ts +9 -0
- package/dist/registration/ports/game-engine-registry.out-port.d.ts.map +1 -0
- package/dist/registration/ports/game-engine-registry.out-port.js +4 -0
- package/dist/registration/services/game-engine-auto-register.service.d.ts +14 -0
- package/dist/registration/services/game-engine-auto-register.service.d.ts.map +1 -0
- package/dist/registration/services/game-engine-auto-register.service.js +81 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/package.json +159 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.out-adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/health/infrastructure/adapters/out/shutdown/shutdown.out-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBACa,kBAAmB,YAAW,eAAe;IAI5C,OAAO,CAAC,QAAQ,CAAC,aAAa;IAH1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,YAAY,CAAS;gBAEA,aAAa,EAAE,aAAa;IAEzD,cAAc,IAAI,OAAO;IAInB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;YAe9B,OAAO;IAKrB,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var ShutdownOutAdapter_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ShutdownOutAdapter = void 0;
|
|
14
|
+
const logger_1 = require("../../../../../common/logger/logger");
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const config_1 = require("@nestjs/config");
|
|
17
|
+
let ShutdownOutAdapter = ShutdownOutAdapter_1 = class ShutdownOutAdapter {
|
|
18
|
+
constructor(configService) {
|
|
19
|
+
this.configService = configService;
|
|
20
|
+
this.logger = new logger_1.Logger(ShutdownOutAdapter_1.name);
|
|
21
|
+
this.shuttingDown = false;
|
|
22
|
+
}
|
|
23
|
+
isShuttingDown() {
|
|
24
|
+
return this.shuttingDown;
|
|
25
|
+
}
|
|
26
|
+
async startGracefulShutdown() {
|
|
27
|
+
if (this.shuttingDown) {
|
|
28
|
+
this.logger.warn('Graceful shutdown already in progress, ignoring duplicate SIGTERM');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.shuttingDown = true;
|
|
32
|
+
this.logger.warn(`SIGTERM received - starting graceful shutdown sequence\n` +
|
|
33
|
+
`Health endpoint now returns HTTP 503 (draining state)`);
|
|
34
|
+
void this.cleanup();
|
|
35
|
+
}
|
|
36
|
+
async cleanup() {
|
|
37
|
+
this.logger.log('Starting application resources cleanup...');
|
|
38
|
+
this.logger.log('Application resources cleanup completed');
|
|
39
|
+
}
|
|
40
|
+
delay(ms) {
|
|
41
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
exports.ShutdownOutAdapter = ShutdownOutAdapter;
|
|
45
|
+
exports.ShutdownOutAdapter = ShutdownOutAdapter = ShutdownOutAdapter_1 = __decorate([
|
|
46
|
+
(0, common_1.Injectable)(),
|
|
47
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
48
|
+
], ShutdownOutAdapter);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SystemHealthOutPort } from '../../../../application/ports/out/system-health.out-port';
|
|
2
|
+
import { HealthStatus } from '../../../../domain/health';
|
|
3
|
+
import { ConfigService } from '@nestjs/config';
|
|
4
|
+
export declare class SystemHealthOutAdapter implements SystemHealthOutPort {
|
|
5
|
+
private readonly configService;
|
|
6
|
+
private readonly maxHeapUsagePercentage;
|
|
7
|
+
private readonly maxLoadAvg;
|
|
8
|
+
constructor(configService: ConfigService);
|
|
9
|
+
checkMemoryUsage(): HealthStatus;
|
|
10
|
+
checkSystemResources(): HealthStatus;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=system-health.out-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-health.out-adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/health/infrastructure/adapters/out/system/system-health.out-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0DAA0D,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBACa,sBAAuB,YAAW,mBAAmB;IAIpD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAH1C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEP,aAAa,EAAE,aAAa;IAQzD,gBAAgB,IAAI,YAAY;IAchC,oBAAoB,IAAI,YAAY;CASrC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SystemHealthOutAdapter = void 0;
|
|
13
|
+
const node_os_1 = require("node:os");
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const config_1 = require("@nestjs/config");
|
|
16
|
+
let SystemHealthOutAdapter = class SystemHealthOutAdapter {
|
|
17
|
+
constructor(configService) {
|
|
18
|
+
this.configService = configService;
|
|
19
|
+
this.maxHeapUsagePercentage = Number(this.configService.get('HEALTH_MAX_HEAP_USAGE_PERCENTAGE', 98));
|
|
20
|
+
this.maxLoadAvg = Number(this.configService.get('HEALTH_MAX_MEMORY_USAGE_PART', 10));
|
|
21
|
+
}
|
|
22
|
+
checkMemoryUsage() {
|
|
23
|
+
const memUsage = process.memoryUsage();
|
|
24
|
+
const maxHeapSize = memUsage.heapTotal;
|
|
25
|
+
const usedHeapSize = memUsage.heapUsed;
|
|
26
|
+
const heapUsagePercent = (usedHeapSize / maxHeapSize) * 100;
|
|
27
|
+
const healthy = heapUsagePercent < this.maxHeapUsagePercentage;
|
|
28
|
+
return {
|
|
29
|
+
healthy,
|
|
30
|
+
component: 'memory',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
checkSystemResources() {
|
|
34
|
+
const loadAvg = (0, node_os_1.loadavg)() ? (0, node_os_1.loadavg)() : [0, 0, 0];
|
|
35
|
+
const healthy = loadAvg[0] < this.maxLoadAvg;
|
|
36
|
+
return {
|
|
37
|
+
healthy,
|
|
38
|
+
component: 'system',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.SystemHealthOutAdapter = SystemHealthOutAdapter;
|
|
43
|
+
exports.SystemHealthOutAdapter = SystemHealthOutAdapter = __decorate([
|
|
44
|
+
(0, common_1.Injectable)(),
|
|
45
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
46
|
+
], SystemHealthOutAdapter);
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { GAME_ENGINE, GameEngine, GameEngineInfo, GameActionCommand, CommandProcessingResult, RngOutcome, RngOutcomeRecord, GAME_ENGINE_IN_PORT, GameEngineInPort, } from './types';
|
|
2
|
+
export * from './common';
|
|
3
|
+
export * from './health';
|
|
4
|
+
export * from './registration';
|
|
5
|
+
export * from './grpc';
|
|
6
|
+
export { createGameEngineApp, GameEngineAppOptions } from './bootstrap';
|
|
7
|
+
export { GameEngineService, ProcessCommandRequest, ProcessCommandRequestSchema, ProcessCommandResponse, ProcessCommandResponseSchema, GetGameEngineInfoRequest, GetGameEngineInfoRequestSchema, GetGameEngineInfoResponse, GetGameEngineInfoResponseSchema, } from './generated/game-engine_pb';
|
|
8
|
+
export { GameEngineRegistryService, RegisterGameEngineRequest, RegisterGameEngineRequestSchema, RegisterGameEngineResponse, RegisterGameEngineResponseSchema, } from './generated/game-engine-registry_pb';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,QAAQ,CAAC;AAGvB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,+BAA+B,EAC/B,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,qCAAqC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.RegisterGameEngineResponseSchema = exports.RegisterGameEngineRequestSchema = exports.GameEngineRegistryService = exports.GetGameEngineInfoResponseSchema = exports.GetGameEngineInfoRequestSchema = exports.ProcessCommandResponseSchema = exports.ProcessCommandRequestSchema = exports.GameEngineService = exports.createGameEngineApp = exports.GAME_ENGINE_IN_PORT = exports.GAME_ENGINE = void 0;
|
|
18
|
+
// Core types
|
|
19
|
+
var types_1 = require("./types");
|
|
20
|
+
Object.defineProperty(exports, "GAME_ENGINE", { enumerable: true, get: function () { return types_1.GAME_ENGINE; } });
|
|
21
|
+
Object.defineProperty(exports, "GAME_ENGINE_IN_PORT", { enumerable: true, get: function () { return types_1.GAME_ENGINE_IN_PORT; } });
|
|
22
|
+
// Common module
|
|
23
|
+
__exportStar(require("./common"), exports);
|
|
24
|
+
// Health module
|
|
25
|
+
__exportStar(require("./health"), exports);
|
|
26
|
+
// Registration module
|
|
27
|
+
__exportStar(require("./registration"), exports);
|
|
28
|
+
// gRPC module
|
|
29
|
+
__exportStar(require("./grpc"), exports);
|
|
30
|
+
// Bootstrap
|
|
31
|
+
var bootstrap_1 = require("./bootstrap");
|
|
32
|
+
Object.defineProperty(exports, "createGameEngineApp", { enumerable: true, get: function () { return bootstrap_1.createGameEngineApp; } });
|
|
33
|
+
// Generated proto types (re-exported for convenience)
|
|
34
|
+
var game_engine_pb_1 = require("./generated/game-engine_pb");
|
|
35
|
+
Object.defineProperty(exports, "GameEngineService", { enumerable: true, get: function () { return game_engine_pb_1.GameEngineService; } });
|
|
36
|
+
Object.defineProperty(exports, "ProcessCommandRequestSchema", { enumerable: true, get: function () { return game_engine_pb_1.ProcessCommandRequestSchema; } });
|
|
37
|
+
Object.defineProperty(exports, "ProcessCommandResponseSchema", { enumerable: true, get: function () { return game_engine_pb_1.ProcessCommandResponseSchema; } });
|
|
38
|
+
Object.defineProperty(exports, "GetGameEngineInfoRequestSchema", { enumerable: true, get: function () { return game_engine_pb_1.GetGameEngineInfoRequestSchema; } });
|
|
39
|
+
Object.defineProperty(exports, "GetGameEngineInfoResponseSchema", { enumerable: true, get: function () { return game_engine_pb_1.GetGameEngineInfoResponseSchema; } });
|
|
40
|
+
var game_engine_registry_pb_1 = require("./generated/game-engine-registry_pb");
|
|
41
|
+
Object.defineProperty(exports, "GameEngineRegistryService", { enumerable: true, get: function () { return game_engine_registry_pb_1.GameEngineRegistryService; } });
|
|
42
|
+
Object.defineProperty(exports, "RegisterGameEngineRequestSchema", { enumerable: true, get: function () { return game_engine_registry_pb_1.RegisterGameEngineRequestSchema; } });
|
|
43
|
+
Object.defineProperty(exports, "RegisterGameEngineResponseSchema", { enumerable: true, get: function () { return game_engine_registry_pb_1.RegisterGameEngineResponseSchema; } });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GameEngineRegistryOutPort, GameEngineRegistryRegisterGameEngineInput } from '../ports/game-engine-registry.out-port';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
|
+
export declare class GameEngineRegistryGrpcOutAdapter implements GameEngineRegistryOutPort {
|
|
4
|
+
private readonly configService;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
private readonly client;
|
|
7
|
+
constructor(configService: ConfigService);
|
|
8
|
+
registerGameEngine(input: GameEngineRegistryRegisterGameEngineInput): Promise<{
|
|
9
|
+
success: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=game-engine-registry.grpc.out-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-engine-registry.grpc.out-adapter.d.ts","sourceRoot":"","sources":["../../../src/registration/adapters/game-engine-registry.grpc.out-adapter.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,yBAAyB,EACzB,yCAAyC,EAC1C,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBACa,gCAAiC,YAAW,yBAAyB;IAIpE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAH1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAErC,aAAa,EAAE,aAAa;IAyBnD,kBAAkB,CACtB,KAAK,EAAE,yCAAyC,GAC/C,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAejC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.GameEngineRegistryGrpcOutAdapter = void 0;
|
|
13
|
+
const protobuf_1 = require("@bufbuild/protobuf");
|
|
14
|
+
const logger_1 = require("../../common/logger/logger");
|
|
15
|
+
const connect_1 = require("@connectrpc/connect");
|
|
16
|
+
const connect_node_1 = require("@connectrpc/connect-node");
|
|
17
|
+
const game_engine_registry_pb_1 = require("../../generated/game-engine-registry_pb");
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
19
|
+
const config_1 = require("@nestjs/config");
|
|
20
|
+
let GameEngineRegistryGrpcOutAdapter = class GameEngineRegistryGrpcOutAdapter {
|
|
21
|
+
constructor(configService) {
|
|
22
|
+
this.configService = configService;
|
|
23
|
+
this.logger = new logger_1.Logger('GameEngineRegistryGrpcOutAdapter');
|
|
24
|
+
const gameEngineRegistryUrl = this.configService.get('GAME_ENGINE_REGISTRY_GRPC_URL');
|
|
25
|
+
if (!gameEngineRegistryUrl) {
|
|
26
|
+
throw new Error('GAME_ENGINE_REGISTRY_GRPC_URL is not configured');
|
|
27
|
+
}
|
|
28
|
+
const transport = (0, connect_node_1.createConnectTransport)({
|
|
29
|
+
baseUrl: gameEngineRegistryUrl,
|
|
30
|
+
httpVersion: '2',
|
|
31
|
+
});
|
|
32
|
+
this.logger.log(`Connecting to Game Engine Registry at ${gameEngineRegistryUrl}`);
|
|
33
|
+
try {
|
|
34
|
+
this.client = (0, connect_1.createClient)(game_engine_registry_pb_1.GameEngineRegistryService, transport);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
this.logger.error(`Failed to connect to Game Engine Registry at ${gameEngineRegistryUrl}`, {
|
|
38
|
+
error,
|
|
39
|
+
stack: error.stack,
|
|
40
|
+
});
|
|
41
|
+
throw new Error(`Failed to connect to Game Engine Registry at ${gameEngineRegistryUrl}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async registerGameEngine(input) {
|
|
45
|
+
const request = (0, protobuf_1.create)(game_engine_registry_pb_1.RegisterGameEngineRequestSchema, {
|
|
46
|
+
gameCode: input.gameCode,
|
|
47
|
+
version: input.version,
|
|
48
|
+
rtp: input.rtp,
|
|
49
|
+
gameType: input.gameType,
|
|
50
|
+
grpcUrl: input.grpcUrl,
|
|
51
|
+
gameName: input.gameName,
|
|
52
|
+
provider: input.provider,
|
|
53
|
+
});
|
|
54
|
+
const response = await this.client.registerGameEngine(request);
|
|
55
|
+
return { success: response.success };
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.GameEngineRegistryGrpcOutAdapter = GameEngineRegistryGrpcOutAdapter;
|
|
59
|
+
exports.GameEngineRegistryGrpcOutAdapter = GameEngineRegistryGrpcOutAdapter = __decorate([
|
|
60
|
+
(0, common_1.Injectable)(),
|
|
61
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
62
|
+
], GameEngineRegistryGrpcOutAdapter);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { GAME_ENGINE_REGISTRY_OUT_PORT, GameEngineRegistryOutPort, GameEngineRegistryRegisterGameEngineInput, GameEngineRegistryRegisterGameEngineOutput, } 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';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yCAAyC,EACzC,0CAA0C,GAC3C,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,gCAAgC,EAAE,MAAM,kDAAkD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GameEngineRegistryGrpcOutAdapter = exports.GameEngineAutoRegisterService = exports.GAME_ENGINE_REGISTRY_OUT_PORT = void 0;
|
|
4
|
+
var game_engine_registry_out_port_1 = require("./ports/game-engine-registry.out-port");
|
|
5
|
+
Object.defineProperty(exports, "GAME_ENGINE_REGISTRY_OUT_PORT", { enumerable: true, get: function () { return game_engine_registry_out_port_1.GAME_ENGINE_REGISTRY_OUT_PORT; } });
|
|
6
|
+
var game_engine_auto_register_service_1 = require("./services/game-engine-auto-register.service");
|
|
7
|
+
Object.defineProperty(exports, "GameEngineAutoRegisterService", { enumerable: true, get: function () { return game_engine_auto_register_service_1.GameEngineAutoRegisterService; } });
|
|
8
|
+
var game_engine_registry_grpc_out_adapter_1 = require("./adapters/game-engine-registry.grpc.out-adapter");
|
|
9
|
+
Object.defineProperty(exports, "GameEngineRegistryGrpcOutAdapter", { enumerable: true, get: function () { return game_engine_registry_grpc_out_adapter_1.GameEngineRegistryGrpcOutAdapter; } });
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Message } from '@bufbuild/protobuf';
|
|
2
|
+
import { RegisterGameEngineRequest, RegisterGameEngineResponse } from '../../generated/game-engine-registry_pb';
|
|
3
|
+
export declare const GAME_ENGINE_REGISTRY_OUT_PORT: unique symbol;
|
|
4
|
+
export interface GameEngineRegistryOutPort {
|
|
5
|
+
registerGameEngine(input: GameEngineRegistryRegisterGameEngineInput): Promise<GameEngineRegistryRegisterGameEngineOutput>;
|
|
6
|
+
}
|
|
7
|
+
export type GameEngineRegistryRegisterGameEngineInput = Omit<RegisterGameEngineRequest, keyof Message>;
|
|
8
|
+
export type GameEngineRegistryRegisterGameEngineOutput = Omit<RegisterGameEngineResponse, keyof Message>;
|
|
9
|
+
//# sourceMappingURL=game-engine-registry.out-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-engine-registry.out-port.d.ts","sourceRoot":"","sources":["../../../src/registration/ports/game-engine-registry.out-port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AAEjD,eAAO,MAAM,6BAA6B,eAA0C,CAAC;AAErF,MAAM,WAAW,yBAAyB;IACxC,kBAAkB,CAChB,KAAK,EAAE,yCAAyC,GAC/C,OAAO,CAAC,0CAA0C,CAAC,CAAC;CACxD;AAED,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAC1D,yBAAyB,EACzB,MAAM,OAAO,CACd,CAAC;AAEF,MAAM,MAAM,0CAA0C,GAAG,IAAI,CAC3D,0BAA0B,EAC1B,MAAM,OAAO,CACd,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GameEngineRegistryOutPort } from '../ports/game-engine-registry.out-port';
|
|
2
|
+
import { GameEngine } from '../../types';
|
|
3
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
4
|
+
import { ConfigService } from '@nestjs/config';
|
|
5
|
+
export declare class GameEngineAutoRegisterService implements OnModuleInit {
|
|
6
|
+
private readonly gameEngineRegistryOutPort;
|
|
7
|
+
private readonly gameEngine;
|
|
8
|
+
private readonly configService;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
constructor(gameEngineRegistryOutPort: GameEngineRegistryOutPort, gameEngine: GameEngine, configService: ConfigService);
|
|
11
|
+
onModuleInit(): Promise<void>;
|
|
12
|
+
register(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=game-engine-auto-register.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game-engine-auto-register.service.d.ts","sourceRoot":"","sources":["../../../src/registration/services/game-engine-auto-register.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBACa,6BAA8B,YAAW,YAAY;IAK9D,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAE1C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAPhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0D;gBAI9D,yBAAyB,EAAE,yBAAyB,EAEpD,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa;IAGzC,YAAY;IAUZ,QAAQ;CA6Cf"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var GameEngineAutoRegisterService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.GameEngineAutoRegisterService = void 0;
|
|
17
|
+
const retry_policies_1 = require("../../common/retry/retry-policies");
|
|
18
|
+
const retry_policy_1 = require("../../common/retry/retry-policy");
|
|
19
|
+
const game_engine_registry_out_port_1 = require("../ports/game-engine-registry.out-port");
|
|
20
|
+
const types_1 = require("../../types");
|
|
21
|
+
const common_1 = require("@nestjs/common");
|
|
22
|
+
const config_1 = require("@nestjs/config");
|
|
23
|
+
let GameEngineAutoRegisterService = GameEngineAutoRegisterService_1 = class GameEngineAutoRegisterService {
|
|
24
|
+
constructor(gameEngineRegistryOutPort, gameEngine, configService) {
|
|
25
|
+
this.gameEngineRegistryOutPort = gameEngineRegistryOutPort;
|
|
26
|
+
this.gameEngine = gameEngine;
|
|
27
|
+
this.configService = configService;
|
|
28
|
+
this.logger = new common_1.Logger(GameEngineAutoRegisterService_1.name);
|
|
29
|
+
}
|
|
30
|
+
async onModuleInit() {
|
|
31
|
+
// do not await here to not block module initialization
|
|
32
|
+
this.register().catch(error => {
|
|
33
|
+
this.logger.error('Auto-registration failed', {
|
|
34
|
+
error,
|
|
35
|
+
stack: error.stack,
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async register() {
|
|
40
|
+
const gameEngineInfo = this.gameEngine.getGameEngineInfo();
|
|
41
|
+
const serviceHost = this.configService.get('HOST_NAME');
|
|
42
|
+
if (!serviceHost) {
|
|
43
|
+
this.logger.error('HOST_NAME is not configured. Skipping auto-registration.');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const retryPolicy = new retry_policy_1.RetryPolicy({
|
|
47
|
+
operationName: 'GameEngineAutoRegister.register',
|
|
48
|
+
maxAttempts: 5,
|
|
49
|
+
delayMs: 1000,
|
|
50
|
+
backoffMultiplier: 2,
|
|
51
|
+
maxDelayMs: 30000,
|
|
52
|
+
retryableErrors: retry_policies_1.HTTP_RETRYABLE_ERRORS,
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
const result = await retryPolicy.execute(() => this.gameEngineRegistryOutPort.registerGameEngine({
|
|
56
|
+
...gameEngineInfo,
|
|
57
|
+
grpcUrl: `http://${serviceHost}:${this.configService.get('GRPC_PORT', 50051)}`,
|
|
58
|
+
}));
|
|
59
|
+
if (result.success) {
|
|
60
|
+
this.logger.log(`Successfully registered game engine ${gameEngineInfo.gameCode} v${gameEngineInfo.version} at ${serviceHost}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.logger.error(`Failed to register game engine ${gameEngineInfo.gameCode} v${gameEngineInfo.version} at ${serviceHost}. Reason: ${result.message || 'unknown'}.`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
this.logger.error(`Failed to register game engine ${gameEngineInfo.gameCode} v${gameEngineInfo.version} at ${serviceHost}`, {
|
|
68
|
+
error,
|
|
69
|
+
stack: error?.stack,
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
exports.GameEngineAutoRegisterService = GameEngineAutoRegisterService;
|
|
76
|
+
exports.GameEngineAutoRegisterService = GameEngineAutoRegisterService = GameEngineAutoRegisterService_1 = __decorate([
|
|
77
|
+
(0, common_1.Injectable)(),
|
|
78
|
+
__param(0, (0, common_1.Inject)(game_engine_registry_out_port_1.GAME_ENGINE_REGISTRY_OUT_PORT)),
|
|
79
|
+
__param(1, (0, common_1.Inject)(types_1.GAME_ENGINE)),
|
|
80
|
+
__metadata("design:paramtypes", [Object, Object, config_1.ConfigService])
|
|
81
|
+
], GameEngineAutoRegisterService);
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
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 declare const GAME_ENGINE: unique symbol;
|
|
8
|
+
export interface GameEngineInfo {
|
|
9
|
+
gameCode: string;
|
|
10
|
+
version: string;
|
|
11
|
+
rtp: number;
|
|
12
|
+
gameType: string;
|
|
13
|
+
gameName: string;
|
|
14
|
+
provider: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Record of a single RNG call (internal type).
|
|
18
|
+
*
|
|
19
|
+
* Uses `seed: number` to match the game engine and RNG service.
|
|
20
|
+
* Converted to string at gRPC boundary for wire format.
|
|
21
|
+
*/
|
|
22
|
+
export interface RngOutcomeRecord {
|
|
23
|
+
result: number;
|
|
24
|
+
seed: number;
|
|
25
|
+
min: number;
|
|
26
|
+
max: number;
|
|
27
|
+
}
|
|
28
|
+
export type RngOutcome = {
|
|
29
|
+
[actionId: string]: RngOutcomeRecord;
|
|
30
|
+
};
|
|
31
|
+
export interface CommandProcessingResult<TPublicState = any, TPrivateState = any, TOutcome = any> {
|
|
32
|
+
success: boolean;
|
|
33
|
+
publicState: TPublicState;
|
|
34
|
+
privateState: TPrivateState;
|
|
35
|
+
outcome?: TOutcome;
|
|
36
|
+
message?: string;
|
|
37
|
+
rngOutcome?: RngOutcome;
|
|
38
|
+
}
|
|
39
|
+
export interface GameActionCommand<TPayload = any> {
|
|
40
|
+
id: string;
|
|
41
|
+
type: string;
|
|
42
|
+
payload?: TPayload;
|
|
43
|
+
}
|
|
44
|
+
export interface GameEngine<TPublicState = any, TPrivateState = any, TOutcome = any> {
|
|
45
|
+
processCommand(publicState: TPublicState, privateState: TPrivateState, command: GameActionCommand): Promise<CommandProcessingResult<TPublicState, TPrivateState, TOutcome>>;
|
|
46
|
+
getGameEngineInfo(): GameEngineInfo;
|
|
47
|
+
}
|
|
48
|
+
export declare const GAME_ENGINE_IN_PORT: unique symbol;
|
|
49
|
+
export interface GameEngineInPort {
|
|
50
|
+
processCommand(publicState: any, privateState: any, command: GameActionCommand): Promise<CommandProcessingResult<any, any, any>>;
|
|
51
|
+
getGameEngineInfo(): Promise<GameEngineInfo>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,WAAW,eAAwB,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,uBAAuB,CAAC,YAAY,GAAG,GAAG,EAAE,aAAa,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG;IAC9F,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,YAAY,CAAC;IAC1B,YAAY,EAAE,aAAa,CAAC;IAC5B,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,GAAG;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,UAAU,CAAC,YAAY,GAAG,GAAG,EAAE,aAAa,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG;IACjF,cAAc,CACZ,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,uBAAuB,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3E,iBAAiB,IAAI,cAAc,CAAC;CACrC;AAED,eAAO,MAAM,mBAAmB,eAAgC,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CACZ,WAAW,EAAE,GAAG,EAChB,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;CAC9C"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core types for game engine services.
|
|
4
|
+
*
|
|
5
|
+
* These types define the contract between the SDK infrastructure
|
|
6
|
+
* and game-specific engine implementations.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.GAME_ENGINE_IN_PORT = exports.GAME_ENGINE = void 0;
|
|
10
|
+
exports.GAME_ENGINE = Symbol('GAME_ENGINE');
|
|
11
|
+
exports.GAME_ENGINE_IN_PORT = Symbol('GAME_ENGINE_IN_PORT');
|
package/package.json
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@omnitronix/game-engine-sdk",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Shared NestJS infrastructure SDK for Omnitronix game engine services",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/esm/index.js"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"./common": {
|
|
20
|
+
"import": {
|
|
21
|
+
"types": "./dist/common/index.d.ts",
|
|
22
|
+
"default": "./dist/esm/common/index.js"
|
|
23
|
+
},
|
|
24
|
+
"require": {
|
|
25
|
+
"types": "./dist/common/index.d.ts",
|
|
26
|
+
"default": "./dist/common/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"./health": {
|
|
30
|
+
"import": {
|
|
31
|
+
"types": "./dist/health/index.d.ts",
|
|
32
|
+
"default": "./dist/esm/health/index.js"
|
|
33
|
+
},
|
|
34
|
+
"require": {
|
|
35
|
+
"types": "./dist/health/index.d.ts",
|
|
36
|
+
"default": "./dist/health/index.js"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"./registration": {
|
|
40
|
+
"import": {
|
|
41
|
+
"types": "./dist/registration/index.d.ts",
|
|
42
|
+
"default": "./dist/esm/registration/index.js"
|
|
43
|
+
},
|
|
44
|
+
"require": {
|
|
45
|
+
"types": "./dist/registration/index.d.ts",
|
|
46
|
+
"default": "./dist/registration/index.js"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"./grpc": {
|
|
50
|
+
"import": {
|
|
51
|
+
"types": "./dist/grpc/index.d.ts",
|
|
52
|
+
"default": "./dist/esm/grpc/index.js"
|
|
53
|
+
},
|
|
54
|
+
"require": {
|
|
55
|
+
"types": "./dist/grpc/index.d.ts",
|
|
56
|
+
"default": "./dist/grpc/index.js"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"./bootstrap": {
|
|
60
|
+
"import": {
|
|
61
|
+
"types": "./dist/bootstrap/index.d.ts",
|
|
62
|
+
"default": "./dist/esm/bootstrap/index.js"
|
|
63
|
+
},
|
|
64
|
+
"require": {
|
|
65
|
+
"types": "./dist/bootstrap/index.d.ts",
|
|
66
|
+
"default": "./dist/bootstrap/index.js"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"scripts": {
|
|
71
|
+
"build": "npm run clean && tsc && tsc -p tsconfig.esm.json",
|
|
72
|
+
"proto:generate": "mkdir -p src/generated && find src -name '*.proto' | while read proto; do npx protoc --plugin=node_modules/.bin/protoc-gen-es --es_out=target=ts:src/generated --proto_path=$(dirname \"$proto\") \"$proto\"; done",
|
|
73
|
+
"test": "jest",
|
|
74
|
+
"test:watch": "jest --watch",
|
|
75
|
+
"test:cov": "jest --coverage",
|
|
76
|
+
"lint": "eslint src/",
|
|
77
|
+
"format": "prettier --write src/",
|
|
78
|
+
"format:check": "prettier --check src/",
|
|
79
|
+
"clean": "rm -rf dist",
|
|
80
|
+
"prepublishOnly": "npm run lint && npm run build && npm test"
|
|
81
|
+
},
|
|
82
|
+
"repository": {
|
|
83
|
+
"type": "git",
|
|
84
|
+
"url": "https://github.com/omnitronix/game-engine-sdk.git"
|
|
85
|
+
},
|
|
86
|
+
"publishConfig": {
|
|
87
|
+
"access": "public",
|
|
88
|
+
"registry": "https://registry.npmjs.org"
|
|
89
|
+
},
|
|
90
|
+
"keywords": [
|
|
91
|
+
"omnitronix",
|
|
92
|
+
"game-engine",
|
|
93
|
+
"sdk",
|
|
94
|
+
"nestjs",
|
|
95
|
+
"grpc"
|
|
96
|
+
],
|
|
97
|
+
"author": "Omnitronix",
|
|
98
|
+
"license": "PROPRIETARY",
|
|
99
|
+
"sideEffects": false,
|
|
100
|
+
"engines": {
|
|
101
|
+
"node": ">=18.0.0"
|
|
102
|
+
},
|
|
103
|
+
"files": [
|
|
104
|
+
"dist",
|
|
105
|
+
"README.md"
|
|
106
|
+
],
|
|
107
|
+
"dependencies": {
|
|
108
|
+
"@bufbuild/protobuf": "^2.10.0",
|
|
109
|
+
"@connectrpc/connect": "^2.1.0",
|
|
110
|
+
"@connectrpc/connect-node": "^2.1.0",
|
|
111
|
+
"@willsoto/nestjs-prometheus": "^6.0.2",
|
|
112
|
+
"dotenv": "^16.4.0",
|
|
113
|
+
"prom-client": "^15.1.3",
|
|
114
|
+
"winston": "^3.17.0"
|
|
115
|
+
},
|
|
116
|
+
"peerDependencies": {
|
|
117
|
+
"@aws-sdk/client-secrets-manager": "^3.0.0",
|
|
118
|
+
"@nestjs/common": "^11.0.0",
|
|
119
|
+
"@nestjs/config": "^4.0.0",
|
|
120
|
+
"@nestjs/core": "^11.0.0",
|
|
121
|
+
"@nestjs/platform-express": "^11.0.0",
|
|
122
|
+
"@nestjs/swagger": "^11.0.0",
|
|
123
|
+
"@omnitronix/game-engine-contract": "^1.0.0",
|
|
124
|
+
"reflect-metadata": "^0.2.0",
|
|
125
|
+
"rxjs": "^7.0.0"
|
|
126
|
+
},
|
|
127
|
+
"peerDependenciesMeta": {
|
|
128
|
+
"@aws-sdk/client-secrets-manager": {
|
|
129
|
+
"optional": true
|
|
130
|
+
},
|
|
131
|
+
"@nestjs/swagger": {
|
|
132
|
+
"optional": true
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"devDependencies": {
|
|
136
|
+
"@aws-sdk/client-secrets-manager": "^3.758.0",
|
|
137
|
+
"@bufbuild/protoc-gen-es": "^2.10.0",
|
|
138
|
+
"@nestjs/common": "^11.0.0",
|
|
139
|
+
"@nestjs/config": "^4.0.2",
|
|
140
|
+
"@nestjs/core": "^11.0.0",
|
|
141
|
+
"@nestjs/platform-express": "^11.0.0",
|
|
142
|
+
"@nestjs/swagger": "^11.0.6",
|
|
143
|
+
"@nestjs/testing": "^11.0.9",
|
|
144
|
+
"@omnitronix/game-engine-contract": "^1.0.0",
|
|
145
|
+
"@types/express": "^5.0.0",
|
|
146
|
+
"@types/jest": "^29.5.14",
|
|
147
|
+
"@types/node": "^20.17.10",
|
|
148
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
149
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
150
|
+
"eslint": "^9.39.2",
|
|
151
|
+
"jest": "^29.7.0",
|
|
152
|
+
"prettier": "^3.5.3",
|
|
153
|
+
"reflect-metadata": "^0.2.2",
|
|
154
|
+
"rxjs": "^7.8.2",
|
|
155
|
+
"ts-jest": "^29.2.5",
|
|
156
|
+
"ts-node": "^10.9.2",
|
|
157
|
+
"typescript": "^5.7.2"
|
|
158
|
+
}
|
|
159
|
+
}
|