@nodeswork/nam
Version:
Applet manager for Nodeswork containers.
87 lines (86 loc) • 2.55 kB
TypeScript
/// <reference types="request" />
import { Request } from 'request';
import { Docker } from 'docker-cli-js';
import { CronJob } from 'cron';
import { metrics } from '@nodeswork/utils';
import { LocalStorage } from './utils';
import { nam } from './def';
export interface AuthOptions {
email: string;
password: string;
deviceName: string;
}
export interface AppletManagerOptions {
appPath: string;
nodesworkServer: string;
port: number;
debug?: boolean;
dev?: boolean;
pid?: number;
token?: string;
}
export declare class AppletManager implements nam.INAM {
private options;
ls: LocalStorage;
docker: Docker;
network: Network;
containerProxy: ContainerProxy;
cronJobs: WorkerCronJob[];
private serverApi;
constructor(options: AppletManagerOptions);
authenticated(): boolean;
/**
* Authenticate the container by email and password.
*
* @throws UNAUTHENTICATED_ERROR
*/
authenticate(options: AuthOptions): Promise<void>;
isStarted(): boolean;
/**
* Start the container.
*
* @throws UNAUTHENTICATED_ERROR
*/
startServer(): Promise<void>;
/**
* Stop the container.
*
* @throws UNAUTHENTICATED_ERROR
*/
stopServer(): Promise<void>;
install(options: nam.AppletImage): Promise<void>;
images(): Promise<nam.AppletImage[]>;
run(options: nam.AppletRunOptions): Promise<void>;
kill(options: nam.RouteOptions): Promise<void>;
ps(): Promise<nam.AppletStatus[]>;
refreshWorkerCrons(): Promise<void>;
executeCronJob(job: WorkerCronJob): Promise<any>;
updateExecutionMetrics(executionId: string, options: metrics.UpdateMetricsDataOptions<any>): Promise<Request>;
work(options: nam.WorkOptions): Promise<any>;
request<T>(options: nam.RequestOptions): Promise<nam.RequestResponse | T>;
operateAccount(options: nam.AccountOperateOptions): Promise<any>;
route(options: nam.RouteOptions): Promise<nam.Route>;
updateDevice(): Promise<void>;
checkEnvironment(): Promise<void>;
private ensureMongo(options);
private name(options);
private installContainerProxy();
}
export interface Network {
subnet: string;
gateway: string;
containers: object[];
}
export interface ContainerProxy {
version: string;
latestVersion: string;
}
export interface WorkerCronJob {
jobUUID: string;
userApplet: string;
appletId: string;
image: nam.AppletImage;
worker: nam.Worker;
schedule: string;
cronJob?: CronJob;
}