aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/ActionUtilities.ts2
-rw-r--r--src/server/ApiManagers/PDFManager.ts5
-rw-r--r--src/server/ApiManagers/UploadManager.ts19
-rw-r--r--src/server/ApiManagers/UserManager.ts2
-rw-r--r--src/server/DashSession/DashSessionAgent.ts2
-rw-r--r--src/server/DashSession/Session/agents/monitor.ts2
-rw-r--r--src/server/DashSession/Session/agents/promisified_ipc_manager.ts2
-rw-r--r--src/server/DashSession/Session/agents/server_worker.ts2
-rw-r--r--src/server/DashUploadUtils.ts14
-rw-r--r--src/server/Message.ts4
-rw-r--r--src/server/RouteManager.ts2
-rw-r--r--src/server/Search.ts2
-rw-r--r--src/server/apis/google/GoogleApiServerUtils.ts4
-rw-r--r--src/server/authentication/AuthenticationManager.ts15
-rw-r--r--src/server/authentication/Passport.ts6
-rw-r--r--src/server/remapUrl.ts2
-rw-r--r--src/server/server_Initialization.ts39
-rw-r--r--src/server/websocket.ts7
18 files changed, 56 insertions, 75 deletions
diff --git a/src/server/ActionUtilities.ts b/src/server/ActionUtilities.ts
index bc8fd6f87..d237869ed 100644
--- a/src/server/ActionUtilities.ts
+++ b/src/server/ActionUtilities.ts
@@ -62,7 +62,7 @@ export async function log_execution<T>({ startMessage, endMessage, action, color
log_helper(`${startMessage}...`, resolvedColor);
try {
result = await action();
- } catch (e: any) {
+ } catch (e) {
error = e;
} finally {
log_helper(typeof endMessage === "string" ? endMessage : endMessage({ result, error }), resolvedColor);
diff --git a/src/server/ApiManagers/PDFManager.ts b/src/server/ApiManagers/PDFManager.ts
index e419d3ac4..2b4212588 100644
--- a/src/server/ApiManagers/PDFManager.ts
+++ b/src/server/ApiManagers/PDFManager.ts
@@ -2,7 +2,8 @@ import ApiManager, { Registration } from "./ApiManager";
import { Method } from "../RouteManager";
import RouteSubscriber from "../RouteSubscriber";
import { existsSync, createReadStream, createWriteStream } from "fs";
-import * as Pdfjs from 'pdfjs-dist/legacy/build/pdf';
+const pdfjs = require('pdfjs-dist/es5/build/pdf.js');
+import * as Pdfjs from 'pdfjs-dist';
import { createCanvas } from "canvas";
const imageSize = require("probe-image-size");
import * as express from "express";
@@ -83,7 +84,7 @@ async function CreateThumbnail(coreFilename: string, pageNum: number, res: expre
});
}
-function dispatchThumbnail(res: express.Response, { width, height }: Pdfjs.PageViewport, thumbnailName: string) {
+function dispatchThumbnail(res: express.Response, { width, height }: Pdfjs.PDFPageViewport, thumbnailName: string) {
res.send({
path: clientPathToFile(Directory.pdf_thumbnails, thumbnailName),
width,
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index bfa07d47a..02f6462aa 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -49,17 +49,14 @@ export default class UploadManager extends ApiManager {
subscription: "/uploadFormData",
secureHandler: async ({ req, res }) => {
const form = new formidable.IncomingForm();
- form.keepExtensions = true;
form.uploadDir = pathToDirectory(Directory.parsed_files);
+ form.keepExtensions = true;
return new Promise<void>(resolve => {
form.parse(req, async (_err, _fields, files) => {
const results: Upload.FileResponse[] = [];
for (const key in files) {
- const f = files[key];
- if (!Array.isArray(f)) {
- const result = await DashUploadUtils.upload(f);
- result && !(result.result instanceof Error) && results.push(result);
- }
+ const result = await DashUploadUtils.upload(files[key]);
+ result && !(result.result instanceof Error) && results.push(result);
}
_success(res, results);
resolve();
@@ -195,8 +192,7 @@ export default class UploadManager extends ApiManager {
let id: string = "";
try {
for (const name in files) {
- const f = files[name];
- const path_2 = Array.isArray(f) ? "" : f.path;
+ const path_2 = files[name].path;
const zip = new AdmZip(path_2);
zip.getEntries().forEach((entry: any) => {
if (!entry.entryName.startsWith("files/")) return;
@@ -222,7 +218,7 @@ export default class UploadManager extends ApiManager {
id = getId(data.id);
const docs = Object.keys(datadocs).map(key => datadocs[key]);
docs.forEach(mapFn);
- await Promise.all(docs.map((doc: any) => new Promise<void>(res => {
+ await Promise.all(docs.map((doc: any) => new Promise(res => {
Database.Instance.replace(doc.id, doc, (err, r) => {
err && console.log(err);
res();
@@ -259,15 +255,14 @@ export default class UploadManager extends ApiManager {
secureHandler: ({ req, res }) => {
const uri = req.body.uri;
const filename = req.body.name;
- const origSuffix = req.body.nosuffix ? SizeSuffix.None : SizeSuffix.Original;
if (!uri || !filename) {
res.status(401).send("incorrect parameters specified");
return;
}
- return imageDataUri.outputFile(uri, serverPathToFile(Directory.images, InjectSize(filename, origSuffix))).then((savedName: string) => {
+ return imageDataUri.outputFile(uri, serverPathToFile(Directory.images, InjectSize(filename, SizeSuffix.Original))).then((savedName: string) => {
const ext = extname(savedName).toLowerCase();
const { pngs, jpgs } = AcceptableMedia;
- const resizers = !origSuffix ? [{ resizer: sharp().resize(400, undefined, { withoutEnlargement: true }), suffix: "_m" }] : [
+ const resizers = [
{ resizer: sharp().resize(100, undefined, { withoutEnlargement: true }), suffix: "_s" },
{ resizer: sharp().resize(400, undefined, { withoutEnlargement: true }), suffix: "_m" },
{ resizer: sharp().resize(900, undefined, { withoutEnlargement: true }), suffix: "_l" },
diff --git a/src/server/ApiManagers/UserManager.ts b/src/server/ApiManagers/UserManager.ts
index 7be8a1e9f..fe80c6a7c 100644
--- a/src/server/ApiManagers/UserManager.ts
+++ b/src/server/ApiManagers/UserManager.ts
@@ -22,7 +22,7 @@ export default class UserManager extends ApiManager {
secureHandler: async ({ res }) => {
const cursor = await Database.Instance.query({}, { email: 1, linkDatabaseId: 1, sharingDocumentId: 1 }, "users");
const results = await cursor.toArray();
- res.send(results.map((user: any) => ({ email: user.email, linkDatabaseId: user.linkDatabaseId, sharingDocumentId: user.sharingDocumentId })));
+ res.send(results.map(user => ({ email: user.email, linkDatabaseId: user.linkDatabaseId, sharingDocumentId: user.sharingDocumentId })));
}
});
diff --git a/src/server/DashSession/DashSessionAgent.ts b/src/server/DashSession/DashSessionAgent.ts
index 1a5934d8f..03ba33fee 100644
--- a/src/server/DashSession/DashSessionAgent.ts
+++ b/src/server/DashSession/DashSessionAgent.ts
@@ -214,7 +214,7 @@ export class DashSessionAgent extends AppliedSessionAgent {
// indicate success or failure
mainLog(`${error === null ? green("successfully dispatched") : red("failed to dispatch")} ${zipName} to ${cyan(to)}`);
error && mainLog(red(error.message));
- } catch (error: any) {
+ } catch (error) {
mainLog(red("unable to dispatch zipped backup..."));
mainLog(red(error.message));
}
diff --git a/src/server/DashSession/Session/agents/monitor.ts b/src/server/DashSession/Session/agents/monitor.ts
index 9cb5ab576..0fdaf07ff 100644
--- a/src/server/DashSession/Session/agents/monitor.ts
+++ b/src/server/DashSession/Session/agents/monitor.ts
@@ -178,7 +178,7 @@ export class Monitor extends IPCMessageReceiver {
// ensure all necessary and no excess information is specified by the configuration file
validate(config, configurationSchema, options);
config = Utilities.preciseAssign({}, defaultConfig, config);
- } catch (error: any) {
+ } catch (error) {
if (error instanceof ValidationError) {
console.log(red("\nSession configuration failed."));
console.log("The given session.config.json configuration file is invalid.");
diff --git a/src/server/DashSession/Session/agents/promisified_ipc_manager.ts b/src/server/DashSession/Session/agents/promisified_ipc_manager.ts
index f6c8de521..95aa686e6 100644
--- a/src/server/DashSession/Session/agents/promisified_ipc_manager.ts
+++ b/src/server/DashSession/Session/agents/promisified_ipc_manager.ts
@@ -157,7 +157,7 @@ export class PromisifiedIPCManager {
if (registered) {
results = await Promise.all(registered.map(handler => handler(args)));
}
- } catch (e: any) {
+ } catch (e) {
error = e;
}
if (!this.isDestroyed && this.target.send) {
diff --git a/src/server/DashSession/Session/agents/server_worker.ts b/src/server/DashSession/Session/agents/server_worker.ts
index 634b0113d..84d35b40e 100644
--- a/src/server/DashSession/Session/agents/server_worker.ts
+++ b/src/server/DashSession/Session/agents/server_worker.ts
@@ -138,7 +138,7 @@ export class ServerWorker extends IPCMessageReceiver {
this.isInitialized = true;
}
this.shouldServerBeResponsive = true;
- } catch (error: any) {
+ } catch (error) {
// if we expect the server to be unavailable, i.e. during compilation,
// the listening variable is false, activeExit will return early and the child
// process will continue
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index 552ab57a5..f13580865 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -16,7 +16,6 @@ import { clientPathToFile, Directory, pathToDirectory, serverPathToFile } from '
import { resolvedServerUrl } from "./server_Initialization";
import { AcceptableMedia, Upload } from './SharedMediaTypes';
import request = require('request-promise');
-import formidable = require('formidable');
const { exec } = require("child_process");
const parse = require('pdf-parse');
const ffmpeg = require("fluent-ffmpeg");
@@ -26,8 +25,7 @@ export enum SizeSuffix {
Small = "_s",
Medium = "_m",
Large = "_l",
- Original = "_o",
- None = ""
+ Original = "_o"
}
export function InjectSize(filename: string, size: SizeSuffix) {
@@ -71,7 +69,7 @@ export namespace DashUploadUtils {
else {
console.log(`stdout: ${stdout}`);
const data = { size: 0, path: videoId + ".mp4", name: videoId, type: "video/mp4" };
- const file = { ...data, toJSON: () => ({ ...data, filename: data.path.replace(/.*\//, ""), mtime: null, length: 0, mime: "", toJson: () => undefined as any }) };
+ const file = { ...data, toJSON: () => data };
res(MoveParsedFile(file, Directory.videos));
}
});
@@ -80,7 +78,7 @@ export namespace DashUploadUtils {
export async function upload(file: File): Promise<Upload.FileResponse> {
const { type, path, name } = file;
- const types = type?.split("/") ?? [];
+ const types = type.split("/");
const category = types[0];
let format = `.${types[1]}`;
@@ -244,7 +242,7 @@ export namespace DashUploadUtils {
// Use the request library to parse out file level image information in the headers
const { headers } = (await new Promise<any>((resolve, reject) => {
request.head(resolvedUrl, (error, res) => error ? reject(error) : resolve(res));
- }).catch(console.error));
+ }).catch(error => console.error(error)));
try {
// Compute the native width and height ofthe image with an npm module
const { width: nativeWidth, height: nativeHeight } = await requestImageSize(resolvedUrl);
@@ -258,7 +256,7 @@ export namespace DashUploadUtils {
filename,
...results
};
- } catch (e: any) {
+ } catch (e) {
console.log(e);
return e;
}
@@ -274,7 +272,7 @@ export namespace DashUploadUtils {
* @param suffix If the file doesn't have a suffix and you want to provide it one
* to appear in the new location
*/
- export async function MoveParsedFile(file: formidable.File, destination: Directory, suffix: string | undefined = undefined, text?: string): Promise<Upload.FileResponse> {
+ export async function MoveParsedFile(file: File, destination: Directory, suffix: string | undefined = undefined, text?: string): Promise<Upload.FileResponse> {
const { path: sourcePath } = file;
let name = path.basename(sourcePath);
suffix && (name += suffix);
diff --git a/src/server/Message.ts b/src/server/Message.ts
index d87ae5027..59b24cd82 100644
--- a/src/server/Message.ts
+++ b/src/server/Message.ts
@@ -1,4 +1,5 @@
import { Point } from "../pen-gestures/ndollar";
+import { AnalysisResult, ImportResults } from "../scraping/buxton/final/BuxtonImporter";
import { Utils } from "../Utils";
export class Message<T> {
@@ -81,6 +82,9 @@ export namespace MessageStore {
export const GetDocument = new Message<string>("Get Document");
export const DeleteAll = new Message<any>("Delete All");
export const ConnectionTerminated = new Message<string>("Connection Terminated");
+ export const BeginBuxtonImport = new Message<string>("Begin Buxton Import");
+ export const BuxtonDocumentResult = new Message<AnalysisResult>("Buxton Document Result");
+ export const BuxtonImportComplete = new Message<ImportResults>("Buxton Import Complete");
export const GesturePoints = new Message<GestureContent>("Gesture Points");
export const MobileInkOverlayTrigger = new Message<MobileInkOverlayContent>("Trigger Mobile Ink Overlay");
diff --git a/src/server/RouteManager.ts b/src/server/RouteManager.ts
index aa9bfcfa7..78b75d6be 100644
--- a/src/server/RouteManager.ts
+++ b/src/server/RouteManager.ts
@@ -124,7 +124,7 @@ export default class RouteManager {
}
await tryExecute(secureHandler, { ...core, user });
} else {
- //req.session!.target = target;
+ req.session!.target = target;
if (publicHandler) {
await tryExecute(publicHandler, core);
if (!res.headersSent) {
diff --git a/src/server/Search.ts b/src/server/Search.ts
index 25bd8badf..68f61deb2 100644
--- a/src/server/Search.ts
+++ b/src/server/Search.ts
@@ -49,7 +49,7 @@ export namespace Search {
},
json: true
});
- } catch (e: any) {
+ } catch (e) {
console.log(red("Unable to clear search..."));
console.log(red(e.message));
}
diff --git a/src/server/apis/google/GoogleApiServerUtils.ts b/src/server/apis/google/GoogleApiServerUtils.ts
index 4453b83bf..64bafe7fb 100644
--- a/src/server/apis/google/GoogleApiServerUtils.ts
+++ b/src/server/apis/google/GoogleApiServerUtils.ts
@@ -128,7 +128,7 @@ export namespace GoogleApiServerUtils {
* @param userId the id of the Dash user making the request to the API
* @returns the relevant 'googleapis' wrapper, if any
*/
- export async function GetEndpoint(sector: string, userId: string): Promise<Endpoint | void> {
+ export async function GetEndpoint(sector: string, userId: string): Promise<Opt<Endpoint>> {
return new Promise(async resolve => {
const auth = await retrieveOAuthClient(userId);
if (!auth) {
@@ -157,7 +157,7 @@ export namespace GoogleApiServerUtils {
* npm-installed API wrappers that use authenticated client instances rather than access codes for
* security.
*/
- export async function retrieveOAuthClient(userId: string): Promise<OAuth2Client | void> {
+ export async function retrieveOAuthClient(userId: string): Promise<OAuth2Client> {
return new Promise(async resolve => {
const { credentials, refreshed } = await retrieveCredentials(userId);
if (!credentials) {
diff --git a/src/server/authentication/AuthenticationManager.ts b/src/server/authentication/AuthenticationManager.ts
index b736f0d35..3fbd4b3a7 100644
--- a/src/server/authentication/AuthenticationManager.ts
+++ b/src/server/authentication/AuthenticationManager.ts
@@ -55,7 +55,7 @@ export let postSignup = (req: Request, res: Response, next: NextFunction) => {
const user = new User(model);
- User.findOne({ email }, (err: any, existingUser: any) => {
+ User.findOne({ email }, (err, existingUser) => {
if (err) { return next(err); }
if (existingUser) {
return res.redirect("/login");
@@ -72,8 +72,9 @@ export let postSignup = (req: Request, res: Response, next: NextFunction) => {
};
const tryRedirectToTarget = (req: Request, res: Response) => {
- const target = (req.session as any)?.target;
- if (req.session && target) {
+ if (req.session && req.session.target) {
+ const target = req.session.target;
+ req.session.target = undefined;
res.redirect(target);
} else {
res.redirect("/home");
@@ -87,7 +88,7 @@ const tryRedirectToTarget = (req: Request, res: Response) => {
*/
export let getLogin = (req: Request, res: Response) => {
if (req.user) {
- //req.session.target = undefined;
+ req.session!.target = undefined;
return res.redirect("/home");
}
res.render("login.pug", {
@@ -159,7 +160,7 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio
});
},
function (token: string, done: any) {
- User.findOne({ email }, function (err: any, user: DashUserModel) {
+ User.findOne({ email }, function (err, user: DashUserModel) {
if (!user) {
// NO ACCOUNT WITH SUBMITTED EMAIL
res.redirect("/forgotPassword");
@@ -201,7 +202,7 @@ export let postForgot = function (req: Request, res: Response, next: NextFunctio
};
export let getReset = function (req: Request, res: Response) {
- User.findOne({ passwordResetToken: req.params.token, passwordResetExpires: { $gt: Date.now() } }, function (err: any, user: DashUserModel) {
+ User.findOne({ passwordResetToken: req.params.token, passwordResetExpires: { $gt: Date.now() } }, function (err, user: DashUserModel) {
if (!user || err) {
return res.redirect("/forgotPassword");
}
@@ -215,7 +216,7 @@ export let getReset = function (req: Request, res: Response) {
export let postReset = function (req: Request, res: Response) {
async.waterfall([
function (done: any) {
- User.findOne({ passwordResetToken: req.params.token, passwordResetExpires: { $gt: Date.now() } }, function (err: any, user: DashUserModel) {
+ User.findOne({ passwordResetToken: req.params.token, passwordResetExpires: { $gt: Date.now() } }, function (err, user: DashUserModel) {
if (!user || err) {
return res.redirect('back');
}
diff --git a/src/server/authentication/Passport.ts b/src/server/authentication/Passport.ts
index d7f891c34..9b0069414 100644
--- a/src/server/authentication/Passport.ts
+++ b/src/server/authentication/Passport.ts
@@ -4,12 +4,12 @@ import { default as User } from './DashUserModel';
const LocalStrategy = passportLocal.Strategy;
-passport.serializeUser<any, any>((req, user, done) => {
- done(undefined, (user as any)?.id);
+passport.serializeUser<any, any>((user, done) => {
+ done(undefined, user.id);
});
passport.deserializeUser<any, any>((id, done) => {
- User.findById(id, (err: any, user: any) => {
+ User.findById(id, (err, user) => {
done(err, user);
});
});
diff --git a/src/server/remapUrl.ts b/src/server/remapUrl.ts
index b8e17ec66..e9f9da25a 100644
--- a/src/server/remapUrl.ts
+++ b/src/server/remapUrl.ts
@@ -47,7 +47,7 @@ async function update() {
await cursor.forEach(updateDoc);
await Promise.all(updates.map(doc => {
console.log(doc[0], doc[1]);
- return new Promise<void>(res => Database.Instance.update(doc[0], doc[1], () => {
+ return new Promise(res => Database.Instance.update(doc[0], doc[1], () => {
console.log("wrote " + JSON.stringify(doc[1]));
res();
}, false));
diff --git a/src/server/server_Initialization.ts b/src/server/server_Initialization.ts
index 24cc3b796..de93b64c3 100644
--- a/src/server/server_Initialization.ts
+++ b/src/server/server_Initialization.ts
@@ -31,7 +31,7 @@ const compiler = webpack(config);
/* RouteSetter is a wrapper around the server that prevents the server
from being exposed. */
export type RouteSetter = (server: RouteManager) => void;
-//export let disconnect: Function;
+export let disconnect: Function;
export let resolvedPorts: { server: number, socket: number } = { server: 1050, socket: 4321 };
export let resolvedServerUrl: string;
@@ -40,14 +40,6 @@ export default async function InitializeServer(routeSetter: RouteSetter) {
const isRelease = determineEnvironment();
const app = buildWithMiddleware(express());
- const compiler = webpack(config);
-
- app.use(require("webpack-dev-middleware")(compiler, {
- publicPath: config.output.publicPath
- }));
-
- app.use(require("webpack-hot-middleware")(compiler));
-
// route table managed by express. routes are tested sequentially against each of these map rules. when a match is found, the handler is called to process the request
app.get(new RegExp(/^\/+$/), (req, res) => res.redirect(req.user ? "/home" : "/login")); // target urls that consist of one or more '/'s with nothing in between
app.use(express.static(publicDirectory, { setHeaders: res => res.setHeader("Access-Control-Allow-Origin", "*") })); //all urls that start with dash's public directory: /files/ (e.g., /files/images, /files/audio, etc)
@@ -74,7 +66,7 @@ export default async function InitializeServer(routeSetter: RouteSetter) {
// a field on one client, that change must be broadcast to all other clients)
await WebSocket.initialize(isRelease, app);
- //disconnect = async () => new Promise<Error>(resolve => server.close(resolve));
+ disconnect = async () => new Promise<Error>(resolve => server.close(resolve));
return isRelease;
}
@@ -100,13 +92,6 @@ function buildWithMiddleware(server: express.Express) {
passport.session(),
(req: express.Request, res: express.Response, next: express.NextFunction) => {
res.locals.user = req.user;
- if ((req.originalUrl.endsWith(".png") /*|| req.originalUrl.endsWith(".js")*/) && req.method === 'GET' && (res as any)._contentLength) {
- const period = 30000;
- res.set('Cache-control', `public, max-age=${period}`);
- } else {
- // for the other requests set strict no caching parameters
- res.set('Cache-control', `no-store`);
- }
next();
}
].forEach(next => server.use(next));
@@ -193,21 +178,11 @@ function proxyServe(req: any, requrl: string, response: any) {
return `href="${resolvedServerUrl + "/corsProxy/http" + href}"`;
};
const zipToStringDecoder = new (require('string_decoder').StringDecoder)('utf8');
- // const htmlText = zipToStringDecoder.write(zlib.gunzipSync(htmlBodyMemoryStream.read()).toString('utf8')
- // .replace('<head>', '<head> <style>[id ^= "google"] { display: none; } </style>')
- // .replace(/href="http([^"]*)"/g, replacer)
- // .replace(/target="_blank"/g, ""));
- // rewrittenHtmlBody = zlib.gzipSync(htmlText);
- const bodyStream = htmlBodyMemoryStream.read();
- if (bodyStream) {
- const htmlText = zipToStringDecoder.write(zlib.gunzipSync(bodyStream).toString('utf8')
- .replace('<head>', '<head> <style>[id ^= "google"] { display: none; } </style>')
- // .replace(/href="http([^"]*)"/g, replacer)
- .replace(/target="_blank"/g, ""));
- rewrittenHtmlBody = zlib.gzipSync(htmlText);
- } else {
- console.log("EMPTY body: href");
- }
+ const htmlText = zipToStringDecoder.write(zlib.gunzipSync(htmlBodyMemoryStream.read()).toString('utf8')
+ .replace('<head>', '<head> <style>[id ^= "google"] { display: none; } </style>')
+ .replace(/href="http([^"]*)"/g, replacer)
+ .replace(/target="_blank"/g, ""));
+ rewrittenHtmlBody = zlib.gzipSync(htmlText);
} catch (e) { console.log(e); }
}
});
diff --git a/src/server/websocket.ts b/src/server/websocket.ts
index 1b7f5919f..0c79c1bbb 100644
--- a/src/server/websocket.ts
+++ b/src/server/websocket.ts
@@ -4,6 +4,7 @@ import { createServer, Server } from "https";
import { networkInterfaces } from "os";
import * as sio from 'socket.io';
import { Socket } from "socket.io";
+import executeImport from "../scraping/buxton/final/BuxtonImporter";
import { Utils } from "../Utils";
import { logPort } from './ActionUtilities';
import { timeMap } from "./ApiManagers/UserManager";
@@ -124,6 +125,12 @@ export namespace WebSocket {
* as an emitter and a terminator the functions that simply broadcast a result
* or indicate termination to the client via the web socket
*/
+ Utils.AddServerHandler(socket, MessageStore.BeginBuxtonImport, () => {
+ executeImport(
+ deviceOrError => Utils.Emit(socket, MessageStore.BuxtonDocumentResult, deviceOrError),
+ results => Utils.Emit(socket, MessageStore.BuxtonImportComplete, results)
+ );
+ });
disconnect = () => {
socket.broadcast.emit("connection_terminated", Date.now());