UNPKG

@eclipse-theiacloud/common

Version:

Common functionality for Theia Cloud

238 lines 12.2 kB
/* eslint-disable indent */ import { AxiosError } from 'axios'; import { v4 as uuidv4 } from 'uuid'; import { AppDefinitionResourceApi, RootResourceApi, SessionResourceApi, WorkspaceResourceApi } from './client/api'; import { Configuration } from './client/configuration'; export const DEFAULT_CALL_TIMEOUT = 30000; export const DEFAULT_CALL_RETRIES = 0; export var ServiceRequest; (function (ServiceRequest) { function is(obj) { return !!obj && typeof obj.serviceUrl === 'string'; } ServiceRequest.is = is; })(ServiceRequest || (ServiceRequest = {})); export var PingRequest; (function (PingRequest) { PingRequest.KIND = 'pingRequest'; function create(serviceUrl, appId) { return { serviceUrl, appId }; } PingRequest.create = create; })(PingRequest || (PingRequest = {})); export var LaunchRequest; (function (LaunchRequest) { LaunchRequest.KIND = 'launchRequest'; function ephemeral(serviceUrl, appId, appDefinition, timeout, user = createUser()) { return { serviceUrl, appId, appDefinition, user, ephemeral: true, timeout }; } LaunchRequest.ephemeral = ephemeral; function createWorkspace(serviceUrl, appId, appDefinition, timeout, user = createUser(), workspaceName, label) { return { serviceUrl, appId, appDefinition, user, label, workspaceName, ephemeral: false, timeout }; } LaunchRequest.createWorkspace = createWorkspace; // eslint-disable-next-line max-len function existingWorkspace(serviceUrl, appId, workspaceName, timeout, appDefinition, user = createUser()) { return { serviceUrl, appId, workspaceName, appDefinition, user, timeout }; } LaunchRequest.existingWorkspace = existingWorkspace; })(LaunchRequest || (LaunchRequest = {})); export var AppDefinitionListRequest; (function (AppDefinitionListRequest) { AppDefinitionListRequest.KIND = 'appDefinitionListRequest'; })(AppDefinitionListRequest || (AppDefinitionListRequest = {})); export var SessionListRequest; (function (SessionListRequest) { SessionListRequest.KIND = 'sessionListRequest'; })(SessionListRequest || (SessionListRequest = {})); export var SessionStartRequest; (function (SessionStartRequest) { SessionStartRequest.KIND = 'sessionStartRequest'; })(SessionStartRequest || (SessionStartRequest = {})); export var SessionStopRequest; (function (SessionStopRequest) { SessionStopRequest.KIND = 'sessionStopRequest'; })(SessionStopRequest || (SessionStopRequest = {})); export var SessionSetConfigValueRequest; (function (SessionSetConfigValueRequest) { SessionSetConfigValueRequest.KIND = 'sessionSetConfigValueRequest'; })(SessionSetConfigValueRequest || (SessionSetConfigValueRequest = {})); export var SessionActivityRequest; (function (SessionActivityRequest) { SessionActivityRequest.KIND = 'sessionActivityRequest'; })(SessionActivityRequest || (SessionActivityRequest = {})); export var SessionPerformanceRequest; (function (SessionPerformanceRequest) { SessionPerformanceRequest.KIND = 'sessionPerformanceRequest'; })(SessionPerformanceRequest || (SessionPerformanceRequest = {})); export var WorkspaceListRequest; (function (WorkspaceListRequest) { WorkspaceListRequest.KIND = 'workspaceListRequest'; })(WorkspaceListRequest || (WorkspaceListRequest = {})); export var WorkspaceCreationRequest; (function (WorkspaceCreationRequest) { WorkspaceCreationRequest.KIND = 'workspaceCreationRequest'; })(WorkspaceCreationRequest || (WorkspaceCreationRequest = {})); export var WorkspaceDeletionRequest; (function (WorkspaceDeletionRequest) { WorkspaceDeletionRequest.KIND = 'workspaceDeletionRequest'; })(WorkspaceDeletionRequest || (WorkspaceDeletionRequest = {})); export var TheiaCloud; (function (TheiaCloud) { function rootApi(serviceUrl, accessToken) { return new RootResourceApi(new Configuration({ basePath: serviceUrl, accessToken })); } function appDefinitionApi(serviceUrl, accessToken) { return new AppDefinitionResourceApi(new Configuration({ basePath: serviceUrl, accessToken })); } function sessionApi(serviceUrl, accessToken) { return new SessionResourceApi(new Configuration({ basePath: serviceUrl, accessToken })); } function workspaceApi(serviceUrl, accessToken) { return new WorkspaceResourceApi(new Configuration({ basePath: serviceUrl, accessToken })); } async function ping(request, options = {}) { const { accessToken, retries, timeout } = options; return call(() => rootApi(request.serviceUrl, accessToken).serviceAppIdGet(request.appId, createConfig(timeout)), retries); } TheiaCloud.ping = ping; async function launch(request, options = {}) { const { accessToken, retries, timeout } = options; const launchRequest = { kind: LaunchRequest.KIND, ...request }; return call(() => rootApi(request.serviceUrl, accessToken).servicePost(launchRequest, createConfig(timeout)), retries); } TheiaCloud.launch = launch; async function launchAndRedirect(request, options = {}) { const url = await launch(request, options); console.log(`Redirect to: https://${url}`); location.replace(`https://${url}`); return url; } TheiaCloud.launchAndRedirect = launchAndRedirect; let AppDefinition; (function (AppDefinition) { async function listAppDefinitions(request, options = {}) { const { accessToken, retries, timeout } = options; return call(() => appDefinitionApi(request.serviceUrl, accessToken).serviceAppdefinitionAppIdGet(request.appId, createConfig(timeout)), retries); } AppDefinition.listAppDefinitions = listAppDefinitions; })(AppDefinition = TheiaCloud.AppDefinition || (TheiaCloud.AppDefinition = {})); let Session; (function (Session) { async function listSessions(request, options = {}) { const { accessToken, retries, timeout } = options; return call(() => sessionApi(request.serviceUrl, accessToken).serviceSessionAppIdUserGet(request.appId, request.user, createConfig(timeout)), retries); } Session.listSessions = listSessions; async function startSession(request, options = {}) { const { accessToken, retries, timeout } = options; const sessionStartRequest = { kind: SessionStartRequest.KIND, ...request }; return call(() => sessionApi(request.serviceUrl, accessToken).serviceSessionPost(sessionStartRequest, createConfig(timeout)), retries); } Session.startSession = startSession; async function stopSession(request, options = {}) { const { accessToken, retries, timeout } = options; const sessionStopRequest = { kind: SessionStopRequest.KIND, ...request }; return call(() => sessionApi(request.serviceUrl, accessToken).serviceSessionDelete(sessionStopRequest, createConfig(timeout)), retries); } Session.stopSession = stopSession; async function setConfigValue(sessionName, request, options = {}) { const { accessToken, retries, timeout } = options; const sessionSetConfigValueRequest = { kind: SessionSetConfigValueRequest.KIND, ...request }; return call(() => sessionApi(request.serviceUrl, accessToken).serviceSessionSessionConfigPost(sessionName, sessionSetConfigValueRequest, createConfig(timeout)), retries); } Session.setConfigValue = setConfigValue; async function reportSessionActivity(request, options = {}) { const { accessToken, retries, timeout } = options; const sessionActivityRequest = { kind: SessionActivityRequest.KIND, ...request }; return call(() => sessionApi(request.serviceUrl, accessToken).serviceSessionPatch(sessionActivityRequest, createConfig(timeout)), retries); } Session.reportSessionActivity = reportSessionActivity; async function getSessionPerformance(request, options = {}) { const { accessToken, retries, timeout } = options; return call(() => sessionApi(request.serviceUrl, accessToken).serviceSessionPerformanceAppIdSessionNameGet(request.appId, request.sessionName, createConfig(timeout)), retries); } Session.getSessionPerformance = getSessionPerformance; })(Session = TheiaCloud.Session || (TheiaCloud.Session = {})); let Workspace; (function (Workspace) { async function listWorkspaces(request, options = {}) { const { accessToken, retries, timeout } = options; return call(() => workspaceApi(request.serviceUrl, accessToken).serviceWorkspaceAppIdUserGet(request.appId, request.user, createConfig(timeout)), retries); } Workspace.listWorkspaces = listWorkspaces; async function createWorkspace(request, options = {}) { const { accessToken, retries, timeout } = options; const workspaceCreationRequest = { kind: WorkspaceCreationRequest.KIND, ...request }; return call(() => workspaceApi(request.serviceUrl, accessToken).serviceWorkspacePost(workspaceCreationRequest, createConfig(timeout)), retries); } Workspace.createWorkspace = createWorkspace; async function deleteWorkspace(request, options = {}) { const { accessToken, retries, timeout } = options; const workspaceDeletionRequest = { kind: WorkspaceDeletionRequest.KIND, ...request }; return call(() => workspaceApi(request.serviceUrl, accessToken).serviceWorkspaceDelete(workspaceDeletionRequest, createConfig(timeout)), retries); } Workspace.deleteWorkspace = deleteWorkspace; })(Workspace = TheiaCloud.Workspace || (TheiaCloud.Workspace = {})); })(TheiaCloud || (TheiaCloud = {})); function createUser() { return uuidv4() + '@theia.cloud'; } function createConfig(timeout = DEFAULT_CALL_TIMEOUT) { return { timeout }; } async function call(fn, retries = DEFAULT_CALL_RETRIES) { try { const response = await fn(); return response.data; } catch (err) { const error = err; console.error(error.message); if (retries > 0) { return call(fn, retries - 1); } throw TheiaCloudError.from(error); } } export var TheiaCloudErrorResponse; (function (TheiaCloudErrorResponse) { function is(obj) { return !!obj && typeof obj.code === 'number' && typeof obj.reason === 'string'; } TheiaCloudErrorResponse.is = is; })(TheiaCloudErrorResponse || (TheiaCloudErrorResponse = {})); export class TheiaCloudError extends Error { constructor(message, status, originalError, serverError, request) { super(message); this.status = status; this.originalError = originalError; this.serverError = serverError; this.request = request; } static from(error) { if (error instanceof AxiosError) { const responseData = error.response ? error.response.data : undefined; const errorResponse = TheiaCloudErrorResponse.is(responseData) ? responseData : undefined; const message = errorResponse ? errorResponse.reason : error.message; const status = error.status ? error.status : error.response ? error.response.status : errorResponse ? errorResponse.code : TheiaCloudError.INTERNAL_ERROR; if (error.config === undefined) { return new TheiaCloudError(message, status, error, errorResponse); } else { const requestData = typeof error.config.data === 'string' ? JSON.parse(error.config.data) : error.config.data; const serviceRequest = ServiceRequest.is(requestData) ? requestData : undefined; return new TheiaCloudError(message, status, error, errorResponse, serviceRequest); } } return new TheiaCloudError(error.message, TheiaCloudError.INTERNAL_ERROR, error); } } TheiaCloudError.INTERNAL_ERROR = 500; //# sourceMappingURL=client.js.map