@ludeo/cloud-common 1.0.0

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 (143) hide show
  1. package/dist/contexts/cloud-resource-context.d.ts +6 -0
  2. package/dist/contexts/cloud-resource-context.js +33 -0
  3. package/dist/contexts/cloud-resource-context.js.map +1 -0
  4. package/dist/contexts/cloud-session-context.d.ts +12 -0
  5. package/dist/contexts/cloud-session-context.js +61 -0
  6. package/dist/contexts/cloud-session-context.js.map +1 -0
  7. package/dist/contexts/create-cloud-resource-request-context.d.ts +5 -0
  8. package/dist/contexts/create-cloud-resource-request-context.js +30 -0
  9. package/dist/contexts/create-cloud-resource-request-context.js.map +1 -0
  10. package/dist/contexts/index.d.ts +4 -0
  11. package/dist/contexts/index.js +21 -0
  12. package/dist/contexts/index.js.map +1 -0
  13. package/dist/contexts/pool-context.d.ts +5 -0
  14. package/dist/contexts/pool-context.js +26 -0
  15. package/dist/contexts/pool-context.js.map +1 -0
  16. package/dist/decorators/validate-nested-type.decorator.d.ts +1 -0
  17. package/dist/decorators/validate-nested-type.decorator.js +10 -0
  18. package/dist/decorators/validate-nested-type.decorator.js.map +1 -0
  19. package/dist/events/allocate-cloud-resource-request.event.d.ts +13 -0
  20. package/dist/events/allocate-cloud-resource-request.event.js +45 -0
  21. package/dist/events/allocate-cloud-resource-request.event.js.map +1 -0
  22. package/dist/events/allocate-cloud-session-failed.event.d.ts +11 -0
  23. package/dist/events/allocate-cloud-session-failed.event.js +41 -0
  24. package/dist/events/allocate-cloud-session-failed.event.js.map +1 -0
  25. package/dist/events/allocate-cloud-session-request.event.d.ts +12 -0
  26. package/dist/events/allocate-cloud-session-request.event.js +41 -0
  27. package/dist/events/allocate-cloud-session-request.event.js.map +1 -0
  28. package/dist/events/allocate-pool-item-failed.event.d.ts +11 -0
  29. package/dist/events/allocate-pool-item-failed.event.js +41 -0
  30. package/dist/events/allocate-pool-item-failed.event.js.map +1 -0
  31. package/dist/events/allocate-pool-item-request.event.d.ts +12 -0
  32. package/dist/events/allocate-pool-item-request.event.js +41 -0
  33. package/dist/events/allocate-pool-item-request.event.js.map +1 -0
  34. package/dist/events/cloud-resource-allocated.event.d.ts +12 -0
  35. package/dist/events/cloud-resource-allocated.event.js +41 -0
  36. package/dist/events/cloud-resource-allocated.event.js.map +1 -0
  37. package/dist/events/cloud-resource-created.event.d.ts +20 -0
  38. package/dist/events/cloud-resource-created.event.js +64 -0
  39. package/dist/events/cloud-resource-created.event.js.map +1 -0
  40. package/dist/events/cloud-resource-creation-failed.event.d.ts +18 -0
  41. package/dist/events/cloud-resource-creation-failed.event.js +69 -0
  42. package/dist/events/cloud-resource-creation-failed.event.js.map +1 -0
  43. package/dist/events/cloud-resource-status.event.d.ts +15 -0
  44. package/dist/events/cloud-resource-status.event.js +55 -0
  45. package/dist/events/cloud-resource-status.event.js.map +1 -0
  46. package/dist/events/cloud-session-allocated.event.d.ts +12 -0
  47. package/dist/events/cloud-session-allocated.event.js +41 -0
  48. package/dist/events/cloud-session-allocated.event.js.map +1 -0
  49. package/dist/events/cloud-session-ended.event.d.ts +8 -0
  50. package/dist/events/cloud-session-ended.event.js +28 -0
  51. package/dist/events/cloud-session-ended.event.js.map +1 -0
  52. package/dist/events/create-cloud-resource-request.event.d.ts +16 -0
  53. package/dist/events/create-cloud-resource-request.event.js +58 -0
  54. package/dist/events/create-cloud-resource-request.event.js.map +1 -0
  55. package/dist/events/index.d.ts +23 -0
  56. package/dist/events/index.js +40 -0
  57. package/dist/events/index.js.map +1 -0
  58. package/dist/events/monitor-pool-task.event.d.ts +10 -0
  59. package/dist/events/monitor-pool-task.event.js +31 -0
  60. package/dist/events/monitor-pool-task.event.js.map +1 -0
  61. package/dist/events/pool-created.event.d.ts +9 -0
  62. package/dist/events/pool-created.event.js +34 -0
  63. package/dist/events/pool-created.event.js.map +1 -0
  64. package/dist/events/pool-item-allocated.event.d.ts +9 -0
  65. package/dist/events/pool-item-allocated.event.js +34 -0
  66. package/dist/events/pool-item-allocated.event.js.map +1 -0
  67. package/dist/events/pool-resize-success.event.d.ts +11 -0
  68. package/dist/events/pool-resize-success.event.js +41 -0
  69. package/dist/events/pool-resize-success.event.js.map +1 -0
  70. package/dist/events/pool-status.event.d.ts +14 -0
  71. package/dist/events/pool-status.event.js +50 -0
  72. package/dist/events/pool-status.event.js.map +1 -0
  73. package/dist/events/pool-updated.event.d.ts +9 -0
  74. package/dist/events/pool-updated.event.js +34 -0
  75. package/dist/events/pool-updated.event.js.map +1 -0
  76. package/dist/events/remove-scheduled-task-request.event.d.ts +11 -0
  77. package/dist/events/remove-scheduled-task-request.event.js +34 -0
  78. package/dist/events/remove-scheduled-task-request.event.js.map +1 -0
  79. package/dist/events/resize-pool-request.event.d.ts +15 -0
  80. package/dist/events/resize-pool-request.event.js +50 -0
  81. package/dist/events/resize-pool-request.event.js.map +1 -0
  82. package/dist/events/schedule-task-request.event.d.ts +30 -0
  83. package/dist/events/schedule-task-request.event.js +71 -0
  84. package/dist/events/schedule-task-request.event.js.map +1 -0
  85. package/dist/events/set-pool.event.d.ts +9 -0
  86. package/dist/events/set-pool.event.js +34 -0
  87. package/dist/events/set-pool.event.js.map +1 -0
  88. package/dist/events/token-required.event.d.ts +20 -0
  89. package/dist/events/token-required.event.js +34 -0
  90. package/dist/events/token-required.event.js.map +1 -0
  91. package/dist/index.d.ts +4 -0
  92. package/dist/index.js +21 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/infra/ludeo-event.d.ts +7 -0
  95. package/dist/infra/ludeo-event.js +40 -0
  96. package/dist/infra/ludeo-event.js.map +1 -0
  97. package/dist/models/cloud-pool.d.ts +9 -0
  98. package/dist/models/cloud-pool.js +7 -0
  99. package/dist/models/cloud-pool.js.map +1 -0
  100. package/dist/models/index.d.ts +1 -0
  101. package/dist/models/index.js +18 -0
  102. package/dist/models/index.js.map +1 -0
  103. package/dist/tsconfig.tsbuildinfo +1 -0
  104. package/dist/types/index.d.ts +81 -0
  105. package/dist/types/index.js +112 -0
  106. package/dist/types/index.js.map +1 -0
  107. package/package.json +19 -0
  108. package/src/contexts/cloud-resource-context.ts +15 -0
  109. package/src/contexts/cloud-session-context.ts +38 -0
  110. package/src/contexts/create-cloud-resource-request-context.ts +11 -0
  111. package/src/contexts/index.ts +4 -0
  112. package/src/contexts/pool-context.ts +10 -0
  113. package/src/decorators/validate-nested-type.decorator.ts +7 -0
  114. package/src/events/allocate-cloud-resource-request.event.ts +34 -0
  115. package/src/events/allocate-cloud-session-failed.event.ts +28 -0
  116. package/src/events/allocate-cloud-session-request.event.ts +28 -0
  117. package/src/events/allocate-pool-item-failed.event.ts +28 -0
  118. package/src/events/allocate-pool-item-request.event.ts +29 -0
  119. package/src/events/cloud-resource-allocated.event.ts +28 -0
  120. package/src/events/cloud-resource-created.event.ts +38 -0
  121. package/src/events/cloud-resource-creation-failed.event.ts +56 -0
  122. package/src/events/cloud-resource-status.event.ts +39 -0
  123. package/src/events/cloud-session-allocated.event.ts +29 -0
  124. package/src/events/cloud-session-ended.event.ts +17 -0
  125. package/src/events/create-cloud-resource-request.event.ts +45 -0
  126. package/src/events/index.ts +23 -0
  127. package/src/events/monitor-pool-task.event.ts +21 -0
  128. package/src/events/pool-created.event.ts +20 -0
  129. package/src/events/pool-item-allocated.event.ts +20 -0
  130. package/src/events/pool-resize-success.event.ts +25 -0
  131. package/src/events/pool-status.event.ts +30 -0
  132. package/src/events/pool-updated.event.ts +20 -0
  133. package/src/events/remove-scheduled-task-request.event.ts +22 -0
  134. package/src/events/resize-pool-request.event.ts +31 -0
  135. package/src/events/schedule-task-request.event.ts +50 -0
  136. package/src/events/set-pool.event.ts +20 -0
  137. package/src/events/token-required.event.ts +32 -0
  138. package/src/index.ts +4 -0
  139. package/src/infra/ludeo-event.ts +22 -0
  140. package/src/models/cloud-pool.ts +14 -0
  141. package/src/models/index.ts +1 -0
  142. package/src/types/index.ts +122 -0
  143. package/tsconfig.json +32 -0
@@ -0,0 +1,81 @@
1
+ import { GameCast } from "@ludeo/aws-gamecast-sdk";
2
+ export declare class AWSRequestData {
3
+ signalRequest: string;
4
+ }
5
+ export type CloudProviderRequest = AWSRequestData;
6
+ export declare class CloudProviderRequestData {
7
+ authToken: string;
8
+ appToken: string;
9
+ cloudProviderRequest: CloudProviderRequest;
10
+ }
11
+ export declare enum CloudProvider {
12
+ AWS = "aws",
13
+ }
14
+ export declare class AWSResourceCreationConfig {
15
+ streamGroupId: string;
16
+ identifier: GameCast.Identifier;
17
+ additionalEnvironmentVariables?: GameCast.EnvironmentVariables;
18
+ protocol?: GameCast.Protocol;
19
+ connectionTimeoutSeconds?: GameCast.ConnectionTimeoutSeconds;
20
+ sessionLengthSeconds?: GameCast.SessionLengthSeconds;
21
+ applicationIdentifier?: GameCast.Identifier;
22
+ region?: string;
23
+ }
24
+ export type CloudResourceCreationConfig = AWSResourceCreationConfig;
25
+ export declare enum CloudResourceStatus {
26
+ Allocated = "allocated",
27
+ Available = "available",
28
+ Creating = "creating",
29
+ Allocating = "allocating",
30
+ Error = "error",
31
+ Terminated = "terminated",
32
+ Terminating = "terminating",
33
+ }
34
+ export declare class AllocateCloudResourceRequestData {
35
+ providerSettings: CloudResourceCreationConfig;
36
+ requestData: CloudProviderRequestData;
37
+ }
38
+ export declare class AwsAllocationData {
39
+ streamGroupId: string;
40
+ streamSessionId: string;
41
+ signalResponse: string;
42
+ }
43
+ export type CloudProviderAllocationData = AwsAllocationData;
44
+ export declare class AWSResourceProviderSettings {
45
+ streamSessionId: string;
46
+ streamGroupId: string;
47
+ }
48
+ export declare class AWSCreationResponse {
49
+ signalResponse?: GameCast.SignalResponse;
50
+ streamSessionId: string;
51
+ }
52
+ export type CreationResponse = AWSCreationResponse;
53
+ export declare enum CloudPoolStatus {
54
+ Active = "active",
55
+ Scaling = "scaling",
56
+ Terminated = "terminated",
57
+ }
58
+ export declare class CloudPoolConfiguration {
59
+ providerSettings?: CloudResourceCreationConfig;
60
+ cloudProvider: CloudProvider;
61
+ poolId: string;
62
+ poolScaleConfiguration: PoolScaleConfiguration;
63
+ }
64
+ export type CloudResourcesMap = Record<
65
+ string,
66
+ {
67
+ status: CloudResourceStatus;
68
+ }
69
+ >;
70
+ export declare class PoolScaleConfiguration {
71
+ size: number;
72
+ }
73
+ export declare class PoolItemAllocatedPayload {
74
+ allocationData?: CloudProviderAllocationData;
75
+ }
76
+ export type CloudResourcesStatusMap = Record<CloudResourceStatus, number>;
77
+ export declare class AllocationRequestData {
78
+ authToken: string;
79
+ appToken: string;
80
+ cloudProviderRequest: CloudProviderRequest;
81
+ }
@@ -0,0 +1,112 @@
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.AllocationRequestData = exports.PoolItemAllocatedPayload = exports.PoolScaleConfiguration = exports.CloudPoolConfiguration = exports.CloudPoolStatus = exports.AWSCreationResponse = exports.AWSResourceProviderSettings = exports.AwsAllocationData = exports.AllocateCloudResourceRequestData = exports.CloudResourceStatus = exports.AWSResourceCreationConfig = exports.CloudProvider = exports.CloudProviderRequestData = exports.AWSRequestData = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const validate_nested_type_decorator_1 = require("../decorators/validate-nested-type.decorator");
15
+ const aws_gamecast_sdk_1 = require("@ludeo/aws-gamecast-sdk");
16
+ class AWSRequestData {
17
+ }
18
+ exports.AWSRequestData = AWSRequestData;
19
+ __decorate([
20
+ (0, class_validator_1.IsString)(),
21
+ (0, class_validator_1.IsNotEmpty)(),
22
+ __metadata("design:type", String)
23
+ ], AWSRequestData.prototype, "signalRequest", void 0);
24
+ class CloudProviderRequestData {
25
+ }
26
+ exports.CloudProviderRequestData = CloudProviderRequestData;
27
+ __decorate([
28
+ (0, class_validator_1.IsUUID)(),
29
+ __metadata("design:type", String)
30
+ ], CloudProviderRequestData.prototype, "authToken", void 0);
31
+ __decorate([
32
+ (0, class_validator_1.IsUUID)(),
33
+ __metadata("design:type", String)
34
+ ], CloudProviderRequestData.prototype, "appToken", void 0);
35
+ __decorate([
36
+ (0, class_validator_1.IsDefined)(),
37
+ (0, validate_nested_type_decorator_1.ValidateNestedType)(() => AWSRequestData),
38
+ __metadata("design:type", Object)
39
+ ], CloudProviderRequestData.prototype, "cloudProviderRequest", void 0);
40
+ var CloudProvider;
41
+ (function (CloudProvider) {
42
+ CloudProvider["AWS"] = "aws";
43
+ })(CloudProvider || (exports.CloudProvider = CloudProvider = {}));
44
+ class AWSResourceCreationConfig {
45
+ }
46
+ exports.AWSResourceCreationConfig = AWSResourceCreationConfig;
47
+ var CloudResourceStatus;
48
+ (function (CloudResourceStatus) {
49
+ CloudResourceStatus["Allocated"] = "allocated";
50
+ CloudResourceStatus["Available"] = "available";
51
+ CloudResourceStatus["Creating"] = "creating";
52
+ CloudResourceStatus["Allocating"] = "allocating";
53
+ CloudResourceStatus["Error"] = "error";
54
+ CloudResourceStatus["Terminated"] = "terminated";
55
+ CloudResourceStatus["Terminating"] = "terminating";
56
+ })(CloudResourceStatus || (exports.CloudResourceStatus = CloudResourceStatus = {}));
57
+ class AllocateCloudResourceRequestData {
58
+ }
59
+ exports.AllocateCloudResourceRequestData = AllocateCloudResourceRequestData;
60
+ class AwsAllocationData {
61
+ }
62
+ exports.AwsAllocationData = AwsAllocationData;
63
+ class AWSResourceProviderSettings {
64
+ }
65
+ exports.AWSResourceProviderSettings = AWSResourceProviderSettings;
66
+ class AWSCreationResponse {
67
+ }
68
+ exports.AWSCreationResponse = AWSCreationResponse;
69
+ __decorate([
70
+ (0, class_validator_1.IsOptional)(),
71
+ __metadata("design:type", String)
72
+ ], AWSCreationResponse.prototype, "signalResponse", void 0);
73
+ __decorate([
74
+ (0, class_validator_1.IsString)(),
75
+ (0, class_validator_1.IsNotEmpty)(),
76
+ __metadata("design:type", String)
77
+ ], AWSCreationResponse.prototype, "streamSessionId", void 0);
78
+ var CloudPoolStatus;
79
+ (function (CloudPoolStatus) {
80
+ CloudPoolStatus["Active"] = "active";
81
+ CloudPoolStatus["Scaling"] = "scaling";
82
+ CloudPoolStatus["Terminated"] = "terminated";
83
+ })(CloudPoolStatus || (exports.CloudPoolStatus = CloudPoolStatus = {}));
84
+ class CloudPoolConfiguration {
85
+ }
86
+ exports.CloudPoolConfiguration = CloudPoolConfiguration;
87
+ __decorate([
88
+ (0, class_validator_1.IsEnum)(CloudProvider),
89
+ __metadata("design:type", String)
90
+ ], CloudPoolConfiguration.prototype, "cloudProvider", void 0);
91
+ __decorate([
92
+ (0, class_validator_1.IsUUID)(),
93
+ __metadata("design:type", String)
94
+ ], CloudPoolConfiguration.prototype, "poolId", void 0);
95
+ class PoolScaleConfiguration {
96
+ }
97
+ exports.PoolScaleConfiguration = PoolScaleConfiguration;
98
+ __decorate([
99
+ (0, class_validator_1.IsNumber)(),
100
+ __metadata("design:type", Number)
101
+ ], PoolScaleConfiguration.prototype, "size", void 0);
102
+ class PoolItemAllocatedPayload {
103
+ }
104
+ exports.PoolItemAllocatedPayload = PoolItemAllocatedPayload;
105
+ __decorate([
106
+ (0, validate_nested_type_decorator_1.ValidateNestedType)(() => AwsAllocationData),
107
+ __metadata("design:type", Object)
108
+ ], PoolItemAllocatedPayload.prototype, "allocationData", void 0);
109
+ class AllocationRequestData {
110
+ }
111
+ exports.AllocationRequestData = AllocationRequestData;
112
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAQyB;AACzB,iGAAkF;AAClF,8DAAmD;AAEnD,MAAa,cAAc;CAI1B;AAJD,wCAIC;AADC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;qDACS;AAKxB,MAAa,wBAAwB;CAUpC;AAVD,4DAUC;AARC;IADC,IAAA,wBAAM,GAAE;;2DACS;AAGlB;IADC,IAAA,wBAAM,GAAE;;0DACQ;AAIjB;IAFC,IAAA,2BAAS,GAAE;IACX,IAAA,mDAAkB,EAAC,GAAG,EAAE,CAAC,cAAc,CAAC;;sEACE;AAG7C,IAAY,aAEX;AAFD,WAAY,aAAa;IACvB,4BAAW,CAAA;AACb,CAAC,EAFW,aAAa,6BAAb,aAAa,QAExB;AAED,MAAa,yBAAyB;CASrC;AATD,8DASC;AAID,IAAY,mBAQX;AARD,WAAY,mBAAmB;IAC7B,8CAAuB,CAAA;IACvB,8CAAuB,CAAA;IACvB,4CAAqB,CAAA;IACrB,gDAAyB,CAAA;IACzB,sCAAe,CAAA;IACf,gDAAyB,CAAA;IACzB,kDAA2B,CAAA;AAC7B,CAAC,EARW,mBAAmB,mCAAnB,mBAAmB,QAQ9B;AAED,MAAa,gCAAgC;CAG5C;AAHD,4EAGC;AAED,MAAa,iBAAiB;CAI7B;AAJD,8CAIC;AAID,MAAa,2BAA2B;CAGvC;AAHD,kEAGC;AAED,MAAa,mBAAmB;CAO/B;AAPD,kDAOC;AALC;IADC,IAAA,4BAAU,GAAE;;2DAC4B;AAIzC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;4DACW;AAK1B,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;AAC3B,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAED,MAAa,sBAAsB;CAOlC;AAPD,wDAOC;AAJC;IADC,IAAA,wBAAM,EAAC,aAAa,CAAC;;6DACO;AAE7B;IADC,IAAA,wBAAM,GAAE;;sDACM;AAMjB,MAAa,sBAAsB;CAGlC;AAHD,wDAGC;AADC;IADC,IAAA,0BAAQ,GAAE;;oDACE;AAGf,MAAa,wBAAwB;CAGpC;AAHD,4DAGC;AADC;IADC,IAAA,mDAAkB,EAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;;gEACC;AAK/C,MAAa,qBAAqB;CAIjC;AAJD,sDAIC"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@ludeo/cloud-common",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "author": "Yahil Didi",
7
+ "scripts": {
8
+ "build": "tsc"
9
+ },
10
+ "dependencies": {
11
+ "@ludeo/aws-gamecast-sdk": "^2.1626.4",
12
+ "@nestjs/common": "^10.3.10",
13
+ "class-transformer": "^0.5.1",
14
+ "class-validator": "^0.14.1"
15
+ },
16
+ "devDependencies": {
17
+ "typescript": "^5.5.3"
18
+ }
19
+ }
@@ -0,0 +1,15 @@
1
+ import { IsString, IsUUID } from "class-validator";
2
+
3
+ export class CloudResourceContext {
4
+ @IsUUID()
5
+ resourceId: string;
6
+
7
+ @IsString()
8
+ streamGroupId: string;
9
+
10
+ @IsString()
11
+ streamSessionId: string;
12
+
13
+ @IsUUID()
14
+ poolId: string;
15
+ }
@@ -0,0 +1,38 @@
1
+ import { IsEnum, IsOptional, IsUUID } from "class-validator";
2
+ import { CloudProvider } from "../types";
3
+
4
+ export class CloudSessionContext {
5
+ @IsOptional()
6
+ @IsUUID()
7
+ allocationRequestId?: string;
8
+
9
+ @IsOptional()
10
+ @IsUUID()
11
+ clientRequestId?: string;
12
+
13
+ @IsUUID()
14
+ cloudSessionId: string;
15
+
16
+ @IsOptional()
17
+ @IsUUID()
18
+ userId?: string;
19
+
20
+ @IsOptional()
21
+ @IsUUID()
22
+ gameId?: string;
23
+
24
+ @IsOptional()
25
+ @IsUUID()
26
+ ludeoId?: string;
27
+
28
+ @IsOptional()
29
+ @IsUUID()
30
+ poolId?: string;
31
+
32
+ @IsEnum(CloudProvider)
33
+ cloudProvider: CloudProvider;
34
+
35
+ @IsOptional()
36
+ @IsUUID()
37
+ resourceId?: string;
38
+ }
@@ -0,0 +1,11 @@
1
+ import { IsEnum, IsUUID } from "class-validator";
2
+ import { CloudProvider } from "../types";
3
+
4
+ export class CreateCloudResourceRequestContext {
5
+ @IsUUID()
6
+ poolId: string;
7
+ @IsUUID()
8
+ resourceId: string;
9
+ @IsEnum(CloudProvider)
10
+ cloudProvider: string;
11
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./cloud-resource-context";
2
+ export * from "./cloud-session-context";
3
+ export * from "./create-cloud-resource-request-context";
4
+ export * from "./pool-context";
@@ -0,0 +1,10 @@
1
+ import { IsEnum, IsUUID } from "class-validator";
2
+ import { CloudProvider } from "../types";
3
+
4
+ export class PoolContext {
5
+ @IsEnum(CloudProvider)
6
+ cloudProvider: CloudProvider;
7
+
8
+ @IsUUID()
9
+ poolId: string;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { applyDecorators } from "@nestjs/common";
2
+ import { ValidateNested } from "class-validator";
3
+ import { Type } from "class-transformer";
4
+
5
+ export function ValidateNestedType(typeFunction: () => any) {
6
+ return applyDecorators(ValidateNested(), Type(typeFunction));
7
+ }
@@ -0,0 +1,34 @@
1
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+ import {
5
+ AWSResourceCreationConfig,
6
+ CloudProviderRequestData,
7
+ CloudResourceCreationConfig,
8
+ } from "../types";
9
+
10
+ export class AllocateCloudResourceRequestPayload {
11
+ @ValidateNestedType(() => AWSResourceCreationConfig)
12
+ providerSettings: CloudResourceCreationConfig;
13
+ @ValidateNestedType(() => CloudProviderRequestData)
14
+ requestData: CloudProviderRequestData;
15
+ }
16
+
17
+ export class AllocateCloudResourceRequestEvent extends LudeoEvent {
18
+ static readonly EVENT_NAME = "cloud-pools.allocate-cloud-resource-request";
19
+
20
+ constructor(
21
+ payload: AllocateCloudResourceRequestPayload,
22
+ context: CloudSessionContext
23
+ ) {
24
+ super(AllocateCloudResourceRequestEvent.EVENT_NAME);
25
+ this.payload = payload;
26
+ this.context = context;
27
+ }
28
+
29
+ @ValidateNestedType(() => CloudSessionContext)
30
+ context: CloudSessionContext;
31
+
32
+ @ValidateNestedType(() => AllocateCloudResourceRequestPayload)
33
+ payload: AllocateCloudResourceRequestPayload;
34
+ }
@@ -0,0 +1,28 @@
1
+ import { IsString } from "class-validator";
2
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
3
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
4
+ import { LudeoEvent } from "../infra/ludeo-event";
5
+
6
+ export class AllocateCloudSessionFailedPayload {
7
+ @IsString()
8
+ error: string;
9
+ }
10
+ export class AllocateCloudSessionFailed extends LudeoEvent {
11
+ static readonly EVENT_NAME =
12
+ "cloud-session-allocator.allocate-cloud-session-failed";
13
+
14
+ constructor(
15
+ payload: AllocateCloudSessionFailedPayload,
16
+ context: CloudSessionContext
17
+ ) {
18
+ super(AllocateCloudSessionFailed.EVENT_NAME);
19
+ this.payload = payload;
20
+ this.context = context;
21
+ }
22
+
23
+ @ValidateNestedType(() => AllocateCloudSessionFailedPayload)
24
+ payload: AllocateCloudSessionFailedPayload;
25
+
26
+ @ValidateNestedType(() => CloudSessionContext)
27
+ context: CloudSessionContext;
28
+ }
@@ -0,0 +1,28 @@
1
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+ import { AllocationRequestData } from "../types";
5
+
6
+ export class AllocateCloudSessionRequestPayload {
7
+ @ValidateNestedType(() => AllocationRequestData)
8
+ requestData: AllocationRequestData;
9
+ }
10
+
11
+ export class AllocateCloudSessionRequest extends LudeoEvent {
12
+ static readonly EVENT_NAME = "cloud-sessions.allocate-cloud-session-request";
13
+
14
+ constructor(
15
+ payload: AllocateCloudSessionRequestPayload,
16
+ context: CloudSessionContext
17
+ ) {
18
+ super(AllocateCloudSessionRequest.EVENT_NAME);
19
+ this.payload = payload;
20
+ this.context = context;
21
+ }
22
+
23
+ @ValidateNestedType(() => AllocateCloudSessionRequestPayload)
24
+ payload: AllocateCloudSessionRequestPayload;
25
+
26
+ @ValidateNestedType(() => CloudSessionContext)
27
+ context: CloudSessionContext;
28
+ }
@@ -0,0 +1,28 @@
1
+ import { IsString } from "class-validator";
2
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
3
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
4
+ import { LudeoEvent } from "../infra/ludeo-event";
5
+
6
+ export class AllocatePoolItemFailedPayload {
7
+ @IsString()
8
+ error: string;
9
+ }
10
+
11
+ export class AllocatePoolItemFailed extends LudeoEvent {
12
+ static readonly EVENT_NAME = "cloud-pools.allocate-pool-item-failed";
13
+
14
+ constructor(
15
+ payload: AllocatePoolItemFailedPayload,
16
+ context: CloudSessionContext
17
+ ) {
18
+ super(AllocatePoolItemFailed.EVENT_NAME);
19
+ this.payload = payload;
20
+ this.context = context;
21
+ }
22
+
23
+ @ValidateNestedType(() => AllocatePoolItemFailedPayload)
24
+ payload: AllocatePoolItemFailedPayload;
25
+
26
+ @ValidateNestedType(() => CloudSessionContext)
27
+ context: CloudSessionContext;
28
+ }
@@ -0,0 +1,29 @@
1
+ import { LudeoEvent } from "../infra/ludeo-event";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
4
+ import { CloudProviderRequestData } from "../types";
5
+
6
+ export class AllocatePoolItemRequestPayload {
7
+ @ValidateNestedType(() => CloudProviderRequestData)
8
+ requestData: CloudProviderRequestData;
9
+ }
10
+
11
+ export class AllocatePoolItemRequestEvent extends LudeoEvent {
12
+ static readonly EVENT_NAME =
13
+ "cloud-session-allocator.allocate-pool-item-request";
14
+
15
+ constructor(
16
+ payload: AllocatePoolItemRequestPayload,
17
+ context: CloudSessionContext
18
+ ) {
19
+ super(AllocatePoolItemRequestEvent.EVENT_NAME);
20
+ this.payload = payload;
21
+ this.context = context;
22
+ }
23
+
24
+ @ValidateNestedType(() => CloudSessionContext)
25
+ context: CloudSessionContext;
26
+
27
+ @ValidateNestedType(() => AllocatePoolItemRequestPayload)
28
+ payload: AllocatePoolItemRequestPayload;
29
+ }
@@ -0,0 +1,28 @@
1
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+ import { AwsAllocationData, CloudProviderAllocationData } from "../types";
5
+
6
+ export class CloudResourceAllocatedPayload {
7
+ @ValidateNestedType(() => AwsAllocationData)
8
+ allocationData: CloudProviderAllocationData;
9
+ }
10
+
11
+ export class CloudResourceAllocatedEvent extends LudeoEvent {
12
+ static readonly EVENT_NAME = "cloud-resources.cloud-resource-allocated";
13
+
14
+ constructor(
15
+ payload: CloudResourceAllocatedPayload,
16
+ context: CloudSessionContext
17
+ ) {
18
+ super(CloudResourceAllocatedEvent.EVENT_NAME);
19
+ this.payload = payload;
20
+ this.context = context;
21
+ }
22
+
23
+ @ValidateNestedType(() => CloudSessionContext)
24
+ context: CloudSessionContext;
25
+
26
+ @ValidateNestedType(() => CloudResourceAllocatedPayload)
27
+ payload: CloudResourceAllocatedPayload;
28
+ }
@@ -0,0 +1,38 @@
1
+ import { LudeoEvent } from "../infra/ludeo-event";
2
+ import { AWSCreationResponse, CloudProvider, CreationResponse } from "../types";
3
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
4
+ import { IsEnum, IsOptional, IsString, IsUUID } from "class-validator";
5
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
6
+
7
+ export class CloudResourceCreatedPayload {
8
+ @IsUUID()
9
+ resourceId: string;
10
+ @IsUUID()
11
+ poolId: string;
12
+ @IsEnum(CloudProvider)
13
+ cloudProvider: CloudProvider;
14
+ @IsString()
15
+ @IsOptional()
16
+ clientRequestId?: string;
17
+ @IsOptional()
18
+ @IsString()
19
+ cloudSessionId?: string;
20
+ @ValidateNestedType(() => AWSCreationResponse)
21
+ creationResponse: CreationResponse;
22
+ }
23
+
24
+ export class CloudResourceCreated extends LudeoEvent {
25
+ static readonly EVENT_NAME = "cloud-resources.cloud-resource-created";
26
+
27
+ constructor({ payload = null, context = null }) {
28
+ super(CloudResourceCreated.EVENT_NAME);
29
+ this.payload = payload;
30
+ this.context = context;
31
+ }
32
+
33
+ @ValidateNestedType(() => CloudResourceCreatedPayload)
34
+ payload: CloudResourceCreatedPayload;
35
+
36
+ @ValidateNestedType(() => CloudSessionContext)
37
+ context: CloudSessionContext;
38
+ }
@@ -0,0 +1,56 @@
1
+ import { LudeoEvent } from "../infra/ludeo-event";
2
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
3
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
4
+ import {
5
+ IsEnum,
6
+ IsNotEmpty,
7
+ IsOptional,
8
+ IsString,
9
+ IsUUID,
10
+ } from "class-validator";
11
+ import { AWSCreationResponse, CloudProvider, CreationResponse } from "../types";
12
+
13
+ export class CloudResourceCreationFailedPayload {
14
+ @IsUUID()
15
+ resourceId: string;
16
+
17
+ @IsUUID()
18
+ poolId: string;
19
+
20
+ @IsEnum(CloudProvider)
21
+ cloudProvider: CloudProvider;
22
+
23
+ @IsOptional()
24
+ @IsUUID()
25
+ clientRequestId?: string;
26
+
27
+ @IsOptional()
28
+ @IsUUID()
29
+ cloudSessionId?: string;
30
+
31
+ @ValidateNestedType(() => AWSCreationResponse)
32
+ creationResponse: CreationResponse;
33
+
34
+ @IsString()
35
+ @IsNotEmpty()
36
+ error: string;
37
+ }
38
+
39
+ export class CloudResourceCreationFailedEvent extends LudeoEvent {
40
+ static readonly EVENT_NAME = "cloud-resources.cloud-resource-creation-failed";
41
+
42
+ constructor(
43
+ payload: CloudResourceCreationFailedPayload,
44
+ context: CloudSessionContext
45
+ ) {
46
+ super(CloudResourceCreationFailedEvent.EVENT_NAME);
47
+ this.payload = payload;
48
+ this.context = context;
49
+ }
50
+
51
+ @ValidateNestedType(() => CloudSessionContext)
52
+ context: CloudSessionContext;
53
+
54
+ @ValidateNestedType(() => CloudResourceCreationFailedPayload)
55
+ payload: CloudResourceCreationFailedPayload;
56
+ }
@@ -0,0 +1,39 @@
1
+ import { IsOptional, IsString, IsUUID } from "class-validator";
2
+ import { LudeoEvent } from "../infra/ludeo-event";
3
+ import { CloudResourceContext } from "../contexts/cloud-resource-context";
4
+ import { AWSResourceProviderSettings, CloudResourceStatus } from "../types";
5
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
6
+
7
+ export class CloudResourceStatusEventPayload {
8
+ @IsUUID()
9
+ resourceId: string;
10
+
11
+ @ValidateNestedType(() => AWSResourceProviderSettings)
12
+ providerSettings: AWSResourceProviderSettings;
13
+
14
+ @IsString()
15
+ status: CloudResourceStatus;
16
+
17
+ @IsOptional()
18
+ @IsString()
19
+ error?: string;
20
+ }
21
+
22
+ export class CloudResourceStatusEvent extends LudeoEvent {
23
+ static readonly EVENT_NAME = "cloud-resource-monitor.cloud-resource-status";
24
+
25
+ constructor(
26
+ payload: CloudResourceStatusEventPayload,
27
+ context: CloudResourceContext
28
+ ) {
29
+ super(CloudResourceStatusEvent.EVENT_NAME);
30
+ this.payload = payload;
31
+ this.context = context;
32
+ }
33
+
34
+ @ValidateNestedType(() => CloudResourceContext)
35
+ context: CloudResourceContext;
36
+
37
+ @ValidateNestedType(() => CloudResourceStatusEventPayload)
38
+ payload: CloudResourceStatusEventPayload;
39
+ }
@@ -0,0 +1,29 @@
1
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+ import { AwsAllocationData, CloudProviderAllocationData } from "../types";
5
+
6
+ export class CloudSessionAllocatedPayload {
7
+ @ValidateNestedType(() => AwsAllocationData)
8
+ allocationData?: CloudProviderAllocationData;
9
+ }
10
+
11
+ export class CloudSessionAllocated extends LudeoEvent {
12
+ static readonly EVENT_NAME =
13
+ "cloud-session-allocator.cloud-session-allocated";
14
+
15
+ constructor(
16
+ payload: CloudSessionAllocatedPayload,
17
+ context: CloudSessionContext
18
+ ) {
19
+ super(CloudSessionAllocated.EVENT_NAME);
20
+ this.payload = payload;
21
+ this.context = context;
22
+ }
23
+
24
+ @ValidateNestedType(() => CloudSessionAllocatedPayload)
25
+ payload: CloudSessionAllocatedPayload;
26
+
27
+ @ValidateNestedType(() => CloudSessionContext)
28
+ context: CloudSessionContext;
29
+ }
@@ -0,0 +1,17 @@
1
+ import { CloudSessionContext } from "../contexts/cloud-session-context";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+
5
+ export class CloudSessionTerminated extends LudeoEvent {
6
+ static readonly EVENT_NAME = "cloud-sessions.cloud-session-terminated";
7
+
8
+ constructor(context: CloudSessionContext) {
9
+ super(CloudSessionTerminated.EVENT_NAME);
10
+ this.context = context;
11
+ }
12
+
13
+ @ValidateNestedType(() => CloudSessionContext)
14
+ context: CloudSessionContext;
15
+
16
+ payload: never;
17
+ }