2020-05-25 21:30:55 -05:00
|
|
|
import "babel-polyfill";
|
|
|
|
import "promise-polyfill/src/polyfill"; // polyfill Promise on IE
|
|
|
|
import "@jupyterlab/terminal/style/index.css";
|
|
|
|
import "./index.css";
|
|
|
|
import { ServerConnection } from "@jupyterlab/services";
|
|
|
|
import { JupyterLabAppFactory } from "./JupyterLabAppFactory";
|
2020-09-16 17:04:34 -07:00
|
|
|
import { Action } from "../Shared/Telemetry/TelemetryConstants";
|
|
|
|
import * as TelemetryProcessor from "../Shared/Telemetry/TelemetryProcessor";
|
2020-09-22 12:19:06 -07:00
|
|
|
import { updateUserContext } from "../UserContext";
|
2020-10-06 16:55:13 -07:00
|
|
|
import { HttpHeaders, TerminalQueryParams } from "../Common/Constants";
|
2020-05-25 21:30:55 -05:00
|
|
|
|
|
|
|
const getUrlVars = (): { [key: string]: string } => {
|
|
|
|
const vars: { [key: string]: string } = {};
|
|
|
|
window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, (m, key, value): string => {
|
|
|
|
vars[key] = decodeURIComponent(value);
|
|
|
|
return value;
|
|
|
|
});
|
|
|
|
return vars;
|
|
|
|
};
|
|
|
|
|
2020-09-16 17:04:34 -07:00
|
|
|
const createServerSettings = (urlVars: { [key: string]: string }): ServerConnection.ISettings => {
|
2020-05-25 21:30:55 -05:00
|
|
|
let body: BodyInit;
|
2020-10-06 16:55:13 -07:00
|
|
|
let headers: HeadersInit;
|
2020-09-22 12:19:06 -07:00
|
|
|
if (urlVars.hasOwnProperty(TerminalQueryParams.TerminalEndpoint)) {
|
2020-05-25 21:30:55 -05:00
|
|
|
body = JSON.stringify({
|
2020-09-22 12:19:06 -07:00
|
|
|
endpoint: urlVars[TerminalQueryParams.TerminalEndpoint]
|
2020-05-25 21:30:55 -05:00
|
|
|
});
|
2020-10-06 16:55:13 -07:00
|
|
|
headers = {
|
|
|
|
[HttpHeaders.contentType]: "application/json"
|
|
|
|
};
|
2020-05-25 21:30:55 -05:00
|
|
|
}
|
|
|
|
|
2020-09-22 12:19:06 -07:00
|
|
|
const server = urlVars[TerminalQueryParams.Server];
|
2020-05-25 21:30:55 -05:00
|
|
|
let options: Partial<ServerConnection.ISettings> = {
|
|
|
|
baseUrl: server,
|
2020-10-06 16:55:13 -07:00
|
|
|
init: { body, headers },
|
2020-05-25 21:30:55 -05:00
|
|
|
fetch: window.parent.fetch
|
|
|
|
};
|
2020-09-22 12:19:06 -07:00
|
|
|
if (urlVars.hasOwnProperty(TerminalQueryParams.Token)) {
|
2020-05-25 21:30:55 -05:00
|
|
|
options = {
|
|
|
|
baseUrl: server,
|
2020-09-22 12:19:06 -07:00
|
|
|
token: urlVars[TerminalQueryParams.Token],
|
2020-10-01 14:00:46 +02:00
|
|
|
appendToken: true,
|
2020-10-06 16:55:13 -07:00
|
|
|
init: { body, headers },
|
2020-05-25 21:30:55 -05:00
|
|
|
fetch: window.parent.fetch
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-09-16 17:04:34 -07:00
|
|
|
return ServerConnection.makeSettings(options);
|
|
|
|
};
|
|
|
|
|
|
|
|
const main = async (): Promise<void> => {
|
|
|
|
const urlVars = getUrlVars();
|
2020-09-22 12:19:06 -07:00
|
|
|
|
|
|
|
// Initialize userContext. Currently only subscrptionId is required by TelemetryProcessor
|
|
|
|
updateUserContext({
|
|
|
|
subscriptionId: urlVars[TerminalQueryParams.SubscriptionId]
|
|
|
|
});
|
|
|
|
|
2020-09-16 17:04:34 -07:00
|
|
|
const serverSettings = createServerSettings(urlVars);
|
|
|
|
|
|
|
|
const startTime = TelemetryProcessor.traceStart(Action.OpenTerminal, {
|
|
|
|
baseUrl: serverSettings.baseUrl
|
|
|
|
});
|
2020-09-11 23:12:28 -07:00
|
|
|
|
2020-09-16 17:04:34 -07:00
|
|
|
try {
|
2020-09-22 12:19:06 -07:00
|
|
|
if (urlVars.hasOwnProperty(TerminalQueryParams.Terminal)) {
|
2020-09-16 17:04:34 -07:00
|
|
|
await JupyterLabAppFactory.createTerminalApp(serverSettings);
|
|
|
|
} else {
|
|
|
|
throw new Error("Only terminal is supported");
|
|
|
|
}
|
|
|
|
|
|
|
|
TelemetryProcessor.traceSuccess(Action.OpenTerminal, startTime);
|
|
|
|
} catch (error) {
|
|
|
|
TelemetryProcessor.traceFailure(Action.OpenTerminal, startTime);
|
|
|
|
}
|
2020-05-25 21:30:55 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
window.addEventListener("load", main);
|