@jupyterlab/services
Version:
Client APIs for the Jupyter services REST APIs
127 lines • 4.34 kB
JavaScript
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.WorkspaceManager = void 0;
const coreutils_1 = require("@jupyterlab/coreutils");
const statedb_1 = require("@jupyterlab/statedb");
const serverconnection_1 = require("../serverconnection");
/**
* The url for the lab workspaces service.
*/
const SERVICE_WORKSPACES_URL = 'api/workspaces';
/**
* The workspaces API service manager.
*/
class WorkspaceManager extends statedb_1.DataConnector {
/**
* Create a new workspace manager.
*/
constructor(options = {}) {
var _a;
super();
this.serverSettings =
(_a = options.serverSettings) !== null && _a !== void 0 ? _a : serverconnection_1.ServerConnection.makeSettings();
}
/**
* Fetch a workspace.
*
* @param id - The workspace's ID.
*
* @returns A promise that resolves if successful.
*/
async fetch(id) {
const { serverSettings } = this;
const { baseUrl, appUrl } = serverSettings;
const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;
const base = baseUrl + appUrl;
const url = Private.url(base, id);
const response = await makeRequest(url, {}, serverSettings);
if (response.status !== 200) {
const err = await ResponseError.create(response);
throw err;
}
return response.json();
}
/**
* Fetch the list of workspace IDs that exist on the server.
*
* @returns A promise that resolves if successful.
*/
async list() {
const { serverSettings } = this;
const { baseUrl, appUrl } = serverSettings;
const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;
const base = baseUrl + appUrl;
const url = Private.url(base, '');
const response = await makeRequest(url, {}, serverSettings);
if (response.status !== 200) {
const err = await ResponseError.create(response);
throw err;
}
const result = await response.json();
return result.workspaces;
}
/**
* Remove a workspace from the server.
*
* @param id - The workspaces's ID.
*
* @returns A promise that resolves if successful.
*/
async remove(id) {
const { serverSettings } = this;
const { baseUrl, appUrl } = serverSettings;
const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;
const base = baseUrl + appUrl;
const url = Private.url(base, id);
const init = { method: 'DELETE' };
const response = await makeRequest(url, init, serverSettings);
if (response.status !== 204) {
const err = await ResponseError.create(response);
throw err;
}
}
/**
* Save a workspace.
*
* @param id - The workspace's ID.
*
* @param workspace - The workspace being saved.
*
* @returns A promise that resolves if successful.
*/
async save(id, workspace) {
const { serverSettings } = this;
const { baseUrl, appUrl } = serverSettings;
const { makeRequest, ResponseError } = serverconnection_1.ServerConnection;
const base = baseUrl + appUrl;
const url = Private.url(base, id);
const init = { body: JSON.stringify(workspace), method: 'PUT' };
const response = await makeRequest(url, init, serverSettings);
if (response.status !== 204) {
const err = await ResponseError.create(response);
throw err;
}
}
}
exports.WorkspaceManager = WorkspaceManager;
/**
* A namespace for private data.
*/
var Private;
(function (Private) {
/**
* Get the url for a workspace.
*/
function url(base, id) {
const workspacesBase = coreutils_1.URLExt.join(base, SERVICE_WORKSPACES_URL);
const result = coreutils_1.URLExt.join(workspacesBase, id);
if (!result.startsWith(workspacesBase)) {
throw new Error('Can only be used for workspaces requests');
}
return result;
}
Private.url = url;
})(Private || (Private = {}));
//# sourceMappingURL=index.js.map
;