sesterce-cli
Version:
A powerful command-line interface tool for managing Sesterce Cloud services. Sesterce CLI provides easy access to GPU cloud instances, AI inference services, container registries, and SSH key management directly from your terminal.
62 lines (57 loc) • 1.68 kB
text/typescript
import { UseCase } from "@/core/domain/use-case";
import { Either, left, right } from "@/core/logic/either";
import { ApiClientProvider } from "@/providers/api-client-provider";
import { GpuCloudInstance } from "../../domain/instance/instance";
import { LaunchInstanceError } from "./errors/launch-instance-error";
import { LaunchInstanceDto } from "./launch-instance-dto";
export class LaunchInstance
implements UseCase<LaunchInstanceDto, GpuCloudInstance, LaunchInstanceError>
{
constructor(private readonly apiClient: ApiClientProvider) {}
async execute({
name,
cloudProvider,
instanceId,
volumeId,
region,
os,
dockerImage,
sshKeyId,
}: LaunchInstanceDto): Promise<
Either<LaunchInstanceError, GpuCloudInstance>
> {
try {
const response = await this.apiClient.request<GpuCloudInstance>(
"/gpu-cloud/instances",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
name,
cloudProvider,
instanceId,
volumeId,
region,
vm: { os },
dockerContainer: dockerImage
? {
image: `${dockerImage.image}:${dockerImage.tag}`,
}
: null,
sshKeyId,
}),
}
);
if (!response) {
return left(new LaunchInstanceError("Instance not created"));
}
return right(response);
} catch (error) {
return left(
new LaunchInstanceError(
error instanceof Error ? error.message : "Unexpected error occurred."
)
);
}
}
}