This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
outline/server/services/collaboration.js

38 lines
1017 B
JavaScript

// @flow
import http from "http";
import { Logger } from "@hocuspocus/extension-logger";
import { Server } from "@hocuspocus/server";
import Koa from "koa";
import websocket from "koa-easy-ws";
import Router from "koa-router";
import AuthenticationExtension from "../collaboration/authentication";
import PersistenceExtension from "../collaboration/persistence";
export default function init(app: Koa, server: http.Server) {
const router = new Router();
const hocuspocus = Server.configure({
extensions: [
new AuthenticationExtension(),
new PersistenceExtension(),
new Logger(),
],
});
// Websockets for collaborative editing
router.get("/collaboration/:documentName", async (ctx) => {
let { documentName } = ctx.params;
if (ctx.ws) {
const ws = await ctx.ws();
hocuspocus.handleConnection(ws, ctx.request, documentName);
}
ctx.response.status = 101;
});
app.use(websocket());
app.use(router.routes());
app.use(router.allowedMethods());
}