From fd6c4064c190139522b5ffa162b0cbcae848acb3 Mon Sep 17 00:00:00 2001 From: Andrey Platov Date: Sat, 28 Aug 2021 09:08:41 +0200 Subject: [PATCH] `Token` moved to server-core Signed-off-by: Andrey Platov --- server/core/src/types.ts | 7 +++++++ server/mongo/src/storage.ts | 4 ++-- server/ws/package.json | 3 ++- server/ws/src/__tests__/remote.test.ts | 4 ++-- server/ws/src/__tests__/server.test.ts | 5 +++-- server/ws/src/server.ts | 18 ++++++------------ 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/server/core/src/types.ts b/server/core/src/types.ts index 610917d638..46310d86ef 100644 --- a/server/core/src/types.ts +++ b/server/core/src/types.ts @@ -59,3 +59,10 @@ export interface FullTextAdapter { * @public */ export type FullTextAdapterFactory = (url: string, workspace: string) => Promise + +/** + * @public + */ +export interface Token { + workspace: string +} diff --git a/server/mongo/src/storage.ts b/server/mongo/src/storage.ts index dd2e857d6f..8355bc98b4 100644 --- a/server/mongo/src/storage.ts +++ b/server/mongo/src/storage.ts @@ -19,8 +19,8 @@ import type { DbAdapter, TxAdapter } from '@anticrm/server-core' import { MongoClient, Db, Filter, Document, Sort } from 'mongodb' -function translateQuery (query: DocumentQuery): Filter { - return query as Filter +function translateQuery (query: DocumentQuery): Filter { + return query as Filter } function translateDoc (doc: Doc): Document { diff --git a/server/ws/package.json b/server/ws/package.json index 504a4b44c4..54467afb10 100644 --- a/server/ws/package.json +++ b/server/ws/package.json @@ -23,6 +23,7 @@ "jwt-simple": "^0.5.6", "ws": "^8.0.0", "@anticrm/platform": "~0.6.5", - "@anticrm/core": "~0.6.11" + "@anticrm/core": "~0.6.11", + "@anticrm/server-core": "~0.6.1" } } diff --git a/server/ws/src/__tests__/remote.test.ts b/server/ws/src/__tests__/remote.test.ts index 2d9ee5c670..cf6b565d8a 100644 --- a/server/ws/src/__tests__/remote.test.ts +++ b/server/ws/src/__tests__/remote.test.ts @@ -15,13 +15,13 @@ // import { readResponse, serialize } from '@anticrm/platform' -import { _Token } from '../server' +import type { Token } from '@anticrm/server-core' import { encode } from 'jwt-simple' import WebSocket from 'ws' describe('server', () => { function connect (): WebSocket { - const payload: _Token = { + const payload: Token = { workspace: 'ws1' } const token = encode(payload, 'secret') diff --git a/server/ws/src/__tests__/server.test.ts b/server/ws/src/__tests__/server.test.ts index b228b6268e..56e325e48c 100644 --- a/server/ws/src/__tests__/server.test.ts +++ b/server/ws/src/__tests__/server.test.ts @@ -15,7 +15,8 @@ // import { readResponse, serialize } from '@anticrm/platform' -import { start, _Token, disableLogging } from '../server' +import { start, disableLogging } from '../server' +import type { Token } from '@anticrm/server-core' import { encode } from 'jwt-simple' import WebSocket from 'ws' @@ -34,7 +35,7 @@ describe('server', () => { }), 3333) function connect (): WebSocket { - const payload: _Token = { + const payload: Token = { workspace: 'latest' } const token = encode(payload, 'secret') diff --git a/server/ws/src/server.ts b/server/ws/src/server.ts index 8585fef2d4..1d530c4f76 100644 --- a/server/ws/src/server.ts +++ b/server/ws/src/server.ts @@ -15,6 +15,7 @@ // import { readRequest, serialize, Response } from '@anticrm/platform' +import type { Token } from '@anticrm/server-core' import { createServer, IncomingMessage } from 'http' import WebSocket, { Server } from 'ws' import { decode } from 'jwt-simple' @@ -25,17 +26,10 @@ let LOGGING_ENABLED = true export function disableLogging (): void { LOGGING_ENABLED = false } -/** - * @internal - */ -export interface _Token { - workspace: string -} - class Session implements Storage { constructor ( private readonly manager: SessionManager, - private readonly token: _Token, + private readonly token: Token, private readonly storage: ServerStorage ) {} @@ -62,7 +56,7 @@ interface Workspace { class SessionManager { private readonly workspaces = new Map() - async addSession (ws: WebSocket, token: _Token, storageFactory: (ws: string) => Promise): Promise { + async addSession (ws: WebSocket, token: Token, storageFactory: (ws: string) => Promise): Promise { const workspace = this.workspaces.get(token.workspace) if (workspace === undefined) { const storage = await storageFactory(token.workspace) @@ -80,7 +74,7 @@ class SessionManager { } } - close (ws: WebSocket, token: _Token, code: number, reason: string): void { + close (ws: WebSocket, token: Token, code: number, reason: string): void { if (LOGGING_ENABLED) console.log(`closing websocket, code: ${code}, reason: ${reason}`) const workspace = this.workspaces.get(token.workspace) if (workspace === undefined) { @@ -93,7 +87,7 @@ class SessionManager { } } - broadcast (from: Session, token: _Token, resp: Response): void { + broadcast (from: Session, token: Token, resp: Response): void { const workspace = this.workspaces.get(token.workspace) if (workspace === undefined) { throw new Error('internal: cannot find sessions') @@ -127,7 +121,7 @@ export function start (storageFactory: (workspace: string) => Promise { + wss.on('connection', async (ws: WebSocket, request: any, token: Token) => { const buffer: string[] = [] ws.on('message', (msg: string) => { buffer.push(msg) })