@eclipse-theiacloud/common
Version:
Common functionality for Theia Cloud
242 lines • 13.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TheiaCloudError = exports.TheiaCloudErrorResponse = exports.TheiaCloud = exports.WorkspaceDeletionRequest = exports.WorkspaceCreationRequest = exports.WorkspaceListRequest = exports.SessionPerformanceRequest = exports.SessionActivityRequest = exports.SessionSetConfigValueRequest = exports.SessionStopRequest = exports.SessionStartRequest = exports.SessionListRequest = exports.AppDefinitionListRequest = exports.LaunchRequest = exports.PingRequest = exports.ServiceRequest = exports.DEFAULT_CALL_RETRIES = exports.DEFAULT_CALL_TIMEOUT = void 0;
/* eslint-disable indent */
const axios_1 = require("axios");
const uuid_1 = require("uuid");
const api_1 = require("./client/api");
const configuration_1 = require("./client/configuration");
exports.DEFAULT_CALL_TIMEOUT = 30000;
exports.DEFAULT_CALL_RETRIES = 0;
var ServiceRequest;
(function (ServiceRequest) {
function is(obj) {
return !!obj && typeof obj.serviceUrl === 'string';
}
ServiceRequest.is = is;
})(ServiceRequest || (exports.ServiceRequest = ServiceRequest = {}));
var PingRequest;
(function (PingRequest) {
PingRequest.KIND = 'pingRequest';
function create(serviceUrl, appId) {
return { serviceUrl, appId };
}
PingRequest.create = create;
})(PingRequest || (exports.PingRequest = PingRequest = {}));
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 || (exports.LaunchRequest = LaunchRequest = {}));
var AppDefinitionListRequest;
(function (AppDefinitionListRequest) {
AppDefinitionListRequest.KIND = 'appDefinitionListRequest';
})(AppDefinitionListRequest || (exports.AppDefinitionListRequest = AppDefinitionListRequest = {}));
var SessionListRequest;
(function (SessionListRequest) {
SessionListRequest.KIND = 'sessionListRequest';
})(SessionListRequest || (exports.SessionListRequest = SessionListRequest = {}));
var SessionStartRequest;
(function (SessionStartRequest) {
SessionStartRequest.KIND = 'sessionStartRequest';
})(SessionStartRequest || (exports.SessionStartRequest = SessionStartRequest = {}));
var SessionStopRequest;
(function (SessionStopRequest) {
SessionStopRequest.KIND = 'sessionStopRequest';
})(SessionStopRequest || (exports.SessionStopRequest = SessionStopRequest = {}));
var SessionSetConfigValueRequest;
(function (SessionSetConfigValueRequest) {
SessionSetConfigValueRequest.KIND = 'sessionSetConfigValueRequest';
})(SessionSetConfigValueRequest || (exports.SessionSetConfigValueRequest = SessionSetConfigValueRequest = {}));
var SessionActivityRequest;
(function (SessionActivityRequest) {
SessionActivityRequest.KIND = 'sessionActivityRequest';
})(SessionActivityRequest || (exports.SessionActivityRequest = SessionActivityRequest = {}));
var SessionPerformanceRequest;
(function (SessionPerformanceRequest) {
SessionPerformanceRequest.KIND = 'sessionPerformanceRequest';
})(SessionPerformanceRequest || (exports.SessionPerformanceRequest = SessionPerformanceRequest = {}));
var WorkspaceListRequest;
(function (WorkspaceListRequest) {
WorkspaceListRequest.KIND = 'workspaceListRequest';
})(WorkspaceListRequest || (exports.WorkspaceListRequest = WorkspaceListRequest = {}));
var WorkspaceCreationRequest;
(function (WorkspaceCreationRequest) {
WorkspaceCreationRequest.KIND = 'workspaceCreationRequest';
})(WorkspaceCreationRequest || (exports.WorkspaceCreationRequest = WorkspaceCreationRequest = {}));
var WorkspaceDeletionRequest;
(function (WorkspaceDeletionRequest) {
WorkspaceDeletionRequest.KIND = 'workspaceDeletionRequest';
})(WorkspaceDeletionRequest || (exports.WorkspaceDeletionRequest = WorkspaceDeletionRequest = {}));
var TheiaCloud;
(function (TheiaCloud) {
function rootApi(serviceUrl, accessToken) {
return new api_1.RootResourceApi(new configuration_1.Configuration({ basePath: serviceUrl, accessToken }));
}
function appDefinitionApi(serviceUrl, accessToken) {
return new api_1.AppDefinitionResourceApi(new configuration_1.Configuration({ basePath: serviceUrl, accessToken }));
}
function sessionApi(serviceUrl, accessToken) {
return new api_1.SessionResourceApi(new configuration_1.Configuration({ basePath: serviceUrl, accessToken }));
}
function workspaceApi(serviceUrl, accessToken) {
return new api_1.WorkspaceResourceApi(new configuration_1.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 || (exports.TheiaCloud = TheiaCloud = {}));
function createUser() {
return (0, uuid_1.v4)() + '@theia.cloud';
}
function createConfig(timeout = exports.DEFAULT_CALL_TIMEOUT) {
return { timeout };
}
async function call(fn, retries = exports.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);
}
}
var TheiaCloudErrorResponse;
(function (TheiaCloudErrorResponse) {
function is(obj) {
return !!obj && typeof obj.code === 'number' && typeof obj.reason === 'string';
}
TheiaCloudErrorResponse.is = is;
})(TheiaCloudErrorResponse || (exports.TheiaCloudErrorResponse = TheiaCloudErrorResponse = {}));
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 axios_1.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);
}
}
exports.TheiaCloudError = TheiaCloudError;
TheiaCloudError.INTERNAL_ERROR = 500;
//# sourceMappingURL=client.js.map