@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,69 @@
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 AwsSecretsProvider_1;
14
+ import { SecretsManager } from '@aws-sdk/client-secrets-manager';
15
+ import { Inject, Injectable } from '@nestjs/common';
16
+ import { ConfigService } from '@nestjs/config';
17
+ import { Logger } from '../logger/logger';
18
+ let AwsSecretsProvider = AwsSecretsProvider_1 = class AwsSecretsProvider {
19
+ constructor(configService) {
20
+ this.configService = configService;
21
+ this.logger = new Logger(AwsSecretsProvider_1.name);
22
+ this.secretsCache = new Map();
23
+ this.secretsManager = new SecretsManager({
24
+ region: this.configService.get('AWS_REGION') || 'eu-central-1',
25
+ });
26
+ }
27
+ async register() {
28
+ await this.loadSecrets();
29
+ }
30
+ async loadSecrets() {
31
+ const envName = this.configService.get('AWS_SECRET_ID');
32
+ if (!envName) {
33
+ throw new Error(`AWS_SECRET_ID is not defined in environment variables`);
34
+ }
35
+ try {
36
+ this.logger.log(`Fetching secrets from AWS Secrets Manager: ${envName}`);
37
+ const response = await this.secretsManager.getSecretValue({
38
+ SecretId: envName,
39
+ });
40
+ if (!response.SecretString) {
41
+ throw new Error(`Secret ${envName} found but has no value.`);
42
+ }
43
+ const secretsObject = JSON.parse(response.SecretString);
44
+ if (typeof secretsObject !== 'object' || secretsObject === null) {
45
+ throw new Error(`Secret ${envName} is not a valid JSON object.`);
46
+ }
47
+ Object.entries(secretsObject).forEach(([key, value]) => {
48
+ this.secretsCache.set(key, String(value));
49
+ });
50
+ this.logger.log(`Successfully loaded secrets from AWS Secrets Manager.`);
51
+ }
52
+ catch (error) {
53
+ this.logger.error(`Failed to retrieve secrets from AWS: ${error.message}`);
54
+ throw error;
55
+ }
56
+ }
57
+ async get(secretName) {
58
+ if (!this.secretsCache.has(secretName)) {
59
+ throw new Error(`Secret ${secretName} not found in cache.`);
60
+ }
61
+ return this.secretsCache.get(secretName);
62
+ }
63
+ };
64
+ AwsSecretsProvider = AwsSecretsProvider_1 = __decorate([
65
+ Injectable(),
66
+ __param(0, Inject(ConfigService)),
67
+ __metadata("design:paramtypes", [ConfigService])
68
+ ], AwsSecretsProvider);
69
+ export { AwsSecretsProvider };
@@ -0,0 +1 @@
1
+ export const SECRETS_PROVIDER = Symbol('SecretsProvider');
@@ -0,0 +1,39 @@
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 { Injectable } from '@nestjs/common';
11
+ import * as dotenv from 'dotenv';
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ let LocalSecretsProvider = class LocalSecretsProvider {
15
+ constructor() {
16
+ this.secretsCache = new Map();
17
+ this.loadSecrets();
18
+ }
19
+ loadSecrets() {
20
+ const envPath = path.resolve(process.cwd(), '.secrets.env');
21
+ if (fs.existsSync(envPath)) {
22
+ const parsed = dotenv.parse(fs.readFileSync(envPath));
23
+ Object.entries(parsed).forEach(([key, value]) => {
24
+ this.secretsCache.set(key, value);
25
+ });
26
+ }
27
+ }
28
+ async get(secretName) {
29
+ if (this.secretsCache.has(secretName)) {
30
+ return this.secretsCache.get(secretName);
31
+ }
32
+ throw new Error(`Secret ${secretName} not found in local secrets file`);
33
+ }
34
+ };
35
+ LocalSecretsProvider = __decorate([
36
+ Injectable(),
37
+ __metadata("design:paramtypes", [])
38
+ ], LocalSecretsProvider);
39
+ export { LocalSecretsProvider };
@@ -0,0 +1,44 @@
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 SecretsModule_1;
8
+ import { Global, Module } from '@nestjs/common';
9
+ import { ConfigModule, ConfigService } from '@nestjs/config';
10
+ import { SECRETS_PROVIDER } from './secrets-provider';
11
+ import { AwsSecretsProvider } from './secrets-provider.aws';
12
+ import { LocalSecretsProvider } from './secrets-provider.local';
13
+ let SecretsModule = SecretsModule_1 = class SecretsModule {
14
+ static register() {
15
+ return {
16
+ module: SecretsModule_1,
17
+ providers: [
18
+ {
19
+ provide: SECRETS_PROVIDER,
20
+ useFactory: async (configService) => {
21
+ const useLocalSecrets = configService.get('LOCAL_SECRETS') === 'true';
22
+ if (useLocalSecrets) {
23
+ return new LocalSecretsProvider();
24
+ }
25
+ else {
26
+ const awsSecretsProvider = new AwsSecretsProvider(configService);
27
+ await awsSecretsProvider.register();
28
+ return awsSecretsProvider;
29
+ }
30
+ },
31
+ inject: [ConfigService],
32
+ },
33
+ ],
34
+ exports: [SECRETS_PROVIDER],
35
+ };
36
+ }
37
+ };
38
+ SecretsModule = SecretsModule_1 = __decorate([
39
+ Global(),
40
+ Module({
41
+ imports: [ConfigModule],
42
+ })
43
+ ], SecretsModule);
44
+ export { SecretsModule };
@@ -0,0 +1,28 @@
1
+ // @generated by protoc-gen-es v2.10.0 with parameter "target=ts"
2
+ // @generated from file game-engine-registry.proto (package game_engine_registry, syntax proto3)
3
+ /* eslint-disable */
4
+ import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2';
5
+ /**
6
+ * Describes the file game-engine-registry.proto.
7
+ */
8
+ export const file_game_engine_registry =
9
+ /*@__PURE__*/
10
+ fileDesc('ChpnYW1lLWVuZ2luZS1yZWdpc3RyeS5wcm90bxIUZ2FtZV9lbmdpbmVfcmVnaXN0cnkilgEKGVJlZ2lzdGVyR2FtZUVuZ2luZVJlcXVlc3QSEQoJZ2FtZV9jb2RlGAEgASgJEg8KB3ZlcnNpb24YAiABKAkSCwoDcnRwGAMgASgBEhEKCWdhbWVfdHlwZRgEIAEoCRIQCghncnBjX3VybBgFIAEoCRIRCglnYW1lX25hbWUYBiABKAkSEAoIcHJvdmlkZXIYByABKAkiTwoaUmVnaXN0ZXJHYW1lRW5naW5lUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCBIUCgdtZXNzYWdlGAIgASgJSACIAQFCCgoIX21lc3NhZ2UylAEKGUdhbWVFbmdpbmVSZWdpc3RyeVNlcnZpY2USdwoSUmVnaXN0ZXJHYW1lRW5naW5lEi8uZ2FtZV9lbmdpbmVfcmVnaXN0cnkuUmVnaXN0ZXJHYW1lRW5naW5lUmVxdWVzdBowLmdhbWVfZW5naW5lX3JlZ2lzdHJ5LlJlZ2lzdGVyR2FtZUVuZ2luZVJlc3BvbnNlYgZwcm90bzM');
11
+ /**
12
+ * Describes the message game_engine_registry.RegisterGameEngineRequest.
13
+ * Use `create(RegisterGameEngineRequestSchema)` to create a new message.
14
+ */
15
+ export const RegisterGameEngineRequestSchema =
16
+ /*@__PURE__*/
17
+ messageDesc(file_game_engine_registry, 0);
18
+ /**
19
+ * Describes the message game_engine_registry.RegisterGameEngineResponse.
20
+ * Use `create(RegisterGameEngineResponseSchema)` to create a new message.
21
+ */
22
+ export const RegisterGameEngineResponseSchema =
23
+ /*@__PURE__*/
24
+ messageDesc(file_game_engine_registry, 1);
25
+ /**
26
+ * @generated from service game_engine_registry.GameEngineRegistryService
27
+ */
28
+ export const GameEngineRegistryService = /*@__PURE__*/ serviceDesc(file_game_engine_registry, 0);
@@ -0,0 +1,57 @@
1
+ // @generated by protoc-gen-es v2.10.0 with parameter "target=ts"
2
+ // @generated from file game-engine.proto (package game_engine, syntax proto3)
3
+ /* eslint-disable */
4
+ import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2';
5
+ import { file_google_protobuf_struct } from '@bufbuild/protobuf/wkt';
6
+ /**
7
+ * Describes the file game-engine.proto.
8
+ */
9
+ export const file_game_engine =
10
+ /*@__PURE__*/
11
+ fileDesc('ChFnYW1lLWVuZ2luZS5wcm90bxILZ2FtZV9lbmdpbmUi5QEKFVByb2Nlc3NDb21tYW5kUmVxdWVzdBIyCgxwdWJsaWNfc3RhdGUYASABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQESMwoNcHJpdmF0ZV9zdGF0ZRgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAYgBARI0Cgdjb21tYW5kGAMgASgLMh4uZ2FtZV9lbmdpbmUuR2FtZUFjdGlvbkNvbW1hbmRIAogBAUIPCg1fcHVibGljX3N0YXRlQhAKDl9wcml2YXRlX3N0YXRlQgoKCF9jb21tYW5kImgKEUdhbWVBY3Rpb25Db21tYW5kEgoKAmlkGAEgASgJEgwKBHR5cGUYAiABKAkSLQoHcGF5bG9hZBgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIKCghfcGF5bG9hZCJKChBSbmdPdXRjb21lUmVjb3JkEg4KBnJlc3VsdBgBIAEoARIMCgRzZWVkGAIgASgJEgsKA21pbhgDIAEoARILCgNtYXgYBCABKAEirgMKFlByb2Nlc3NDb21tYW5kUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCBIyCgxwdWJsaWNfc3RhdGUYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQESMwoNcHJpdmF0ZV9zdGF0ZRgDIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAYgBARItCgdvdXRjb21lGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgCiAEBEhQKB21lc3NhZ2UYBSABKAlIA4gBARJICgtybmdfb3V0Y29tZRgGIAMoCzIzLmdhbWVfZW5naW5lLlByb2Nlc3NDb21tYW5kUmVzcG9uc2UuUm5nT3V0Y29tZUVudHJ5GlAKD1JuZ091dGNvbWVFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS5nYW1lX2VuZ2luZS5SbmdPdXRjb21lUmVjb3JkOgI4AUIPCg1fcHVibGljX3N0YXRlQhAKDl9wcml2YXRlX3N0YXRlQgoKCF9vdXRjb21lQgoKCF9tZXNzYWdlIhoKGEdldEdhbWVFbmdpbmVJbmZvUmVxdWVzdCJfChlHZXRHYW1lRW5naW5lSW5mb1Jlc3BvbnNlEhEKCWdhbWVfY29kZRgBIAEoCRIPCgd2ZXJzaW9uGAIgASgJEgsKA3J0cBgDIAEoARIRCglnYW1lX3R5cGUYBCABKAky0gEKEUdhbWVFbmdpbmVTZXJ2aWNlElkKDlByb2Nlc3NDb21tYW5kEiIuZ2FtZV9lbmdpbmUuUHJvY2Vzc0NvbW1hbmRSZXF1ZXN0GiMuZ2FtZV9lbmdpbmUuUHJvY2Vzc0NvbW1hbmRSZXNwb25zZRJiChFHZXRHYW1lRW5naW5lSW5mbxIlLmdhbWVfZW5naW5lLkdldEdhbWVFbmdpbmVJbmZvUmVxdWVzdBomLmdhbWVfZW5naW5lLkdldEdhbWVFbmdpbmVJbmZvUmVzcG9uc2ViBnByb3RvMw', [file_google_protobuf_struct]);
12
+ /**
13
+ * Describes the message game_engine.ProcessCommandRequest.
14
+ * Use `create(ProcessCommandRequestSchema)` to create a new message.
15
+ */
16
+ export const ProcessCommandRequestSchema =
17
+ /*@__PURE__*/
18
+ messageDesc(file_game_engine, 0);
19
+ /**
20
+ * Describes the message game_engine.GameActionCommand.
21
+ * Use `create(GameActionCommandSchema)` to create a new message.
22
+ */
23
+ export const GameActionCommandSchema =
24
+ /*@__PURE__*/
25
+ messageDesc(file_game_engine, 1);
26
+ /**
27
+ * Describes the message game_engine.RngOutcomeRecord.
28
+ * Use `create(RngOutcomeRecordSchema)` to create a new message.
29
+ */
30
+ export const RngOutcomeRecordSchema =
31
+ /*@__PURE__*/
32
+ messageDesc(file_game_engine, 2);
33
+ /**
34
+ * Describes the message game_engine.ProcessCommandResponse.
35
+ * Use `create(ProcessCommandResponseSchema)` to create a new message.
36
+ */
37
+ export const ProcessCommandResponseSchema =
38
+ /*@__PURE__*/
39
+ messageDesc(file_game_engine, 3);
40
+ /**
41
+ * Describes the message game_engine.GetGameEngineInfoRequest.
42
+ * Use `create(GetGameEngineInfoRequestSchema)` to create a new message.
43
+ */
44
+ export const GetGameEngineInfoRequestSchema =
45
+ /*@__PURE__*/
46
+ messageDesc(file_game_engine, 4);
47
+ /**
48
+ * Describes the message game_engine.GetGameEngineInfoResponse.
49
+ * Use `create(GetGameEngineInfoResponseSchema)` to create a new message.
50
+ */
51
+ export const GetGameEngineInfoResponseSchema =
52
+ /*@__PURE__*/
53
+ messageDesc(file_game_engine, 5);
54
+ /**
55
+ * @generated from service game_engine.GameEngineService
56
+ */
57
+ export const GameEngineService = /*@__PURE__*/ serviceDesc(file_game_engine, 0);
@@ -0,0 +1,16 @@
1
+ import { connectNodeAdapter } from '@connectrpc/connect-node';
2
+ import { GameEngineService } from '../generated/game-engine_pb';
3
+ /**
4
+ * Creates Connect router middleware for GameEngineService.
5
+ * This replaces NestJS built-in gRPC transport with Connect-compatible server.
6
+ */
7
+ export function createConnectRouter(gameEngineAdapter) {
8
+ return connectNodeAdapter({
9
+ routes: router => {
10
+ router.service(GameEngineService, {
11
+ processCommand: gameEngineAdapter.processCommand.bind(gameEngineAdapter),
12
+ getGameEngineInfo: gameEngineAdapter.getGameEngineInfo.bind(gameEngineAdapter),
13
+ });
14
+ },
15
+ });
16
+ }
@@ -0,0 +1,109 @@
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 GameEngineGrpcInAdapter_1;
14
+ import { create } from '@bufbuild/protobuf';
15
+ import { Logger } from '../common/logger/logger';
16
+ import { GetGameEngineInfoResponseSchema, ProcessCommandResponseSchema, } from '../generated/game-engine_pb';
17
+ import { GAME_ENGINE_IN_PORT, } from '../types';
18
+ import { Inject, Injectable } from '@nestjs/common';
19
+ let GameEngineGrpcInAdapter = GameEngineGrpcInAdapter_1 = class GameEngineGrpcInAdapter {
20
+ constructor(gameEngineInPort) {
21
+ this.gameEngineInPort = gameEngineInPort;
22
+ this.logger = new Logger(GameEngineGrpcInAdapter_1.name);
23
+ }
24
+ async processCommand(request) {
25
+ try {
26
+ const command = this.extractCommandFromRequest(request);
27
+ const publicState = request.publicState ?? {};
28
+ const privateState = request.privateState ?? {};
29
+ const result = await this.gameEngineInPort.processCommand(publicState, privateState, command);
30
+ return this.createSuccessResponse(result);
31
+ }
32
+ catch (error) {
33
+ this.logger.error('Error in processCommand', error);
34
+ return this.createErrorResponse(request, error);
35
+ }
36
+ }
37
+ extractCommandFromRequest(request) {
38
+ return {
39
+ id: request.command?.id ?? '',
40
+ type: request.command?.type ?? '',
41
+ payload: request.command?.payload,
42
+ };
43
+ }
44
+ createSuccessResponse(result) {
45
+ const rngOutcome = this.convertRngOutcome(result.rngOutcome);
46
+ return create(ProcessCommandResponseSchema, {
47
+ success: result.success ?? true,
48
+ publicState: result.publicState,
49
+ privateState: result.privateState,
50
+ outcome: result.outcome,
51
+ message: result.message,
52
+ rngOutcome: rngOutcome,
53
+ });
54
+ }
55
+ createErrorResponse(request, error) {
56
+ return create(ProcessCommandResponseSchema, {
57
+ success: false,
58
+ publicState: request.publicState,
59
+ privateState: request.privateState,
60
+ message: error.errorCode ? error.message : 'Command processing failed',
61
+ });
62
+ }
63
+ /**
64
+ * Convert RNG outcome from internal format (seed: number) to wire format (seed: string).
65
+ *
66
+ * This conversion happens at the gRPC boundary to match the proto definition.
67
+ */
68
+ convertRngOutcome(rngOutcome) {
69
+ if (!rngOutcome) {
70
+ return undefined;
71
+ }
72
+ try {
73
+ return Object.fromEntries(Object.entries(rngOutcome).map(([key, value]) => [
74
+ key,
75
+ {
76
+ result: value.result,
77
+ // Convert seed to string for wire format (gRPC proto uses string)
78
+ seed: String(value.seed),
79
+ min: value.min,
80
+ max: value.max,
81
+ },
82
+ ]));
83
+ }
84
+ catch (e) {
85
+ this.logger.error('Error while formatting rngOutcome', e);
86
+ throw e;
87
+ }
88
+ }
89
+ safeStringify(obj) {
90
+ return JSON.stringify(obj, (key, value) => typeof value === 'bigint' ? value.toString() : value);
91
+ }
92
+ async getGameEngineInfo(_request) {
93
+ const gameEngineInfo = await this.gameEngineInPort.getGameEngineInfo();
94
+ // TODO: gameName and provider are available in GameEngineInfo but not in the proto schema.
95
+ // Update game-engine.proto to add these fields in GetGameEngineInfoResponse.
96
+ return create(GetGameEngineInfoResponseSchema, {
97
+ gameCode: gameEngineInfo.gameCode,
98
+ version: gameEngineInfo.version,
99
+ rtp: gameEngineInfo.rtp,
100
+ gameType: gameEngineInfo.gameType,
101
+ });
102
+ }
103
+ };
104
+ GameEngineGrpcInAdapter = GameEngineGrpcInAdapter_1 = __decorate([
105
+ Injectable(),
106
+ __param(0, Inject(GAME_ENGINE_IN_PORT)),
107
+ __metadata("design:paramtypes", [Object])
108
+ ], GameEngineGrpcInAdapter);
109
+ export { GameEngineGrpcInAdapter };
@@ -0,0 +1,2 @@
1
+ export { GameEngineGrpcInAdapter } from './game-engine.grpc.in-adapter';
2
+ export { createConnectRouter } from './connect-router.middleware';
@@ -0,0 +1 @@
1
+ export const HEALTH_IN_PORT = Symbol('HEALTH_IN_PORT');
@@ -0,0 +1 @@
1
+ export const DATABASE_HEALTH_OUT_PORT = Symbol('DATABASE_HEALTH_OUT_PORT');
@@ -0,0 +1 @@
1
+ export const SHUTDOWN_OUT_PORT = Symbol('SHUTDOWN_OUT_PORT');
@@ -0,0 +1 @@
1
+ export const SYSTEM_HEALTH_OUT_PORT = Symbol('SYSTEM_HEALTH_OUT_PORT');
@@ -0,0 +1,81 @@
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 HealthService_1;
14
+ import { Logger } from '../../../common/logger/logger';
15
+ import { SHUTDOWN_OUT_PORT } from '../ports/out/shutdown.out-port';
16
+ import { SYSTEM_HEALTH_OUT_PORT } from '../ports/out/system-health.out-port';
17
+ import { HealthCheckFailedException, } from '../../domain/health';
18
+ import { Inject, Injectable } from '@nestjs/common';
19
+ let HealthService = HealthService_1 = class HealthService {
20
+ constructor(systemHealthOutPort, shutdownOutPort) {
21
+ this.systemHealthOutPort = systemHealthOutPort;
22
+ this.shutdownOutPort = shutdownOutPort;
23
+ this.logger = new Logger(HealthService_1.name);
24
+ }
25
+ async checkHealth() {
26
+ this.logger.debug('Starting health check...');
27
+ try {
28
+ const healthChecks = await Promise.allSettled([
29
+ Promise.resolve(this.systemHealthOutPort.checkMemoryUsage()),
30
+ Promise.resolve(this.systemHealthOutPort.checkSystemResources()),
31
+ ]);
32
+ const components = [];
33
+ let overallHealth = true;
34
+ healthChecks.forEach((result, index) => {
35
+ const componentNames = ['memory', 'system'];
36
+ const componentName = componentNames[index];
37
+ if (result.status === 'fulfilled') {
38
+ components.push(result.value);
39
+ if (!result.value.healthy) {
40
+ overallHealth = false;
41
+ }
42
+ }
43
+ else {
44
+ const failedComponent = {
45
+ healthy: false,
46
+ component: componentName,
47
+ };
48
+ components.push(failedComponent);
49
+ overallHealth = false;
50
+ }
51
+ });
52
+ const isShuttingDown = this.isApplicationShuttingDown();
53
+ const healthStatus = {
54
+ overall: overallHealth,
55
+ components,
56
+ uptime: process.uptime(),
57
+ shutdownStatus: isShuttingDown ? 'draining' : 'active',
58
+ };
59
+ if (!overallHealth) {
60
+ this.logger.error('Health check failed', { components });
61
+ throw new HealthCheckFailedException('application', healthStatus);
62
+ }
63
+ this.logger.debug('Health check passed');
64
+ return healthStatus;
65
+ }
66
+ catch (error) {
67
+ this.logger.error('Health check error:', error);
68
+ throw error;
69
+ }
70
+ }
71
+ isApplicationShuttingDown() {
72
+ return this.shutdownOutPort.isShuttingDown();
73
+ }
74
+ };
75
+ HealthService = HealthService_1 = __decorate([
76
+ Injectable(),
77
+ __param(0, Inject(SYSTEM_HEALTH_OUT_PORT)),
78
+ __param(1, Inject(SHUTDOWN_OUT_PORT)),
79
+ __metadata("design:paramtypes", [Object, Object])
80
+ ], HealthService);
81
+ export { HealthService };
@@ -0,0 +1,7 @@
1
+ import { DomainException } from '../../common/error-handling/domain.exception';
2
+ import { InternalErrorCode } from '../../common/error-handling/internal-error-code';
3
+ export class HealthCheckFailedException extends DomainException {
4
+ constructor(component, details) {
5
+ super(InternalErrorCode.HEALTH_CHECK_FAILED, `Health check failed for component: ${component}`, details);
6
+ }
7
+ }
@@ -0,0 +1,65 @@
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 HealthModule_1;
14
+ import { Logger } from '../common/logger/logger';
15
+ import { SecretsModule } from '../common/secrets-provider/secrets-provider.module';
16
+ import { HEALTH_IN_PORT } from './application/ports/in/health-in.port';
17
+ import { HealthHttpInAdapter } from './infrastructure/adapters/in/health.http.in-adapter';
18
+ import { Inject, Module } from '@nestjs/common';
19
+ import { ConfigModule } from '@nestjs/config';
20
+ import { SHUTDOWN_OUT_PORT } from './application/ports/out/shutdown.out-port';
21
+ import { SYSTEM_HEALTH_OUT_PORT } from './application/ports/out/system-health.out-port';
22
+ import { HealthService } from './application/services/health.service';
23
+ import { ShutdownOutAdapter } from './infrastructure/adapters/out/shutdown/shutdown.out-adapter';
24
+ import { SystemHealthOutAdapter } from './infrastructure/adapters/out/system/system-health.out-adapter';
25
+ let HealthModule = HealthModule_1 = class HealthModule {
26
+ constructor(shutdownOutPort) {
27
+ this.shutdownOutPort = shutdownOutPort;
28
+ this.logger = new Logger(HealthModule_1.name);
29
+ }
30
+ onModuleInit() {
31
+ this.logger.log('HealthModule initialized successfully');
32
+ }
33
+ async beforeApplicationShutdown(signal) {
34
+ this.logger.log(`Received signal: ${signal}`);
35
+ if (signal === 'SIGTERM' || signal === 'SIGINT') {
36
+ await this.shutdownOutPort.startGracefulShutdown();
37
+ }
38
+ }
39
+ };
40
+ HealthModule = HealthModule_1 = __decorate([
41
+ Module({
42
+ imports: [ConfigModule, SecretsModule],
43
+ controllers: [HealthHttpInAdapter],
44
+ providers: [
45
+ SystemHealthOutAdapter,
46
+ HealthService,
47
+ {
48
+ provide: SYSTEM_HEALTH_OUT_PORT,
49
+ useClass: SystemHealthOutAdapter,
50
+ },
51
+ {
52
+ provide: SHUTDOWN_OUT_PORT,
53
+ useClass: ShutdownOutAdapter,
54
+ },
55
+ {
56
+ provide: HEALTH_IN_PORT,
57
+ useExisting: HealthService,
58
+ },
59
+ ],
60
+ exports: [],
61
+ }),
62
+ __param(0, Inject(SHUTDOWN_OUT_PORT)),
63
+ __metadata("design:paramtypes", [Object])
64
+ ], HealthModule);
65
+ export { HealthModule };
@@ -0,0 +1,15 @@
1
+ // Domain
2
+ export { HealthCheckFailedException } from './domain/health';
3
+ // Ports
4
+ export { HEALTH_IN_PORT } from './application/ports/in/health-in.port';
5
+ export { SYSTEM_HEALTH_OUT_PORT, } from './application/ports/out/system-health.out-port';
6
+ export { SHUTDOWN_OUT_PORT } from './application/ports/out/shutdown.out-port';
7
+ export { DATABASE_HEALTH_OUT_PORT, } from './application/ports/out/database-health.out-port';
8
+ // Services
9
+ export { HealthService } from './application/services/health.service';
10
+ // Infrastructure
11
+ export { HealthHttpInAdapter } from './infrastructure/adapters/in/health.http.in-adapter';
12
+ export { SystemHealthOutAdapter } from './infrastructure/adapters/out/system/system-health.out-adapter';
13
+ export { ShutdownOutAdapter } from './infrastructure/adapters/out/shutdown/shutdown.out-adapter';
14
+ // Module
15
+ export { HealthModule } from './health.module';
@@ -0,0 +1,96 @@
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
+ import { HEALTH_IN_PORT } from '../../../application/ports/in/health-in.port';
14
+ import { Controller, Get, HttpStatus, Inject, Res } from '@nestjs/common';
15
+ import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
16
+ let HealthHttpInAdapter = class HealthHttpInAdapter {
17
+ constructor(healthInPort) {
18
+ this.healthInPort = healthInPort;
19
+ }
20
+ async checkHealth() {
21
+ const healthStatus = await this.healthInPort.checkHealth();
22
+ return {
23
+ status: 'ok',
24
+ overall: healthStatus.overall,
25
+ uptime: healthStatus.uptime,
26
+ shutdownStatus: healthStatus.shutdownStatus,
27
+ components: healthStatus.components,
28
+ timestamp: new Date().toISOString(),
29
+ };
30
+ }
31
+ async readyHealth(res) {
32
+ const isReady = !this.healthInPort.isApplicationShuttingDown();
33
+ if (isReady) {
34
+ return res.status(HttpStatus.OK).send();
35
+ }
36
+ return res.status(HttpStatus.SERVICE_UNAVAILABLE).send();
37
+ }
38
+ };
39
+ __decorate([
40
+ Get('health'),
41
+ ApiOperation({ summary: 'Health check endpoint' }),
42
+ ApiResponse({
43
+ status: 200,
44
+ description: 'Application is healthy',
45
+ schema: {
46
+ type: 'object',
47
+ properties: {
48
+ status: { type: 'string', example: 'ok' },
49
+ overall: { type: 'boolean' },
50
+ uptime: { type: 'number' },
51
+ shutdownStatus: { type: 'string', example: 'running' },
52
+ components: {
53
+ type: 'array',
54
+ items: {
55
+ type: 'object',
56
+ properties: {
57
+ healthy: { type: 'boolean' },
58
+ component: { type: 'string' },
59
+ },
60
+ },
61
+ },
62
+ timestamp: { type: 'string', format: 'date-time' },
63
+ },
64
+ },
65
+ }),
66
+ ApiResponse({
67
+ status: 500,
68
+ description: 'Application is unhealthy or shutting down',
69
+ }),
70
+ __metadata("design:type", Function),
71
+ __metadata("design:paramtypes", []),
72
+ __metadata("design:returntype", Promise)
73
+ ], HealthHttpInAdapter.prototype, "checkHealth", null);
74
+ __decorate([
75
+ Get('ready'),
76
+ ApiOperation({ summary: 'Application readiness to take traffic endpoint' }),
77
+ ApiResponse({
78
+ status: 200,
79
+ description: 'Application is ready',
80
+ }),
81
+ ApiResponse({
82
+ status: 503,
83
+ description: 'Application is shutting down',
84
+ }),
85
+ __param(0, Res()),
86
+ __metadata("design:type", Function),
87
+ __metadata("design:paramtypes", [Object]),
88
+ __metadata("design:returntype", Promise)
89
+ ], HealthHttpInAdapter.prototype, "readyHealth", null);
90
+ HealthHttpInAdapter = __decorate([
91
+ ApiTags('Application - health'),
92
+ Controller(''),
93
+ __param(0, Inject(HEALTH_IN_PORT)),
94
+ __metadata("design:paramtypes", [Object])
95
+ ], HealthHttpInAdapter);
96
+ export { HealthHttpInAdapter };