@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.
- package/dist/contexts/cloud-resource-context.d.ts +6 -0
- package/dist/contexts/cloud-resource-context.js +33 -0
- package/dist/contexts/cloud-resource-context.js.map +1 -0
- package/dist/contexts/cloud-session-context.d.ts +12 -0
- package/dist/contexts/cloud-session-context.js +61 -0
- package/dist/contexts/cloud-session-context.js.map +1 -0
- package/dist/contexts/create-cloud-resource-request-context.d.ts +5 -0
- package/dist/contexts/create-cloud-resource-request-context.js +30 -0
- package/dist/contexts/create-cloud-resource-request-context.js.map +1 -0
- package/dist/contexts/index.d.ts +4 -0
- package/dist/contexts/index.js +21 -0
- package/dist/contexts/index.js.map +1 -0
- package/dist/contexts/pool-context.d.ts +5 -0
- package/dist/contexts/pool-context.js +26 -0
- package/dist/contexts/pool-context.js.map +1 -0
- package/dist/decorators/validate-nested-type.decorator.d.ts +1 -0
- package/dist/decorators/validate-nested-type.decorator.js +10 -0
- package/dist/decorators/validate-nested-type.decorator.js.map +1 -0
- package/dist/events/allocate-cloud-resource-request.event.d.ts +13 -0
- package/dist/events/allocate-cloud-resource-request.event.js +45 -0
- package/dist/events/allocate-cloud-resource-request.event.js.map +1 -0
- package/dist/events/allocate-cloud-session-failed.event.d.ts +11 -0
- package/dist/events/allocate-cloud-session-failed.event.js +41 -0
- package/dist/events/allocate-cloud-session-failed.event.js.map +1 -0
- package/dist/events/allocate-cloud-session-request.event.d.ts +12 -0
- package/dist/events/allocate-cloud-session-request.event.js +41 -0
- package/dist/events/allocate-cloud-session-request.event.js.map +1 -0
- package/dist/events/allocate-pool-item-failed.event.d.ts +11 -0
- package/dist/events/allocate-pool-item-failed.event.js +41 -0
- package/dist/events/allocate-pool-item-failed.event.js.map +1 -0
- package/dist/events/allocate-pool-item-request.event.d.ts +12 -0
- package/dist/events/allocate-pool-item-request.event.js +41 -0
- package/dist/events/allocate-pool-item-request.event.js.map +1 -0
- package/dist/events/cloud-resource-allocated.event.d.ts +12 -0
- package/dist/events/cloud-resource-allocated.event.js +41 -0
- package/dist/events/cloud-resource-allocated.event.js.map +1 -0
- package/dist/events/cloud-resource-created.event.d.ts +20 -0
- package/dist/events/cloud-resource-created.event.js +64 -0
- package/dist/events/cloud-resource-created.event.js.map +1 -0
- package/dist/events/cloud-resource-creation-failed.event.d.ts +18 -0
- package/dist/events/cloud-resource-creation-failed.event.js +69 -0
- package/dist/events/cloud-resource-creation-failed.event.js.map +1 -0
- package/dist/events/cloud-resource-status.event.d.ts +15 -0
- package/dist/events/cloud-resource-status.event.js +55 -0
- package/dist/events/cloud-resource-status.event.js.map +1 -0
- package/dist/events/cloud-session-allocated.event.d.ts +12 -0
- package/dist/events/cloud-session-allocated.event.js +41 -0
- package/dist/events/cloud-session-allocated.event.js.map +1 -0
- package/dist/events/cloud-session-ended.event.d.ts +8 -0
- package/dist/events/cloud-session-ended.event.js +28 -0
- package/dist/events/cloud-session-ended.event.js.map +1 -0
- package/dist/events/create-cloud-resource-request.event.d.ts +16 -0
- package/dist/events/create-cloud-resource-request.event.js +58 -0
- package/dist/events/create-cloud-resource-request.event.js.map +1 -0
- package/dist/events/index.d.ts +23 -0
- package/dist/events/index.js +40 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/monitor-pool-task.event.d.ts +10 -0
- package/dist/events/monitor-pool-task.event.js +31 -0
- package/dist/events/monitor-pool-task.event.js.map +1 -0
- package/dist/events/pool-created.event.d.ts +9 -0
- package/dist/events/pool-created.event.js +34 -0
- package/dist/events/pool-created.event.js.map +1 -0
- package/dist/events/pool-item-allocated.event.d.ts +9 -0
- package/dist/events/pool-item-allocated.event.js +34 -0
- package/dist/events/pool-item-allocated.event.js.map +1 -0
- package/dist/events/pool-resize-success.event.d.ts +11 -0
- package/dist/events/pool-resize-success.event.js +41 -0
- package/dist/events/pool-resize-success.event.js.map +1 -0
- package/dist/events/pool-status.event.d.ts +14 -0
- package/dist/events/pool-status.event.js +50 -0
- package/dist/events/pool-status.event.js.map +1 -0
- package/dist/events/pool-updated.event.d.ts +9 -0
- package/dist/events/pool-updated.event.js +34 -0
- package/dist/events/pool-updated.event.js.map +1 -0
- package/dist/events/remove-scheduled-task-request.event.d.ts +11 -0
- package/dist/events/remove-scheduled-task-request.event.js +34 -0
- package/dist/events/remove-scheduled-task-request.event.js.map +1 -0
- package/dist/events/resize-pool-request.event.d.ts +15 -0
- package/dist/events/resize-pool-request.event.js +50 -0
- package/dist/events/resize-pool-request.event.js.map +1 -0
- package/dist/events/schedule-task-request.event.d.ts +30 -0
- package/dist/events/schedule-task-request.event.js +71 -0
- package/dist/events/schedule-task-request.event.js.map +1 -0
- package/dist/events/set-pool.event.d.ts +9 -0
- package/dist/events/set-pool.event.js +34 -0
- package/dist/events/set-pool.event.js.map +1 -0
- package/dist/events/token-required.event.d.ts +20 -0
- package/dist/events/token-required.event.js +34 -0
- package/dist/events/token-required.event.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/ludeo-event.d.ts +7 -0
- package/dist/infra/ludeo-event.js +40 -0
- package/dist/infra/ludeo-event.js.map +1 -0
- package/dist/models/cloud-pool.d.ts +9 -0
- package/dist/models/cloud-pool.js +7 -0
- package/dist/models/cloud-pool.js.map +1 -0
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.js +18 -0
- package/dist/models/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/index.d.ts +81 -0
- package/dist/types/index.js +112 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +19 -0
- package/src/contexts/cloud-resource-context.ts +15 -0
- package/src/contexts/cloud-session-context.ts +38 -0
- package/src/contexts/create-cloud-resource-request-context.ts +11 -0
- package/src/contexts/index.ts +4 -0
- package/src/contexts/pool-context.ts +10 -0
- package/src/decorators/validate-nested-type.decorator.ts +7 -0
- package/src/events/allocate-cloud-resource-request.event.ts +34 -0
- package/src/events/allocate-cloud-session-failed.event.ts +28 -0
- package/src/events/allocate-cloud-session-request.event.ts +28 -0
- package/src/events/allocate-pool-item-failed.event.ts +28 -0
- package/src/events/allocate-pool-item-request.event.ts +29 -0
- package/src/events/cloud-resource-allocated.event.ts +28 -0
- package/src/events/cloud-resource-created.event.ts +38 -0
- package/src/events/cloud-resource-creation-failed.event.ts +56 -0
- package/src/events/cloud-resource-status.event.ts +39 -0
- package/src/events/cloud-session-allocated.event.ts +29 -0
- package/src/events/cloud-session-ended.event.ts +17 -0
- package/src/events/create-cloud-resource-request.event.ts +45 -0
- package/src/events/index.ts +23 -0
- package/src/events/monitor-pool-task.event.ts +21 -0
- package/src/events/pool-created.event.ts +20 -0
- package/src/events/pool-item-allocated.event.ts +20 -0
- package/src/events/pool-resize-success.event.ts +25 -0
- package/src/events/pool-status.event.ts +30 -0
- package/src/events/pool-updated.event.ts +20 -0
- package/src/events/remove-scheduled-task-request.event.ts +22 -0
- package/src/events/resize-pool-request.event.ts +31 -0
- package/src/events/schedule-task-request.event.ts +50 -0
- package/src/events/set-pool.event.ts +20 -0
- package/src/events/token-required.event.ts +32 -0
- package/src/index.ts +4 -0
- package/src/infra/ludeo-event.ts +22 -0
- package/src/models/cloud-pool.ts +14 -0
- package/src/models/index.ts +1 -0
- package/src/types/index.ts +122 -0
- 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,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
|
+
}
|