@ludeo/cloud-common 1.2.173-beta-yahil-4 → 1.2.174-beta-yahil-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 (83) hide show
  1. package/dist/tsconfig.tsbuildinfo +1 -1
  2. package/dist/v4/contexts/index.d.ts +1 -0
  3. package/dist/v4/contexts/index.js +1 -0
  4. package/dist/v4/contexts/index.js.map +1 -1
  5. package/dist/v4/contexts/site-controller-context.d.ts +8 -0
  6. package/dist/v4/contexts/site-controller-context.js +47 -0
  7. package/dist/v4/contexts/site-controller-context.js.map +1 -0
  8. package/dist/v4/events/index.d.ts +1 -0
  9. package/dist/v4/events/index.js +2 -0
  10. package/dist/v4/events/index.js.map +1 -1
  11. package/dist/v4/events/site-controller/create-game-request.event.d.ts +16 -0
  12. package/dist/v4/events/site-controller/create-game-request.event.js +53 -0
  13. package/dist/v4/events/site-controller/create-game-request.event.js.map +1 -0
  14. package/dist/v4/events/site-controller/create-machine-request.event.d.ts +15 -0
  15. package/dist/v4/events/site-controller/create-machine-request.event.js +54 -0
  16. package/dist/v4/events/site-controller/create-machine-request.event.js.map +1 -0
  17. package/dist/v4/events/site-controller/create-snapshot-request.event.d.ts +14 -0
  18. package/dist/v4/events/site-controller/create-snapshot-request.event.js +53 -0
  19. package/dist/v4/events/site-controller/create-snapshot-request.event.js.map +1 -0
  20. package/dist/v4/events/site-controller/game-creation-ended.event.d.ts +14 -0
  21. package/dist/v4/events/site-controller/game-creation-ended.event.js +51 -0
  22. package/dist/v4/events/site-controller/game-creation-ended.event.js.map +1 -0
  23. package/dist/v4/events/site-controller/index.d.ts +11 -0
  24. package/dist/v4/events/site-controller/index.js +28 -0
  25. package/dist/v4/events/site-controller/index.js.map +1 -0
  26. package/dist/v4/events/site-controller/machine-creation-ended.event.d.ts +14 -0
  27. package/dist/v4/events/site-controller/machine-creation-ended.event.js +51 -0
  28. package/dist/v4/events/site-controller/machine-creation-ended.event.js.map +1 -0
  29. package/dist/v4/events/site-controller/resource-status-update.event.d.ts +15 -0
  30. package/dist/v4/events/site-controller/resource-status-update.event.js +55 -0
  31. package/dist/v4/events/site-controller/resource-status-update.event.js.map +1 -0
  32. package/dist/v4/events/site-controller/snapshot-creation-ended.event.d.ts +14 -0
  33. package/dist/v4/events/site-controller/snapshot-creation-ended.event.js +51 -0
  34. package/dist/v4/events/site-controller/snapshot-creation-ended.event.js.map +1 -0
  35. package/dist/v4/events/site-controller/snapshot-termination-ended.event.d.ts +14 -0
  36. package/dist/v4/events/site-controller/snapshot-termination-ended.event.js +51 -0
  37. package/dist/v4/events/site-controller/snapshot-termination-ended.event.js.map +1 -0
  38. package/dist/v4/events/site-controller/terminate-game-request.event.d.ts +14 -0
  39. package/dist/v4/events/site-controller/terminate-game-request.event.js +53 -0
  40. package/dist/v4/events/site-controller/terminate-game-request.event.js.map +1 -0
  41. package/dist/v4/events/site-controller/terminate-machine-request.event.d.ts +13 -0
  42. package/dist/v4/events/site-controller/terminate-machine-request.event.js +49 -0
  43. package/dist/v4/events/site-controller/terminate-machine-request.event.js.map +1 -0
  44. package/dist/v4/events/site-controller/terminate-snapshot-request.event.d.ts +13 -0
  45. package/dist/v4/events/site-controller/terminate-snapshot-request.event.js +49 -0
  46. package/dist/v4/events/site-controller/terminate-snapshot-request.event.js.map +1 -0
  47. package/dist/v4/types/index.d.ts +2 -0
  48. package/dist/v4/types/index.js +2 -0
  49. package/dist/v4/types/index.js.map +1 -1
  50. package/dist/v4/types/mqtt/index.d.ts +1 -0
  51. package/dist/v4/types/mqtt/index.js +18 -0
  52. package/dist/v4/types/mqtt/index.js.map +1 -0
  53. package/dist/v4/types/mqtt/types.d.ts +67 -0
  54. package/dist/v4/types/mqtt/types.js +178 -0
  55. package/dist/v4/types/mqtt/types.js.map +1 -0
  56. package/dist/v4/types/site-controller/index.d.ts +1 -0
  57. package/dist/v4/types/site-controller/index.js +18 -0
  58. package/dist/v4/types/site-controller/index.js.map +1 -0
  59. package/dist/v4/types/site-controller/types.d.ts +16 -0
  60. package/dist/v4/types/site-controller/types.js +14 -0
  61. package/dist/v4/types/site-controller/types.js.map +1 -0
  62. package/package.json +1 -1
  63. package/src/v4/contexts/index.ts +1 -0
  64. package/src/v4/contexts/site-controller-context.ts +32 -0
  65. package/src/v4/events/index.ts +3 -0
  66. package/src/v4/events/site-controller/create-game-request.event.ts +39 -0
  67. package/src/v4/events/site-controller/create-machine-request.event.ts +36 -0
  68. package/src/v4/events/site-controller/create-snapshot-request.event.ts +35 -0
  69. package/src/v4/events/site-controller/game-creation-ended.event.ts +34 -0
  70. package/src/v4/events/site-controller/index.ts +26 -0
  71. package/src/v4/events/site-controller/machine-creation-ended.event.ts +34 -0
  72. package/src/v4/events/site-controller/resource-status-update.event.ts +38 -0
  73. package/src/v4/events/site-controller/snapshot-creation-ended.event.ts +34 -0
  74. package/src/v4/events/site-controller/snapshot-termination-ended.event.ts +34 -0
  75. package/src/v4/events/site-controller/terminate-game-request.event.ts +35 -0
  76. package/src/v4/events/site-controller/terminate-machine-request.event.ts +32 -0
  77. package/src/v4/events/site-controller/terminate-snapshot-request.event.ts +32 -0
  78. package/src/v4/types/build.ts +1 -1
  79. package/src/v4/types/index.ts +2 -0
  80. package/src/v4/types/mqtt/index.ts +6 -0
  81. package/src/v4/types/mqtt/types.ts +232 -0
  82. package/src/v4/types/site-controller/index.ts +2 -0
  83. package/src/v4/types/site-controller/types.ts +32 -0
@@ -0,0 +1,232 @@
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
+
34
+ export class InitCommandPayload {
35
+ @IsEnum(MachineMode)
36
+ mode: MachineMode;
37
+ }
38
+
39
+ export class StartGameCommandPayload {
40
+ @IsUUID()
41
+ gameResourceId: string;
42
+
43
+ payload: GameCreationPayload;
44
+ }
45
+
46
+ export class TerminateGameCommandPayload {
47
+ @IsUUID()
48
+ gameResourceId: string;
49
+ }
50
+
51
+ export class ExportLogsCommandPayload {
52
+ @IsUUID()
53
+ gameResourceId: string;
54
+
55
+ @IsString()
56
+ uploadURL: string;
57
+ }
58
+
59
+ export class ResourceStatusUpdatePayload {
60
+ @IsUUID()
61
+ machineResourceId: string;
62
+
63
+ @IsUUID()
64
+ gameResourceId?: string; // Present for game status updates, absent for machine status
65
+
66
+ @IsEnum(CloudResourceStatus)
67
+ status: CloudResourceStatus;
68
+
69
+ @IsOptional()
70
+ @IsString()
71
+ reason?: string;
72
+ }
73
+
74
+ // ========== Command Classes ==========
75
+
76
+ /**
77
+ * Init command - Initialize the agent with a specific mode
78
+ * Topic: agent/{machineResourceId}/command/init
79
+ */
80
+ export class InitCommand {
81
+ static readonly COMMAND_NAME = 'init';
82
+
83
+ @IsUUID()
84
+ readonly machineResourceId: string;
85
+
86
+ @ValidateNestedType(() => InitCommandPayload)
87
+ payload: InitCommandPayload;
88
+
89
+ constructor(machineResourceId: string, payload: InitCommandPayload) {
90
+ this.machineResourceId = machineResourceId;
91
+ this.payload = payload;
92
+ }
93
+
94
+ /** Get topic for publishing this command */
95
+ getTopic(): string {
96
+ return `${AGENT_STRING}/${this.machineResourceId}/${COMMAND_STRING}/${InitCommand.COMMAND_NAME}`;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Start game command - Start a game instance on the agent
102
+ * Topic: agent/{machineResourceId}/command/start-game
103
+ */
104
+ export class StartGameCommand {
105
+ static readonly COMMAND_NAME = 'start-game';
106
+
107
+ @IsUUID()
108
+ readonly machineResourceId: string;
109
+
110
+ @ValidateNestedType(() => StartGameCommandPayload)
111
+ payload: StartGameCommandPayload;
112
+
113
+ constructor(machineResourceId: string, payload: StartGameCommandPayload) {
114
+ this.machineResourceId = machineResourceId;
115
+ this.payload = payload;
116
+ }
117
+
118
+ getTopic(): string {
119
+ return `${AGENT_STRING}/${this.machineResourceId}/${COMMAND_STRING}/${StartGameCommand.COMMAND_NAME}`;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Terminate game command - Stop a running game instance
125
+ * Topic: agent/{machineResourceId}/command/terminate-game
126
+ */
127
+ export class TerminateGameCommand {
128
+ static readonly COMMAND_NAME = 'terminate-game';
129
+
130
+ @IsUUID()
131
+ readonly machineResourceId: string;
132
+
133
+ @ValidateNestedType(() => TerminateGameCommandPayload)
134
+ payload: TerminateGameCommandPayload;
135
+
136
+ constructor(machineResourceId: string, payload: TerminateGameCommandPayload) {
137
+ this.machineResourceId = machineResourceId;
138
+ this.payload = payload;
139
+ }
140
+
141
+ getTopic(): string {
142
+ return `${AGENT_STRING}/${this.machineResourceId}/${COMMAND_STRING}/${TerminateGameCommand.COMMAND_NAME}`;
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Export logs command - Export logs to a specified URL
148
+ * Topic: agent/{machineResourceId}/command/export-logs
149
+ */
150
+ export class ExportLogsCommand {
151
+ static readonly COMMAND_NAME = 'export-logs';
152
+
153
+ @IsUUID()
154
+ readonly machineResourceId: string;
155
+
156
+ @ValidateNestedType(() => ExportLogsCommandPayload)
157
+ payload: ExportLogsCommandPayload;
158
+
159
+ constructor(machineResourceId: string, payload: ExportLogsCommandPayload) {
160
+ this.machineResourceId = machineResourceId;
161
+ this.payload = payload;
162
+ }
163
+
164
+ getTopic(): string {
165
+ return `${AGENT_STRING}/${this.machineResourceId}/${COMMAND_STRING}/${ExportLogsCommand.COMMAND_NAME}`;
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Shutdown command - Gracefully shutdown the agent
171
+ * Topic: agent/{machineResourceId}/command/shutdown
172
+ */
173
+ export class ShutdownCommand {
174
+ static readonly COMMAND_NAME = 'shutdown';
175
+
176
+ @IsUUID()
177
+ readonly machineResourceId: string;
178
+
179
+ payload = {};
180
+
181
+ constructor(machineResourceId: string) {
182
+ this.machineResourceId = machineResourceId;
183
+ }
184
+
185
+ getTopic(): string {
186
+ return `${AGENT_STRING}/${this.machineResourceId}/${COMMAND_STRING}/${ShutdownCommand.COMMAND_NAME}`;
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Resource status update command - Update the status of a resource
192
+ * Topic: agent/{machineResourceId}/command/resource-status-update
193
+ */
194
+ export class ResourceStatusUpdateCommand {
195
+ static readonly COMMAND_NAME = 'resource-status-update';
196
+
197
+ @ValidateNestedType(() => ResourceStatusUpdatePayload)
198
+ payload: ResourceStatusUpdatePayload;
199
+
200
+ constructor(payload: ResourceStatusUpdatePayload) {
201
+ this.payload = payload;
202
+ }
203
+
204
+ static getTopic(machineResourceId: string): string {
205
+ return `agent/resource-status-updates/${machineResourceId}`;
206
+ }
207
+ }
208
+
209
+ // ==========================================================================
210
+ // AGENT → SITE-CONTROLLER (Status Updates)
211
+ // ==========================================================================
212
+
213
+ /**
214
+ * Status update from agent to site-controller
215
+ * Topic: agent/status-updates/{machineResourceId}
216
+ *
217
+ * Agent always includes machineResourceId (since it's running on that machine).
218
+ * Optionally includes gameResourceId when reporting game status.
219
+ *
220
+ * Status types:
221
+ * - Machine status: { machineResourceId, status, ... } (no gameResourceId)
222
+ * - Game status: { machineResourceId, gameResourceId, status, ... }
223
+ *
224
+ * Site-controller subscribes to agent/status-updates/+ and routes based on gameResourceId presence.
225
+ */
226
+
227
+
228
+ /** Pattern for site-controller to subscribe to ALL status updates from ALL agents */
229
+ export const RESOURCE_STATUS_SUBSCRIBE_PATTERN = `agent/${ResourceStatusUpdateCommand.COMMAND_NAME}/#`;
230
+
231
+ export const AGENT_COMMAND_SUBSCRIBE_PATTERN = `agent/command/#`;
232
+
@@ -0,0 +1,2 @@
1
+ export * from "./types";
2
+
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Site Controller Types
3
+ * All types used by site-controller events and services
4
+ */
5
+
6
+ // ========== Machine Types ==========
7
+
8
+ export enum MachineMode {
9
+ Proton = 'proton',
10
+ Android = 'android',
11
+ }
12
+
13
+ // ========== Game Types ==========
14
+
15
+ export interface ProtonGameCreationPayload {
16
+ exeRelativePath: string;
17
+ additionalEnvironmentVariables?: Record<string, string>;
18
+ }
19
+
20
+ export interface AndroidGameCreationPayload {
21
+ packageId: string;
22
+ }
23
+
24
+ export type GameCreationPayload = ProtonGameCreationPayload | AndroidGameCreationPayload;
25
+
26
+ // ========== Operation Status ==========
27
+
28
+ export enum OperationStatus {
29
+ Success = 'success',
30
+ Error = 'error',
31
+ }
32
+