jamsocket
Version:
A CLI for the Jamsocket platform
265 lines (264 loc) • 8.75 kB
TypeScript
import { EventStreamReturn } from './lib/request';
import type { JamsocketConfig } from './jamsocket-config';
import * as https from 'https';
export type CheckAuthResult = {
status: 'ok';
accounts: string[];
is_admin: boolean;
};
export type SpawnRequestBody = {
env?: Record<string, string>;
grace_period_seconds?: number;
lock?: string;
service_environment?: string;
};
export type V1Status = 'Loading' | 'Starting' | 'Ready' | 'Swept' | 'Exited' | 'Terminated' | 'Failed' | 'ErrorLoading' | 'ErrorStarting' | 'TimedOutBeforeReady' | 'Lost';
export type V2Status = 'scheduled' | 'loading' | 'starting' | 'waiting' | 'ready' | 'terminating' | 'hard-terminating' | 'terminated';
export type ConnectResourceLimits = {
cpu_period?: number;
cpu_period_percent?: number;
cpu_time_limit?: number;
memory_limit_bytes?: number;
disk_limit_bytes?: number;
};
export type JamsocketConnectRequestBody = {
key?: string;
spawn?: boolean | {
tag?: string;
cluster?: string;
lifetime_limit_seconds?: number;
max_idle_seconds?: number;
executable?: {
mount?: string | boolean;
env?: Record<string, string>;
resource_limits?: ConnectResourceLimits;
};
};
user?: string;
auth?: Record<string, any>;
};
export type JamsocketConnectResponse = {
backend_id: string;
spawned: boolean;
status: V2Status;
token: string;
url: string;
secret_token?: string | null;
status_url: string;
ready_url: string;
};
export type PlaneTerminationKind = 'soft' | 'hard';
export type PlaneTerminationReason = 'swept' | 'external' | 'keyexpired' | 'lost' | 'startuptimeout' | 'internalerror';
export type PublicV2State = {
status: 'scheduled';
time: string;
} | {
status: 'loading';
time: string;
} | {
status: 'starting';
time: string;
} | {
status: 'waiting';
time: string;
} | {
status: 'ready';
time: string;
} | {
status: 'terminating';
time: string;
termination_reason: PlaneTerminationReason;
} | {
status: 'hard-terminating';
time: string;
termination_reason: PlaneTerminationReason;
} | {
status: 'terminated';
time: string;
termination_reason?: PlaneTerminationReason | null;
termination_kind?: PlaneTerminationKind | null;
exit_error?: boolean | null;
};
export type V2State = {
status: 'scheduled';
time: string;
} | {
status: 'loading';
time: string;
} | {
status: 'starting';
time: string;
} | {
status: 'waiting';
time: string;
} | {
status: 'ready';
time: string;
} | {
status: 'terminating';
time: string;
termination_reason: PlaneTerminationReason;
} | {
status: 'hard-terminating';
time: string;
termination_reason: PlaneTerminationReason;
} | {
status: 'terminated';
time: string;
termination_reason?: PlaneTerminationReason | null;
termination_kind?: PlaneTerminationKind | null;
exit_code?: number | null;
last_status: V2Status;
};
export type UpdateEnvironmentBody = {
image_tag: string;
};
export interface ServiceImageResult {
status: 'ok';
imageName: string;
}
export interface ServiceListResult {
services: Array<string>;
}
export interface ServiceCreateResult {
status: 'ok';
}
export type Image = {
repository: string;
digest: string;
tag: string;
upload_time: string;
};
export interface ServiceImagesResult {
images: Image[];
}
export interface Environment {
name: string;
image_tag: string;
cluster: string;
created_at: string;
last_spawned_at: string | null;
}
export interface ServiceInfoResult {
name: string;
account_name: string;
created_at: string;
last_spawned_at: string | null;
last_image_upload_time: string | null;
last_image_digest: string | null;
image_name: string;
environments: Environment[];
}
export interface ServiceDeleteResult {
status: 'ok';
}
export interface EnvironmentUpdateResult {
status: 'ok';
}
export interface SpawnResult {
url: string;
name: string;
ready_url: string;
status_url: string;
spawned: boolean;
status: V1Status | null;
}
export type BackendWithStatus = {
id: string;
created_at: string;
service_name: string;
cluster_name: string;
account_name: string;
status?: V2State;
key?: string;
};
export interface RunningBackendsResult {
running_backends: BackendWithStatus[];
}
export interface TerminateResult {
status: 'ok';
}
export interface TerminateAllBackendsBody {
before: string;
hard: boolean;
dry_run: boolean;
}
export interface TerminateAllBackendsResult {
backend_count: number;
terminated_count: number;
is_complete: boolean;
}
export interface BackendInfoResult {
id: string;
created_at: string;
service_name: string;
cluster_name: string;
account_name: string;
statuses: V2State[];
image_digest: string;
key?: string | null;
environment_name?: string | null;
max_mem_bytes?: number | null;
}
export interface UserSessionRevokeResult {
status: 'ok';
}
export interface CliLoginAttemptResult {
token: string;
}
export interface CompleteCliLoginResult {
uuid: string;
user_id: string;
user_agent: string;
created_at: string;
expiration: string;
token: string;
user_is_admin?: boolean;
user_email?: string;
}
export declare class HTTPError extends Error {
status: number;
code: string | null;
constructor(status: number, code: string | null, message: string);
}
export declare const AUTH_ERROR_HTTP_CODES: Set<number>;
export declare class AuthenticationError extends HTTPError {
status: number;
code: string | null;
constructor(status: number, code: string | null, message: string);
}
export declare class JamsocketApi {
private apiBase;
private options;
constructor(apiBase: string, options?: https.RequestOptions);
static fromEnvironment(): JamsocketApi;
getAppBaseUrl(): string;
getLoginUrl(loginToken: string): string;
private makeRequest;
private makeAuthenticatedRequest;
private makeStreamRequest;
private makeAuthenticatedStreamRequest;
checkAuthToken(authToken: string): Promise<CheckAuthResult>;
checkAuthConfig(config: JamsocketConfig): Promise<CheckAuthResult>;
serviceImage(accountName: string, serviceName: string, config: JamsocketConfig): Promise<ServiceImageResult>;
serviceCreate(accountName: string, name: string, config: JamsocketConfig): Promise<ServiceCreateResult>;
serviceDelete(accountName: string, serviceName: string, config: JamsocketConfig): Promise<ServiceDeleteResult>;
serviceInfo(accountName: string, serviceName: string, config: JamsocketConfig): Promise<ServiceInfoResult>;
serviceList(accountName: string, config: JamsocketConfig): Promise<ServiceListResult>;
updateEnvironment(accountName: string, service: string, environment: string | null, config: JamsocketConfig, body: UpdateEnvironmentBody): Promise<EnvironmentUpdateResult>;
spawn(accountName: string, serviceName: string, config: JamsocketConfig, body: SpawnRequestBody): Promise<SpawnResult>;
connect(accountName: string, serviceName: string, serviceEnvironment: string | null, config: JamsocketConfig, body?: JamsocketConnectRequestBody): Promise<JamsocketConnectResponse>;
listRunningBackends(accountName: string, config: JamsocketConfig): Promise<RunningBackendsResult>;
imagesList(accountName: string, serviceName: string, config: JamsocketConfig): Promise<ServiceImagesResult>;
streamLogs(backend: string, config: JamsocketConfig, callback: (line: string) => void): EventStreamReturn;
streamMetrics(backend: string, config: JamsocketConfig, callback: (line: string) => void): EventStreamReturn;
streamStatus(backend: string, callback: (statusMessage: PublicV2State) => void, config?: JamsocketConfig): EventStreamReturn;
status(backend: string, config?: JamsocketConfig): Promise<PublicV2State>;
terminate(backend: string, hard: boolean, config: JamsocketConfig): Promise<TerminateResult>;
terminateAllBackends(accountName: string, serviceName: string, body: TerminateAllBackendsBody, config: JamsocketConfig): Promise<TerminateAllBackendsResult>;
backendInfo(backend: string, config: JamsocketConfig): Promise<BackendInfoResult>;
startLoginAttempt(): Promise<CliLoginAttemptResult>;
completeLoginAttempt(token: string, code: string): Promise<CompleteCliLoginResult>;
revokeUserSession(userSessionId: string, config: JamsocketConfig): Promise<UserSessionRevokeResult>;
streamLoginStatus(loginToken: string): Promise<boolean>;
}