@ludeo/cloud-common 1.2.174-beta-yahil-3 → 1.2.174-beta-yahil-4

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 (53) hide show
  1. package/dist/tsconfig.tsbuildinfo +1 -1
  2. package/dist/v4/types/mqtt/commands/base.d.ts +6 -0
  3. package/dist/v4/types/mqtt/commands/base.js +28 -0
  4. package/dist/v4/types/mqtt/commands/base.js.map +1 -0
  5. package/dist/v4/types/mqtt/commands/export-logs.command.d.ts +8 -0
  6. package/dist/v4/types/mqtt/commands/export-logs.command.js +32 -0
  7. package/dist/v4/types/mqtt/commands/export-logs.command.js.map +1 -0
  8. package/dist/v4/types/mqtt/commands/index.d.ts +6 -0
  9. package/dist/v4/types/mqtt/commands/index.js +23 -0
  10. package/dist/v4/types/mqtt/commands/index.js.map +1 -0
  11. package/dist/v4/types/mqtt/commands/init.command.d.ts +10 -0
  12. package/dist/v4/types/mqtt/commands/init.command.js +38 -0
  13. package/dist/v4/types/mqtt/commands/init.command.js.map +1 -0
  14. package/dist/v4/types/mqtt/commands/shutdown.command.d.ts +8 -0
  15. package/dist/v4/types/mqtt/commands/shutdown.command.js +32 -0
  16. package/dist/v4/types/mqtt/commands/shutdown.command.js.map +1 -0
  17. package/dist/v4/types/mqtt/commands/start-game.command.d.ts +10 -0
  18. package/dist/v4/types/mqtt/commands/start-game.command.js +32 -0
  19. package/dist/v4/types/mqtt/commands/start-game.command.js.map +1 -0
  20. package/dist/v4/types/mqtt/commands/terminate-game.command.d.ts +9 -0
  21. package/dist/v4/types/mqtt/commands/terminate-game.command.js +37 -0
  22. package/dist/v4/types/mqtt/commands/terminate-game.command.js.map +1 -0
  23. package/dist/v4/types/mqtt/constants.d.ts +3 -0
  24. package/dist/v4/types/mqtt/constants.js +7 -0
  25. package/dist/v4/types/mqtt/constants.js.map +1 -0
  26. package/dist/v4/types/mqtt/index.d.ts +3 -1
  27. package/dist/v4/types/mqtt/index.js +3 -1
  28. package/dist/v4/types/mqtt/index.js.map +1 -1
  29. package/dist/v4/types/mqtt/status-updates/index.d.ts +1 -0
  30. package/dist/v4/types/mqtt/status-updates/index.js +18 -0
  31. package/dist/v4/types/mqtt/status-updates/index.js.map +1 -0
  32. package/dist/v4/types/mqtt/status-updates/resource-update.d.ts +14 -0
  33. package/dist/v4/types/mqtt/status-updates/resource-update.js +54 -0
  34. package/dist/v4/types/mqtt/status-updates/resource-update.js.map +1 -0
  35. package/dist/v4/types/site-controller/types.d.ts +2 -2
  36. package/dist/v4/types/site-controller/types.js +2 -2
  37. package/package.json +1 -1
  38. package/src/v4/types/mqtt/commands/base.ts +13 -0
  39. package/src/v4/types/mqtt/commands/export-logs.command.ts +21 -0
  40. package/src/v4/types/mqtt/commands/index.ts +7 -0
  41. package/src/v4/types/mqtt/commands/init.command.ts +27 -0
  42. package/src/v4/types/mqtt/commands/shutdown.command.ts +21 -0
  43. package/src/v4/types/mqtt/commands/start-game.command.ts +24 -0
  44. package/src/v4/types/mqtt/commands/terminate-game.command.ts +24 -0
  45. package/src/v4/types/mqtt/constants.ts +7 -0
  46. package/src/v4/types/mqtt/index.ts +3 -4
  47. package/src/v4/types/mqtt/status-updates/index.ts +2 -0
  48. package/src/v4/types/mqtt/status-updates/resource-update.ts +44 -0
  49. package/src/v4/types/site-controller/types.ts +2 -2
  50. package/dist/v4/types/mqtt/types.d.ts +0 -66
  51. package/dist/v4/types/mqtt/types.js +0 -160
  52. package/dist/v4/types/mqtt/types.js.map +0 -1
  53. package/src/v4/types/mqtt/types.ts +0 -219
@@ -0,0 +1,24 @@
1
+ import { IsUUID } from 'class-validator';
2
+ import { ValidateNestedType } from '../../../../decorators';
3
+ import { AGENT_STRING, COMMAND_STRING } from '../constants';
4
+ import { BaseCommand, BaseCommandPayload } from './base';
5
+
6
+ export class TerminateGameCommandPayload extends BaseCommandPayload {
7
+ @IsUUID()
8
+ gameResourceId: string;
9
+ }
10
+
11
+ export class TerminateGameCommand extends BaseCommand {
12
+ @ValidateNestedType(() => TerminateGameCommandPayload)
13
+ payload: TerminateGameCommandPayload;
14
+
15
+ constructor(payload: TerminateGameCommandPayload) {
16
+ super();
17
+ this.payload = payload;
18
+ }
19
+
20
+ getTopic(): string {
21
+ return super.getTopic('terminate-game', this.payload.machineResourceId);
22
+ }
23
+ }
24
+
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MQTT topic constants
3
+ */
4
+ export const AGENT_STRING = 'agent';
5
+ export const COMMAND_STRING = 'command';
6
+ export const WILDCARD_MQTT_STRING = '+';
7
+
@@ -1,6 +1,5 @@
1
- /**
2
- * MQTT types for site-controller <-> ludeocast-agent communication
3
- */
4
1
 
5
- export * from './types';
2
+ export * from './constants';
3
+ export * from './commands';
4
+ export * from './status-updates';
6
5
 
@@ -0,0 +1,2 @@
1
+ export * from './resource-update';
2
+
@@ -0,0 +1,44 @@
1
+ import { IsEnum, IsOptional, IsString, IsUUID } from 'class-validator';
2
+ import { ValidateNestedType } from '../../../../decorators';
3
+ import { AGENT_STRING, WILDCARD_MQTT_STRING } from '../constants';
4
+ import { BaseCommandPayload } from '../commands/base';
5
+ import { CloudResourceStatus } from '../../pools/resource/status';
6
+
7
+ const RESOURCE_UPDATE = 'resource-update';
8
+
9
+ export class ResourceUpdatePayload extends BaseCommandPayload {
10
+ @IsOptional()
11
+ @IsUUID()
12
+ gameResourceId?: string;
13
+
14
+ @IsEnum(CloudResourceStatus)
15
+ status: CloudResourceStatus;
16
+
17
+ @IsOptional()
18
+ @IsString()
19
+ reason?: string;
20
+
21
+ @IsOptional()
22
+ meta?: Record<string, any>;
23
+ }
24
+
25
+ export class ResourceUpdate {
26
+
27
+ @ValidateNestedType(() => ResourceUpdatePayload)
28
+ payload: ResourceUpdatePayload;
29
+
30
+ constructor(payload: ResourceUpdatePayload) {
31
+ this.payload = payload;
32
+ }
33
+
34
+ getTopic(): string {
35
+ return `${AGENT_STRING}/${RESOURCE_UPDATE}/${this.payload.machineResourceId}`;
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Subscribe pattern for site-controller to receive all agent status updates
41
+ * Pattern: agent/resource-status-update/#
42
+ */
43
+ export const RESOURCE_UPDATE_SUBSCRIBE_PATTERN = `${AGENT_STRING}/${RESOURCE_UPDATE}/${WILDCARD_MQTT_STRING}`;
44
+
@@ -8,8 +8,8 @@ import { IsString, IsUUID, IsOptional, IsObject } from 'class-validator';
8
8
  // ========== Machine Types ==========
9
9
 
10
10
  export enum MachineMode {
11
- Proton = 'proton',
12
- Android = 'android',
11
+ PROTON = 'proton',
12
+ ANDROID = 'android',
13
13
  }
14
14
 
15
15
  // ========== Game Types ==========
@@ -1,66 +0,0 @@
1
- import { MachineMode, GameCreationPayload } from '../site-controller/types';
2
- import { CloudResourceStatus } from '../pools/resource/status';
3
- export declare const AGENT_STRING = "agent";
4
- export declare const COMMAND_STRING = "command";
5
- export declare const WILDCARD_MQTT_STRING = "#";
6
- export declare class BaseCommandPayload {
7
- machineResourceId: string;
8
- }
9
- export declare class InitCommandPayload extends BaseCommandPayload {
10
- mode: MachineMode;
11
- }
12
- export declare class StartGameCommandPayload extends BaseCommandPayload {
13
- payload: GameCreationPayload;
14
- }
15
- export declare class ExportLogsCommandPayload extends BaseCommandPayload {
16
- gameResourceId: string;
17
- uploadURL: string;
18
- }
19
- export declare class ResourceStatusUpdatePayload extends BaseCommandPayload {
20
- gameResourceId?: string;
21
- status: CloudResourceStatus;
22
- meta?: Record<string, any>;
23
- }
24
- export declare class ShutdownCommandPayload extends BaseCommandPayload {
25
- }
26
- export declare class TerminateGameCommandPayload extends BaseCommandPayload {
27
- gameResourceId: string;
28
- }
29
- export declare class InitCommand {
30
- static readonly COMMAND_NAME = "init";
31
- payload: InitCommandPayload;
32
- constructor(payload: InitCommandPayload);
33
- getTopic(): string;
34
- }
35
- export declare class StartGameCommand {
36
- static readonly COMMAND_NAME = "start-game";
37
- payload: StartGameCommandPayload;
38
- constructor(payload: StartGameCommandPayload);
39
- getTopic(): string;
40
- }
41
- export declare class TerminateGameCommand {
42
- static readonly COMMAND_NAME = "terminate-game";
43
- payload: TerminateGameCommandPayload;
44
- constructor(payload: TerminateGameCommandPayload);
45
- getTopic(): string;
46
- }
47
- export declare class ExportLogsCommand {
48
- static readonly COMMAND_NAME = "export-logs";
49
- payload: ExportLogsCommandPayload;
50
- constructor(payload: ExportLogsCommandPayload);
51
- getTopic(): string;
52
- }
53
- export declare class ShutdownCommand {
54
- static readonly COMMAND_NAME = "shutdown";
55
- payload: ShutdownCommandPayload;
56
- constructor(payload: ShutdownCommandPayload);
57
- getTopic(): string;
58
- }
59
- export declare class ResourceStatusUpdateCommand {
60
- static readonly COMMAND_NAME = "resource-status-update";
61
- payload: ResourceStatusUpdatePayload;
62
- constructor(payload: ResourceStatusUpdatePayload);
63
- getTopic(): string;
64
- }
65
- export declare const RESOURCE_STATUS_SUBSCRIBE_PATTERN: string;
66
- export declare const AGENT_COMMAND_SUBSCRIBE_PATTERN = "agent/command/#";
@@ -1,160 +0,0 @@
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.AGENT_COMMAND_SUBSCRIBE_PATTERN = exports.RESOURCE_STATUS_SUBSCRIBE_PATTERN = exports.ResourceStatusUpdateCommand = exports.ShutdownCommand = exports.ExportLogsCommand = exports.TerminateGameCommand = exports.StartGameCommand = exports.InitCommand = exports.TerminateGameCommandPayload = exports.ShutdownCommandPayload = exports.ResourceStatusUpdatePayload = exports.ExportLogsCommandPayload = exports.StartGameCommandPayload = exports.InitCommandPayload = exports.BaseCommandPayload = exports.WILDCARD_MQTT_STRING = exports.COMMAND_STRING = exports.AGENT_STRING = void 0;
13
- const class_validator_1 = require("class-validator");
14
- const decorators_1 = require("../../../decorators");
15
- const types_1 = require("../site-controller/types");
16
- const status_1 = require("../pools/resource/status");
17
- exports.AGENT_STRING = 'agent';
18
- exports.COMMAND_STRING = 'command';
19
- exports.WILDCARD_MQTT_STRING = '#';
20
- class BaseCommandPayload {
21
- }
22
- exports.BaseCommandPayload = BaseCommandPayload;
23
- __decorate([
24
- (0, class_validator_1.IsUUID)(),
25
- __metadata("design:type", String)
26
- ], BaseCommandPayload.prototype, "machineResourceId", void 0);
27
- class InitCommandPayload extends BaseCommandPayload {
28
- }
29
- exports.InitCommandPayload = InitCommandPayload;
30
- __decorate([
31
- (0, class_validator_1.IsEnum)(types_1.MachineMode),
32
- __metadata("design:type", String)
33
- ], InitCommandPayload.prototype, "mode", void 0);
34
- class StartGameCommandPayload extends BaseCommandPayload {
35
- }
36
- exports.StartGameCommandPayload = StartGameCommandPayload;
37
- class ExportLogsCommandPayload extends BaseCommandPayload {
38
- }
39
- exports.ExportLogsCommandPayload = ExportLogsCommandPayload;
40
- __decorate([
41
- (0, class_validator_1.IsUUID)(),
42
- __metadata("design:type", String)
43
- ], ExportLogsCommandPayload.prototype, "gameResourceId", void 0);
44
- __decorate([
45
- (0, class_validator_1.IsString)(),
46
- __metadata("design:type", String)
47
- ], ExportLogsCommandPayload.prototype, "uploadURL", void 0);
48
- class ResourceStatusUpdatePayload extends BaseCommandPayload {
49
- }
50
- exports.ResourceStatusUpdatePayload = ResourceStatusUpdatePayload;
51
- __decorate([
52
- (0, class_validator_1.IsOptional)(),
53
- (0, class_validator_1.IsUUID)(),
54
- __metadata("design:type", String)
55
- ], ResourceStatusUpdatePayload.prototype, "gameResourceId", void 0);
56
- __decorate([
57
- (0, class_validator_1.IsEnum)(status_1.CloudResourceStatus),
58
- __metadata("design:type", String)
59
- ], ResourceStatusUpdatePayload.prototype, "status", void 0);
60
- __decorate([
61
- (0, class_validator_1.IsOptional)(),
62
- __metadata("design:type", Object)
63
- ], ResourceStatusUpdatePayload.prototype, "meta", void 0);
64
- class ShutdownCommandPayload extends BaseCommandPayload {
65
- }
66
- exports.ShutdownCommandPayload = ShutdownCommandPayload;
67
- class TerminateGameCommandPayload extends BaseCommandPayload {
68
- }
69
- exports.TerminateGameCommandPayload = TerminateGameCommandPayload;
70
- __decorate([
71
- (0, class_validator_1.IsUUID)(),
72
- __metadata("design:type", String)
73
- ], TerminateGameCommandPayload.prototype, "gameResourceId", void 0);
74
- class InitCommand {
75
- constructor(payload) {
76
- this.payload = payload;
77
- }
78
- getTopic() {
79
- return `${exports.AGENT_STRING}/${this.payload.machineResourceId}/${exports.COMMAND_STRING}/${InitCommand.COMMAND_NAME}`;
80
- }
81
- }
82
- exports.InitCommand = InitCommand;
83
- InitCommand.COMMAND_NAME = 'init';
84
- __decorate([
85
- (0, decorators_1.ValidateNestedType)(() => InitCommandPayload),
86
- __metadata("design:type", InitCommandPayload)
87
- ], InitCommand.prototype, "payload", void 0);
88
- class StartGameCommand {
89
- constructor(payload) {
90
- this.payload = payload;
91
- }
92
- getTopic() {
93
- return `${exports.AGENT_STRING}/${this.payload.machineResourceId}/${exports.COMMAND_STRING}/${StartGameCommand.COMMAND_NAME}`;
94
- }
95
- }
96
- exports.StartGameCommand = StartGameCommand;
97
- StartGameCommand.COMMAND_NAME = 'start-game';
98
- __decorate([
99
- (0, decorators_1.ValidateNestedType)(() => StartGameCommandPayload),
100
- __metadata("design:type", StartGameCommandPayload)
101
- ], StartGameCommand.prototype, "payload", void 0);
102
- class TerminateGameCommand {
103
- constructor(payload) {
104
- this.payload = payload;
105
- }
106
- getTopic() {
107
- return `${exports.AGENT_STRING}/${this.payload.machineResourceId}/${exports.COMMAND_STRING}/${TerminateGameCommand.COMMAND_NAME}`;
108
- }
109
- }
110
- exports.TerminateGameCommand = TerminateGameCommand;
111
- TerminateGameCommand.COMMAND_NAME = 'terminate-game';
112
- __decorate([
113
- (0, decorators_1.ValidateNestedType)(() => TerminateGameCommandPayload),
114
- __metadata("design:type", TerminateGameCommandPayload)
115
- ], TerminateGameCommand.prototype, "payload", void 0);
116
- class ExportLogsCommand {
117
- constructor(payload) {
118
- this.payload = payload;
119
- }
120
- getTopic() {
121
- return `${exports.AGENT_STRING}/${this.payload.machineResourceId}/${exports.COMMAND_STRING}/${ExportLogsCommand.COMMAND_NAME}`;
122
- }
123
- }
124
- exports.ExportLogsCommand = ExportLogsCommand;
125
- ExportLogsCommand.COMMAND_NAME = 'export-logs';
126
- __decorate([
127
- (0, decorators_1.ValidateNestedType)(() => ExportLogsCommandPayload),
128
- __metadata("design:type", ExportLogsCommandPayload)
129
- ], ExportLogsCommand.prototype, "payload", void 0);
130
- class ShutdownCommand {
131
- constructor(payload) {
132
- this.payload = payload;
133
- }
134
- getTopic() {
135
- return `${exports.AGENT_STRING}/${this.payload.machineResourceId}/${exports.COMMAND_STRING}/${ShutdownCommand.COMMAND_NAME}`;
136
- }
137
- }
138
- exports.ShutdownCommand = ShutdownCommand;
139
- ShutdownCommand.COMMAND_NAME = 'shutdown';
140
- __decorate([
141
- (0, decorators_1.ValidateNestedType)(() => ShutdownCommandPayload),
142
- __metadata("design:type", ShutdownCommandPayload)
143
- ], ShutdownCommand.prototype, "payload", void 0);
144
- class ResourceStatusUpdateCommand {
145
- constructor(payload) {
146
- this.payload = payload;
147
- }
148
- getTopic() {
149
- return `${exports.AGENT_STRING}/${ResourceStatusUpdateCommand.COMMAND_NAME}/${this.payload.machineResourceId}`;
150
- }
151
- }
152
- exports.ResourceStatusUpdateCommand = ResourceStatusUpdateCommand;
153
- ResourceStatusUpdateCommand.COMMAND_NAME = 'resource-status-update';
154
- __decorate([
155
- (0, decorators_1.ValidateNestedType)(() => ResourceStatusUpdatePayload),
156
- __metadata("design:type", ResourceStatusUpdatePayload)
157
- ], ResourceStatusUpdateCommand.prototype, "payload", void 0);
158
- exports.RESOURCE_STATUS_SUBSCRIBE_PATTERN = `${exports.AGENT_STRING}/${ResourceStatusUpdateCommand.COMMAND_NAME}/${exports.WILDCARD_MQTT_STRING}`;
159
- exports.AGENT_COMMAND_SUBSCRIBE_PATTERN = `${exports.AGENT_STRING}/${exports.COMMAND_STRING}/${exports.WILDCARD_MQTT_STRING}`;
160
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/v4/types/mqtt/types.ts"],"names":[],"mappings":";;;;;;;;;;;;AAkBA,qDAAuE;AACvE,oDAAyD;AACzD,oDAA4E;AAC5E,qDAA+D;AASlD,QAAA,YAAY,GAAG,OAAO,CAAC;AACvB,QAAA,cAAc,GAAG,SAAS,CAAA;AAC1B,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAExC,MAAa,kBAAkB;CAG9B;AAHD,gDAGC;AADC;IADC,IAAA,wBAAM,GAAE;;6DACiB;AAG5B,MAAa,kBAAmB,SAAQ,kBAAkB;CAGzD;AAHD,gDAGC;AADC;IADC,IAAA,wBAAM,EAAC,mBAAW,CAAC;;gDACF;AAGpB,MAAa,uBAAwB,SAAQ,kBAAkB;CAE9D;AAFD,0DAEC;AAED,MAAa,wBAAyB,SAAQ,kBAAkB;CAM/D;AAND,4DAMC;AAJC;IADC,IAAA,wBAAM,GAAE;;gEACc;AAGvB;IADC,IAAA,0BAAQ,GAAE;;2DACO;AAGpB,MAAa,2BAA4B,SAAQ,kBAAkB;CAUlE;AAVD,kEAUC;AAPC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;;mEACe;AAGxB;IADC,IAAA,wBAAM,EAAC,4BAAmB,CAAC;;2DACA;AAG5B;IADC,IAAA,4BAAU,GAAE;;yDACc;AAG7B,MAAa,sBAAuB,SAAQ,kBAAkB;CAAG;AAAjE,wDAAiE;AAEjE,MAAa,2BAA4B,SAAQ,kBAAkB;CAGlE;AAHD,kEAGC;AADC;IADC,IAAA,wBAAM,GAAE;;mEACc;AASzB,MAAa,WAAW;IAMtB,YAAY,OAA2B;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAGD,QAAQ;QACN,OAAO,GAAG,oBAAY,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,sBAAc,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;IAC3G,CAAC;;AAbH,kCAcC;AAbiB,wBAAY,GAAG,MAAM,CAAC;AAGtC;IADC,IAAA,+BAAkB,EAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC;8BACpC,kBAAkB;4CAAC;AAgB9B,MAAa,gBAAgB;IAO3B,YAAY,OAAgC;QAC1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,oBAAY,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,sBAAc,IAAI,gBAAgB,CAAC,YAAY,EAAE,CAAC;IAChH,CAAC;;AAbH,4CAcC;AAbiB,6BAAY,GAAG,YAAY,CAAC;AAI5C;IADC,IAAA,+BAAkB,EAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC;8BACzC,uBAAuB;iDAAC;AAenC,MAAa,oBAAoB;IAM/B,YAAY,OAAoC;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,oBAAY,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,sBAAc,IAAI,oBAAoB,CAAC,YAAY,EAAE,CAAC;IACpH,CAAC;;AAZH,oDAaC;AAZiB,iCAAY,GAAG,gBAAgB,CAAC;AAGhD;IADC,IAAA,+BAAkB,EAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC;8BAC7C,2BAA2B;qDAAC;AAevC,MAAa,iBAAiB;IAM5B,YAAY,OAAiC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,oBAAY,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,sBAAc,IAAI,iBAAiB,CAAC,YAAY,EAAE,CAAC;IACjH,CAAC;;AAZH,8CAaC;AAZiB,8BAAY,GAAG,aAAa,CAAC;AAG7C;IADC,IAAA,+BAAkB,EAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC;8BAC1C,wBAAwB;kDAAC;AAepC,MAAa,eAAe;IAO1B,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,oBAAY,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,sBAAc,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC;IAC/G,CAAC;;AAbH,0CAcC;AAbiB,4BAAY,GAAG,UAAU,CAAC;AAG1C;IADC,IAAA,+BAAkB,EAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;8BACxC,sBAAsB;gDAAC;AAgBlC,MAAa,2BAA2B;IAOpC,YAAY,OAAoC;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,QAAQ;QACJ,OAAO,GAAG,oBAAY,IAAI,2BAA2B,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC3G,CAAC;;AAbL,kEAcC;AAbmB,wCAAY,GAAG,wBAAwB,CAAC;AAIxD;IADC,IAAA,+BAAkB,EAAC,GAAG,EAAE,CAAC,2BAA2B,CAAC;8BAC7C,2BAA2B;4DAAC;AA+B5B,QAAA,iCAAiC,GAAG,GAAG,oBAAY,IAAI,2BAA2B,CAAC,YAAY,IAAI,4BAAoB,EAAE,CAAC;AAE1H,QAAA,+BAA+B,GAAG,GAAG,oBAAY,IAAI,sBAAc,IAAI,4BAAoB,EAAE,CAAC"}
@@ -1,219 +0,0 @@
1
- /**
2
- * MQTT Types for site-controller <-> ludeocast-agent communication
3
- *
4
- * Architecture:
5
- * - Ludeocast agent runs on a VM identified by MACHINE_RESOURCE_ID (env var)
6
- * - Agent publishes ALL status updates to: agent/status-updates/{machineResourceId}
7
- * - This includes both machine updates and game updates running on that machine
8
- *
9
- * Message Flow:
10
- * - Site-Controller → Agent: Commands (init, start-game, terminate-game, etc.)
11
- * Published to: agent/{machineResourceId}/command/{commandName}
12
- *
13
- * - Agent → Site-Controller: Status Updates (machine + game status changes)
14
- * Published to: agent/status-updates/{machineResourceId}
15
- * Site-Controller subscribes to: agent/status-updates/+ (all agents)
16
- * Routes by resourceType (machine/game) to appropriate service
17
- */
18
-
19
- import { IsEnum, IsString, IsUUID, IsOptional } from 'class-validator';
20
- import { ValidateNestedType } from '../../../decorators';
21
- import { MachineMode, GameCreationPayload } from '../site-controller/types';
22
- import { CloudResourceStatus } from '../pools/resource/status';
23
- import { CloudPoolType } from '../pools/type';
24
-
25
- // ==========================================================================
26
- // SITE-CONTROLLER → AGENT (Commands)
27
- // ==========================================================================
28
-
29
- // ========== Command Payloads ==========
30
-
31
- export const AGENT_STRING = 'agent';
32
- export const COMMAND_STRING = 'command'
33
- export const WILDCARD_MQTT_STRING = '#';
34
-
35
- export class BaseCommandPayload {
36
- @IsUUID()
37
- machineResourceId: string;
38
- }
39
-
40
- export class InitCommandPayload extends BaseCommandPayload {
41
- @IsEnum(MachineMode)
42
- mode: MachineMode;
43
- }
44
-
45
- export class StartGameCommandPayload extends BaseCommandPayload {
46
- payload: GameCreationPayload;
47
- }
48
-
49
- export class ExportLogsCommandPayload extends BaseCommandPayload {
50
- @IsUUID()
51
- gameResourceId: string;
52
-
53
- @IsString()
54
- uploadURL: string;
55
- }
56
-
57
- export class ResourceStatusUpdatePayload extends BaseCommandPayload {
58
- @IsOptional()
59
- @IsUUID()
60
- gameResourceId?: string; // Present for game status updates, absent for machine status
61
-
62
- @IsEnum(CloudResourceStatus)
63
- status: CloudResourceStatus;
64
-
65
- @IsOptional()
66
- meta?: Record<string, any>;
67
- }
68
-
69
- export class ShutdownCommandPayload extends BaseCommandPayload {}
70
-
71
- export class TerminateGameCommandPayload extends BaseCommandPayload {
72
- @IsUUID()
73
- gameResourceId: string;
74
- }
75
-
76
- // ========== Command Classes ==========
77
-
78
- /**
79
- * Init command - Initialize the agent with a specific mode
80
- * Topic: agent/{machineResourceId}/command/init
81
- */
82
- export class InitCommand {
83
- static readonly COMMAND_NAME = 'init';
84
-
85
- @ValidateNestedType(() => InitCommandPayload)
86
- payload: InitCommandPayload;
87
-
88
- constructor(payload: InitCommandPayload) {
89
- this.payload = payload;
90
- }
91
-
92
- /** Get topic for publishing this command */
93
- getTopic(): string {
94
- return `${AGENT_STRING}/${this.payload.machineResourceId}/${COMMAND_STRING}/${InitCommand.COMMAND_NAME}`;
95
- }
96
- }
97
-
98
- /**
99
- * Start game command - Start a game instance on the agent
100
- * Topic: agent/{machineResourceId}/command/start-game
101
- */
102
- export class StartGameCommand {
103
- static readonly COMMAND_NAME = 'start-game';
104
-
105
-
106
- @ValidateNestedType(() => StartGameCommandPayload)
107
- payload: StartGameCommandPayload;
108
-
109
- constructor(payload: StartGameCommandPayload) {
110
- this.payload = payload;
111
- }
112
-
113
- getTopic(): string {
114
- return `${AGENT_STRING}/${this.payload.machineResourceId}/${COMMAND_STRING}/${StartGameCommand.COMMAND_NAME}`;
115
- }
116
- }
117
-
118
- /**
119
- * Terminate game command - Stop a running game instance
120
- * Topic: agent/{machineResourceId}/command/terminate-game
121
- */
122
- export class TerminateGameCommand {
123
- static readonly COMMAND_NAME = 'terminate-game';
124
-
125
- @ValidateNestedType(() => TerminateGameCommandPayload)
126
- payload: TerminateGameCommandPayload;
127
-
128
- constructor(payload: TerminateGameCommandPayload) {
129
- this.payload = payload;
130
- }
131
-
132
- getTopic(): string {
133
- return `${AGENT_STRING}/${this.payload.machineResourceId}/${COMMAND_STRING}/${TerminateGameCommand.COMMAND_NAME}`;
134
- }
135
- }
136
-
137
- /**
138
- * Export logs command - Export logs to a specified URL
139
- * Topic: agent/{machineResourceId}/command/export-logs
140
- */
141
- export class ExportLogsCommand {
142
- static readonly COMMAND_NAME = 'export-logs';
143
-
144
- @ValidateNestedType(() => ExportLogsCommandPayload)
145
- payload: ExportLogsCommandPayload;
146
-
147
- constructor(payload: ExportLogsCommandPayload) {
148
- this.payload = payload;
149
- }
150
-
151
- getTopic(): string {
152
- return `${AGENT_STRING}/${this.payload.machineResourceId}/${COMMAND_STRING}/${ExportLogsCommand.COMMAND_NAME}`;
153
- }
154
- }
155
-
156
- /**
157
- * Shutdown command - Gracefully shutdown the agent
158
- * Topic: agent/{machineResourceId}/command/shutdown
159
- */
160
- export class ShutdownCommand {
161
- static readonly COMMAND_NAME = 'shutdown';
162
-
163
- @ValidateNestedType(() => ShutdownCommandPayload)
164
- payload: ShutdownCommandPayload;
165
-
166
-
167
- constructor(payload: ShutdownCommandPayload) {
168
- this.payload = payload;
169
- }
170
-
171
- getTopic(): string {
172
- return `${AGENT_STRING}/${this.payload.machineResourceId}/${COMMAND_STRING}/${ShutdownCommand.COMMAND_NAME}`;
173
- }
174
- }
175
-
176
- /**
177
- * Resource status update command - Update the status of a resource
178
- * Topic: agent/{machineResourceId}/command/resource-status-update
179
- */
180
- export class ResourceStatusUpdateCommand {
181
- static readonly COMMAND_NAME = 'resource-status-update';
182
-
183
-
184
- @ValidateNestedType(() => ResourceStatusUpdatePayload)
185
- payload: ResourceStatusUpdatePayload;
186
-
187
- constructor(payload: ResourceStatusUpdatePayload) {
188
- this.payload = payload;
189
- }
190
-
191
- getTopic(): string {
192
- return `${AGENT_STRING}/${ResourceStatusUpdateCommand.COMMAND_NAME}/${this.payload.machineResourceId}`;
193
- }
194
- }
195
-
196
- // ==========================================================================
197
- // AGENT → SITE-CONTROLLER (Status Updates)
198
- // ==========================================================================
199
-
200
- /**
201
- * Status update from agent to site-controller
202
- * Topic: agent/status-updates/{machineResourceId}
203
- *
204
- * Agent always includes machineResourceId (since it's running on that machine).
205
- * Optionally includes gameResourceId when reporting game status.
206
- *
207
- * Status types:
208
- * - Machine status: { machineResourceId, status, ... } (no gameResourceId)
209
- * - Game status: { machineResourceId, gameResourceId, status, ... }
210
- *
211
- * Site-controller subscribes to agent/status-updates/+ and routes based on gameResourceId presence.
212
- */
213
-
214
-
215
- /** Pattern for site-controller to subscribe to ALL status updates from ALL agents */
216
- export const RESOURCE_STATUS_SUBSCRIBE_PATTERN = `${AGENT_STRING}/${ResourceStatusUpdateCommand.COMMAND_NAME}/${WILDCARD_MQTT_STRING}`;
217
-
218
- export const AGENT_COMMAND_SUBSCRIBE_PATTERN = `${AGENT_STRING}/${COMMAND_STRING}/${WILDCARD_MQTT_STRING}`;
219
-