@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,45 @@
1
+ import { IsEnum, IsString, IsUUID } from "class-validator";
2
+ import { CreateCloudResourceRequestContext } from "../contexts/create-cloud-resource-request-context";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
5
+ import {
6
+ AWSResourceCreationConfig,
7
+ CloudProvider,
8
+ CloudResourceCreationConfig,
9
+ } from "../types";
10
+
11
+ export class CreateCloudResourceRequestPayload {
12
+ @IsUUID()
13
+ poolId: string;
14
+
15
+ @IsUUID()
16
+ resourceId: string;
17
+
18
+ @ValidateNestedType(() => AWSResourceCreationConfig)
19
+ providerSettings: CloudResourceCreationConfig;
20
+
21
+ @IsEnum(CloudProvider)
22
+ cloudProvider: CloudProvider;
23
+
24
+ @IsString()
25
+ cloudToken: string;
26
+ }
27
+
28
+ export class CreateCloudResourceRequestEvent extends LudeoEvent {
29
+ static readonly EVENT_NAME = "cloud-pools.create-cloud-resource-request";
30
+
31
+ constructor(
32
+ payload: CreateCloudResourceRequestPayload,
33
+ context: CreateCloudResourceRequestContext
34
+ ) {
35
+ super(CreateCloudResourceRequestEvent.EVENT_NAME);
36
+ this.payload = payload;
37
+ this.context = context;
38
+ }
39
+
40
+ @ValidateNestedType(() => CreateCloudResourceRequestContext)
41
+ context: CreateCloudResourceRequestContext;
42
+
43
+ @ValidateNestedType(() => CreateCloudResourceRequestPayload)
44
+ payload: CreateCloudResourceRequestPayload;
45
+ }
@@ -0,0 +1,23 @@
1
+ export * from "./allocate-cloud-resource-request.event";
2
+ export * from "./allocate-cloud-session-failed.event";
3
+ export * from "./allocate-cloud-session-request.event";
4
+ export * from "./allocate-pool-item-failed.event";
5
+ export * from "./allocate-pool-item-request.event";
6
+ export * from "./cloud-resource-allocated.event";
7
+ export * from "./cloud-resource-created.event";
8
+ export * from "./cloud-resource-creation-failed.event";
9
+ export * from "./cloud-resource-status.event";
10
+ export * from "./cloud-session-allocated.event";
11
+ export * from "./cloud-session-ended.event";
12
+ export * from "./create-cloud-resource-request.event";
13
+ export * from "./monitor-pool-task.event";
14
+ export * from "./pool-created.event";
15
+ export * from "./pool-item-allocated.event";
16
+ export * from "./pool-resize-success.event";
17
+ export * from "./pool-status.event";
18
+ export * from "./pool-updated.event";
19
+ export * from "./remove-scheduled-task-request.event";
20
+ export * from "./resize-pool-request.event";
21
+ export * from "./schedule-task-request.event";
22
+ export * from "./set-pool.event";
23
+ export * from "./token-required.event";
@@ -0,0 +1,21 @@
1
+ import { IsUUID } from "class-validator";
2
+ import { LudeoEvent } from "../infra/ludeo-event";
3
+
4
+ export class MonitorPoolTaskEventPayload {
5
+ @IsUUID()
6
+ poolId: string;
7
+ }
8
+
9
+ export class MonitorPoolTaskEvent extends LudeoEvent {
10
+ static readonly EVENT_NAME = "cloud-pools.monitor-pool-task";
11
+
12
+ constructor(payload: MonitorPoolTaskEventPayload, context: never) {
13
+ super(MonitorPoolTaskEvent.EVENT_NAME);
14
+ this.payload = payload;
15
+ this.context = context;
16
+ }
17
+
18
+ context: never;
19
+
20
+ payload: MonitorPoolTaskEventPayload;
21
+ }
@@ -0,0 +1,20 @@
1
+ import { LudeoEvent } from "../infra/ludeo-event";
2
+ import { PoolContext } from "../contexts/pool-context";
3
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
4
+ import { CloudPool } from "../models/cloud-pool";
5
+
6
+ export class PoolCreatedEvent extends LudeoEvent {
7
+ static readonly EVENT_NAME = "cloud-pools.pool-created";
8
+
9
+ constructor(payload: CloudPool, context: PoolContext) {
10
+ super(PoolCreatedEvent.EVENT_NAME);
11
+ this.payload = payload;
12
+ this.context = context;
13
+ }
14
+
15
+ @ValidateNestedType(() => PoolContext)
16
+ context: PoolContext;
17
+
18
+ @ValidateNestedType(() => CloudPool)
19
+ payload: CloudPool;
20
+ }
@@ -0,0 +1,20 @@
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 { PoolItemAllocatedPayload } from "../types";
5
+
6
+ export class PoolItemAllocatedEvent extends LudeoEvent {
7
+ static readonly EVENT_NAME = "cloud-pools.pool-item-allocated";
8
+
9
+ constructor(payload: PoolItemAllocatedPayload, context: CloudSessionContext) {
10
+ super(PoolItemAllocatedEvent.EVENT_NAME);
11
+ this.payload = payload;
12
+ this.context = context;
13
+ }
14
+
15
+ @ValidateNestedType(() => CloudSessionContext)
16
+ context: CloudSessionContext;
17
+
18
+ @ValidateNestedType(() => PoolItemAllocatedPayload)
19
+ payload: PoolItemAllocatedPayload;
20
+ }
@@ -0,0 +1,25 @@
1
+ import { IsUUID } from "class-validator";
2
+ import { LudeoEvent } from "../infra/ludeo-event";
3
+ import { PoolContext } from "../contexts/pool-context";
4
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
5
+
6
+ export class PoolResizeSuccessEventPayload {
7
+ @IsUUID()
8
+ poolId: string;
9
+ }
10
+
11
+ export class PoolResizeSuccessEvent extends LudeoEvent {
12
+ static readonly EVENT_NAME = "cloud-resources.pool-resize-success";
13
+
14
+ constructor(payload: PoolResizeSuccessEventPayload, context: PoolContext) {
15
+ super(PoolResizeSuccessEvent.EVENT_NAME);
16
+ this.payload = payload;
17
+ this.context = context;
18
+ }
19
+
20
+ @ValidateNestedType(() => PoolContext)
21
+ context: PoolContext;
22
+
23
+ @ValidateNestedType(() => PoolResizeSuccessEventPayload)
24
+ payload: PoolResizeSuccessEventPayload;
25
+ }
@@ -0,0 +1,30 @@
1
+ import { IsObject, IsString, IsUUID, ValidateNested } from "class-validator";
2
+ import { CloudPoolStatus, CloudResourcesStatusMap } from "../types";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+ import { PoolContext } from "../contexts/pool-context";
5
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
6
+
7
+ export class PoolStatusEventPayload {
8
+ @IsUUID()
9
+ poolId: string;
10
+ @IsString()
11
+ state: CloudPoolStatus;
12
+ @IsObject()
13
+ resources: CloudResourcesStatusMap;
14
+ }
15
+
16
+ export class PoolStatusEvent extends LudeoEvent {
17
+ static readonly EVENT_NAME = "cloud-pools.pool-status";
18
+
19
+ constructor(payload: PoolStatusEventPayload, context: PoolContext) {
20
+ super(PoolStatusEvent.EVENT_NAME);
21
+ this.payload = payload;
22
+ this.context = context;
23
+ }
24
+
25
+ @ValidateNestedType(() => PoolContext)
26
+ context: PoolContext;
27
+
28
+ @ValidateNestedType(() => PoolStatusEventPayload)
29
+ payload: PoolStatusEventPayload;
30
+ }
@@ -0,0 +1,20 @@
1
+ import { LudeoEvent } from "../infra/ludeo-event";
2
+ import { PoolContext } from "../contexts/pool-context";
3
+ import { CloudPool } from "../models/cloud-pool";
4
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
5
+
6
+ export class PoolUpdatedEvent extends LudeoEvent {
7
+ static readonly EVENT_NAME = "cloud-pools.pool-updated";
8
+
9
+ constructor(payload: CloudPool, context: PoolContext) {
10
+ super(PoolUpdatedEvent.EVENT_NAME);
11
+ this.payload = payload;
12
+ this.context = context;
13
+ }
14
+
15
+ @ValidateNestedType(() => PoolContext)
16
+ context: PoolContext;
17
+
18
+ @ValidateNestedType(() => CloudPool)
19
+ payload: CloudPool;
20
+ }
@@ -0,0 +1,22 @@
1
+ import { IsString, ValidateNested } from "class-validator";
2
+ import { LudeoEvent } from "../infra/ludeo-event";
3
+
4
+ class RemoveScheduledTaskRequestEventData {
5
+ @IsString()
6
+ key: string;
7
+ }
8
+
9
+ export class RemoveScheduledTaskRequest extends LudeoEvent {
10
+ static readonly EVENT_NAME = "task-scheduler.remove-scheduled-task-request";
11
+
12
+ constructor(payload: RemoveScheduledTaskRequestEventData, context?: never) {
13
+ super(RemoveScheduledTaskRequest.EVENT_NAME);
14
+ this.payload = payload;
15
+ this.context = context;
16
+ }
17
+
18
+ context?: never;
19
+
20
+ @ValidateNested()
21
+ payload: RemoveScheduledTaskRequestEventData;
22
+ }
@@ -0,0 +1,31 @@
1
+ import { IsEnum, IsNumber, IsUUID } from "class-validator";
2
+ import { LudeoEvent } from "../infra/ludeo-event";
3
+ import { PoolContext } from "../contexts/pool-context";
4
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
5
+ import { CloudPoolConfiguration, CloudProvider } from "../types";
6
+
7
+ export class ResizePoolRequestEventPayload extends CloudPoolConfiguration {
8
+ providerSettings: any;
9
+ @IsEnum(CloudProvider)
10
+ cloudProvider: CloudProvider;
11
+ @IsUUID()
12
+ poolId: string;
13
+ @IsNumber()
14
+ desiredSize: number;
15
+ }
16
+
17
+ export class ResizePoolRequestEvent extends LudeoEvent {
18
+ static readonly EVENT_NAME = "cloud-pools.pool-resize-request";
19
+
20
+ constructor(payload: ResizePoolRequestEventPayload, context: PoolContext) {
21
+ super(ResizePoolRequestEvent.EVENT_NAME);
22
+ this.payload = payload;
23
+ this.context = context;
24
+ }
25
+
26
+ @ValidateNestedType(() => PoolContext)
27
+ context: PoolContext;
28
+
29
+ @ValidateNestedType(() => ResizePoolRequestEventPayload)
30
+ payload: ResizePoolRequestEventPayload;
31
+ }
@@ -0,0 +1,50 @@
1
+ import { IsOptional, IsString, ValidateNested } from "class-validator";
2
+ import { LudeoEvent } from "../infra/ludeo-event";
3
+
4
+ export class SchedulingData {
5
+ repeat?: number; // number of times to repeat the task. null - no repeat, 0 (endless), 1, 2...
6
+ interval?: number; // the time interval between repeats in milliseconds
7
+ retries?: number; // number of retries in case of failure. default 3
8
+ }
9
+
10
+ export enum JobType {
11
+ KafkaEvent = "KAFKA_EVENT",
12
+ }
13
+
14
+ export class KafkaEventJobData {
15
+ @IsString()
16
+ eventTopic: string;
17
+ eventData: any;
18
+ }
19
+
20
+ export class Job {
21
+ @IsString()
22
+ type: JobType;
23
+ @ValidateNested()
24
+ jobData: KafkaEventJobData;
25
+ }
26
+
27
+ class ScheduleTaskRequestEventData {
28
+ @IsString()
29
+ key: string;
30
+ @IsOptional()
31
+ sourceService?: string;
32
+ @ValidateNested()
33
+ scheduling: SchedulingData;
34
+ @ValidateNested()
35
+ job: Job;
36
+ }
37
+ export class ScheduleTaskRequest extends LudeoEvent {
38
+ static readonly EVENT_NAME = "task-scheduler.schedule-task-request";
39
+
40
+ constructor(payload: ScheduleTaskRequestEventData, context?: never) {
41
+ super(ScheduleTaskRequest.EVENT_NAME);
42
+ this.payload = payload;
43
+ this.context = context;
44
+ }
45
+
46
+ context?: never;
47
+
48
+ @ValidateNested()
49
+ payload: ScheduleTaskRequestEventData;
50
+ }
@@ -0,0 +1,20 @@
1
+ import { PoolContext } from "../contexts/pool-context";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+ import { LudeoEvent } from "../infra/ludeo-event";
4
+ import { CloudPoolConfiguration } from "../types";
5
+
6
+ export class SetPoolEvent extends LudeoEvent {
7
+ static readonly EVENT_NAME = "cloud-pools.set-pool";
8
+
9
+ constructor(payload: Partial<CloudPoolConfiguration>, context: PoolContext) {
10
+ super(SetPoolEvent.EVENT_NAME);
11
+ this.payload = payload;
12
+ this.context = context;
13
+ }
14
+
15
+ @ValidateNestedType(() => PoolContext)
16
+ context: PoolContext;
17
+
18
+ @ValidateNestedType(() => CloudPoolConfiguration)
19
+ payload: Partial<CloudPoolConfiguration>;
20
+ }
@@ -0,0 +1,32 @@
1
+ import { LudeoEvent } from "../infra/ludeo-event";
2
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
3
+
4
+ export class TokenRequiredEventData {
5
+ defaultUser: string;
6
+ authSource: string;
7
+ }
8
+
9
+ export class TokenRequiredEventPayload {
10
+ id: string;
11
+ type: string;
12
+ userId: string;
13
+ expireAt: number;
14
+ quota: number;
15
+ isUnique: boolean;
16
+ data: TokenRequiredEventData;
17
+ }
18
+
19
+ export class TokenRequired extends LudeoEvent {
20
+ static readonly EVENT_NAME = "tokens.token-required";
21
+
22
+ @ValidateNestedType(() => TokenRequiredEventPayload)
23
+ payload: TokenRequiredEventPayload;
24
+
25
+ context: never;
26
+
27
+ constructor(payload: TokenRequiredEventPayload, context?: never) {
28
+ super(TokenRequired.EVENT_NAME);
29
+ this.payload = payload;
30
+ this.context = context as never;
31
+ }
32
+ }
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./contexts";
2
+ export * from "./models";
3
+ export * from "./events";
4
+ export * from "./types";
@@ -0,0 +1,22 @@
1
+ import { IsInt, IsNotEmpty, IsString, IsUUID } from "class-validator";
2
+
3
+ export class LudeoEvent {
4
+ constructor(eventName: string) {
5
+ this.eventName = eventName;
6
+ this.timestamp = Date.now();
7
+ this.eventId = crypto.randomUUID();
8
+ }
9
+
10
+ @IsUUID()
11
+ eventId: string;
12
+
13
+ @IsString()
14
+ eventVersion = "3.0";
15
+
16
+ @IsString()
17
+ @IsNotEmpty()
18
+ eventName: string;
19
+
20
+ @IsInt()
21
+ timestamp: number;
22
+ }
@@ -0,0 +1,14 @@
1
+ import {
2
+ CloudPoolConfiguration,
3
+ CloudPoolStatus,
4
+ CloudResourcesMap,
5
+ } from "../types";
6
+
7
+ export class CloudPool {
8
+ id: string;
9
+ status: CloudPoolStatus;
10
+ createdAt: number;
11
+ updatedAt?: number;
12
+ config: CloudPoolConfiguration;
13
+ resources?: CloudResourcesMap;
14
+ }
@@ -0,0 +1 @@
1
+ export * from "./cloud-pool";
@@ -0,0 +1,122 @@
1
+ import {
2
+ IsDefined,
3
+ IsUUID,
4
+ IsString,
5
+ IsNotEmpty,
6
+ IsOptional,
7
+ IsNumber,
8
+ IsEnum,
9
+ } from "class-validator";
10
+ import { ValidateNestedType } from "../decorators/validate-nested-type.decorator";
11
+ import { GameCast } from "@ludeo/aws-gamecast-sdk";
12
+
13
+ export class AWSRequestData {
14
+ @IsString()
15
+ @IsNotEmpty()
16
+ signalRequest: string;
17
+ }
18
+
19
+ export type CloudProviderRequest = AWSRequestData;
20
+
21
+ export class CloudProviderRequestData {
22
+ @IsUUID()
23
+ authToken: string;
24
+
25
+ @IsUUID()
26
+ appToken: string;
27
+
28
+ @IsDefined()
29
+ @ValidateNestedType(() => AWSRequestData)
30
+ cloudProviderRequest: CloudProviderRequest;
31
+ }
32
+
33
+ export enum CloudProvider {
34
+ AWS = "aws",
35
+ }
36
+
37
+ export class AWSResourceCreationConfig {
38
+ streamGroupId: string;
39
+ identifier: GameCast.Identifier;
40
+ additionalEnvironmentVariables?: GameCast.EnvironmentVariables;
41
+ protocol?: GameCast.Protocol;
42
+ connectionTimeoutSeconds?: GameCast.ConnectionTimeoutSeconds;
43
+ sessionLengthSeconds?: GameCast.SessionLengthSeconds;
44
+ applicationIdentifier?: GameCast.Identifier;
45
+ region?: string;
46
+ }
47
+
48
+ export type CloudResourceCreationConfig = AWSResourceCreationConfig;
49
+
50
+ export enum CloudResourceStatus {
51
+ Allocated = "allocated",
52
+ Available = "available",
53
+ Creating = "creating",
54
+ Allocating = "allocating",
55
+ Error = "error",
56
+ Terminated = "terminated",
57
+ Terminating = "terminating",
58
+ }
59
+
60
+ export class AllocateCloudResourceRequestData {
61
+ providerSettings: CloudResourceCreationConfig;
62
+ requestData: CloudProviderRequestData;
63
+ }
64
+
65
+ export class AwsAllocationData {
66
+ streamGroupId: string;
67
+ streamSessionId: string;
68
+ signalResponse: string;
69
+ }
70
+
71
+ export type CloudProviderAllocationData = AwsAllocationData;
72
+
73
+ export class AWSResourceProviderSettings {
74
+ streamSessionId: string;
75
+ streamGroupId: string;
76
+ }
77
+
78
+ export class AWSCreationResponse {
79
+ @IsOptional()
80
+ signalResponse?: GameCast.SignalResponse;
81
+
82
+ @IsString()
83
+ @IsNotEmpty()
84
+ streamSessionId: string;
85
+ }
86
+
87
+ export type CreationResponse = AWSCreationResponse;
88
+
89
+ export enum CloudPoolStatus {
90
+ Active = "active",
91
+ Scaling = "scaling",
92
+ Terminated = "terminated",
93
+ }
94
+
95
+ export class CloudPoolConfiguration {
96
+ providerSettings?: CloudResourceCreationConfig;
97
+ @IsEnum(CloudProvider)
98
+ cloudProvider: CloudProvider;
99
+ @IsUUID()
100
+ poolId: string;
101
+ poolScaleConfiguration: PoolScaleConfiguration;
102
+ }
103
+
104
+ export type CloudResourcesMap = Record<string, { status: CloudResourceStatus }>;
105
+
106
+ export class PoolScaleConfiguration {
107
+ @IsNumber()
108
+ size: number;
109
+ }
110
+
111
+ export class PoolItemAllocatedPayload {
112
+ @ValidateNestedType(() => AwsAllocationData)
113
+ allocationData?: CloudProviderAllocationData;
114
+ }
115
+
116
+ export type CloudResourcesStatusMap = Record<CloudResourceStatus, number>;
117
+
118
+ export class AllocationRequestData {
119
+ authToken: string;
120
+ appToken: string;
121
+ cloudProviderRequest: CloudProviderRequest;
122
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "declaration": true,
5
+ "removeComments": true,
6
+ "emitDecoratorMetadata": true,
7
+ "experimentalDecorators": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "target": "ES2021",
10
+ "sourceMap": true,
11
+ "outDir": "./dist",
12
+ "baseUrl": "./",
13
+ "incremental": true,
14
+ "skipLibCheck": true,
15
+ "strictNullChecks": false,
16
+ "noImplicitAny": false,
17
+ "strictBindCallApply": false,
18
+ "forceConsistentCasingInFileNames": false,
19
+ "noFallthroughCasesInSwitch": false,
20
+ "typeRoots": ["src/common/aerospike", "./node_modules/@types"],
21
+ "paths": {
22
+ "*": ["src/types/*"]
23
+ }
24
+ },
25
+ "include": ["src/**/*", "test/**/*"],
26
+ "watchOptions": {
27
+ // Use a dynamic polling instead of system’s native events for file changes.
28
+ "watchFile": "dynamicPriorityPolling",
29
+ "watchDirectory": "dynamicPriorityPolling",
30
+ "excludeDirectories": ["**/node_modules", "dist"]
31
+ }
32
+ }