workspace support

Signed-off-by: Andrey Platov <andrey@hardcoreeng.com>
This commit is contained in:
Andrey Platov 2021-08-19 12:35:56 +02:00
parent 943f8baa49
commit 99c49f39be
No known key found for this signature in database
GPG Key ID: C8787EFEB4B64AF0
7 changed files with 34 additions and 55 deletions

View File

@ -1474,6 +1474,10 @@ packages:
resolution: {integrity: sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg==}
dev: false
/@types/node/16.6.2:
resolution: {integrity: sha512-LSw8TZt12ZudbpHc6EkIyDM3nHVWKYrAvGy6EAJfNfjusbwnThqjqxUKKRwuV3iWYeW/LYMzNgaq3MaLffQ2xA==}
dev: false
/@types/normalize-package-data/2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
dev: false
@ -7925,37 +7929,7 @@ packages:
webpack: 5.48.0_webpack-cli@4.7.2
dev: false
/ts-node/10.2.0_typescript@4.3.5:
resolution: {integrity: sha512-FstYHtQz6isj8rBtYMN4bZdnXN1vq4HCbqn9vdNQcInRqtB86PePJQIxE6es0PhxKWhj2PHuwbG40H+bxkZPmg==}
engines: {node: '>=12.0.0'}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
'@swc/wasm': '>=1.2.50'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
dependencies:
'@cspotcode/source-map-support': 0.6.1
'@tsconfig/node10': 1.0.8
'@tsconfig/node12': 1.0.9
'@tsconfig/node14': 1.0.1
'@tsconfig/node16': 1.0.2
acorn: 8.4.1
acorn-walk: 8.1.1
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 4.3.5
yn: 3.1.1
dev: false
/ts-node/10.2.1_dea0625f6d31b223e93dc3dc354b8b43:
/ts-node/10.2.1_c780171742f6906a053a603dfa210a4e:
resolution: {integrity: sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==}
engines: {node: '>=12.0.0'}
hasBin: true
@ -7975,7 +7949,7 @@ packages:
'@tsconfig/node12': 1.0.9
'@tsconfig/node14': 1.0.1
'@tsconfig/node16': 1.0.2
'@types/node': 16.4.13
'@types/node': 16.6.2
acorn: 8.4.1
acorn-walk: 8.1.1
arg: 4.1.3
@ -8957,7 +8931,7 @@ packages:
eslint-plugin-node: 11.1.0_eslint@7.32.0
eslint-plugin-promise: 4.3.1
jwt-simple: 0.5.6
ts-node: 10.2.0_typescript@4.3.5
ts-node: 10.2.1_typescript@4.3.5
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
@ -9039,13 +9013,13 @@ packages:
name: '@rush-temp/model-all'
version: 0.0.0
dependencies:
'@types/node': 16.4.13
'@types/node': 16.6.2
'@typescript-eslint/eslint-plugin': 4.28.5_a8e83fcad666e1ba86be4b2e27a20aea
eslint: 7.32.0
eslint-plugin-import: 2.23.4_eslint@7.32.0
eslint-plugin-node: 11.1.0_eslint@7.32.0
eslint-plugin-promise: 4.3.1
ts-node: 10.2.1_dea0625f6d31b223e93dc3dc354b8b43
ts-node: 10.2.1_c780171742f6906a053a603dfa210a4e
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
@ -9480,7 +9454,7 @@ packages:
version: 0.0.0
dependencies:
'@types/heft-jest': 1.0.2
'@types/node': 16.4.13
'@types/node': 16.6.2
'@types/ws': 7.4.7
'@typescript-eslint/eslint-plugin': 4.28.5_a8e83fcad666e1ba86be4b2e27a20aea
eslint: 7.32.0
@ -9500,7 +9474,7 @@ packages:
version: 0.0.0
dependencies:
'@types/heft-jest': 1.0.2
'@types/node': 16.4.13
'@types/node': 16.6.2
'@types/ws': 7.4.7
'@typescript-eslint/eslint-plugin': 4.28.5_a8e83fcad666e1ba86be4b2e27a20aea
eslint: 7.32.0
@ -9520,7 +9494,7 @@ packages:
version: 0.0.0
dependencies:
'@types/heft-jest': 1.0.2
'@types/node': 16.4.13
'@types/node': 16.6.2
'@types/ws': 7.4.7
'@typescript-eslint/eslint-plugin': 4.28.5_a8e83fcad666e1ba86be4b2e27a20aea
eslint: 7.32.0
@ -9539,13 +9513,13 @@ packages:
dev: false
file:projects/server.tgz_6c259fadfeb3a4b20890aefe87070b8b:
resolution: {integrity: sha512-bJkh/bNrjcVnBLEH3EpG7kFMKYsN1xBO8BUe4ugziPYqHJwfwTz4nuPhEd9wxzN+jvOU24KPh0wBb1qMl9pyFw==, tarball: file:projects/server.tgz}
resolution: {integrity: sha512-FGh0R+fgnIuNcoSfPKeIXVZuNrlspS3l7hwwb/pJbyHQ/ao/mETg/xyDtFO53czcAIPCYt43i/de/OOGF0j3Lw==, tarball: file:projects/server.tgz}
id: file:projects/server.tgz
name: '@rush-temp/server'
version: 0.0.0
dependencies:
'@types/heft-jest': 1.0.2
'@types/node': 16.4.13
'@types/node': 16.6.2
'@types/ws': 7.4.7
'@typescript-eslint/eslint-plugin': 4.28.5_a8e83fcad666e1ba86be4b2e27a20aea
eslint: 7.32.0
@ -9689,7 +9663,7 @@ packages:
'@types/express': 4.17.13
'@types/express-fileupload': 1.1.7
'@types/heft-jest': 1.0.2
'@types/node': 16.4.13
'@types/node': 16.6.2
'@types/uuid': 8.3.1
'@types/ws': 7.4.7
'@typescript-eslint/eslint-plugin': 4.28.5_a8e83fcad666e1ba86be4b2e27a20aea
@ -9700,7 +9674,7 @@ packages:
eslint-plugin-promise: 4.3.1
express: 4.17.1
express-fileupload: 1.2.1
ts-node: 10.2.1_dea0625f6d31b223e93dc3dc354b8b43
ts-node: 10.2.1_c780171742f6906a053a603dfa210a4e
uuid: 8.3.2
transitivePeerDependencies:
- '@swc/core'
@ -9799,7 +9773,7 @@ packages:
dev: false
file:projects/workspace.tgz_6c259fadfeb3a4b20890aefe87070b8b:
resolution: {integrity: sha512-pWnn59hoagFEU+9zoCfk37thS081NkywXU6pDVWPcrjkHS6HBnWUmyE90XlcJn3zzWgwK7l8tWA37SGQdaPZWw==, tarball: file:projects/workspace.tgz}
resolution: {integrity: sha512-gFZBlRFUbfwZ4a/RKKj/scqqzFrsGzYIY8VkVoB2NmQ6jPSHtPyLoyZtM8I84p+QnyHqlFpEgkZKTAbRTDrwnw==, tarball: file:projects/workspace.tgz}
id: file:projects/workspace.tgz
name: '@rush-temp/workspace'
version: 0.0.0

View File

@ -11,7 +11,7 @@
"devDependencies": {
"@anticrm/platform-rig":"~0.6.0",
"@types/heft-jest":"^1.0.2",
"@types/node": "^16.4.10",
"@types/node": "^16.6.2",
"@typescript-eslint/eslint-plugin":"4",
"eslint-plugin-import":"2",
"eslint-plugin-promise":"4",

View File

@ -16,5 +16,12 @@
import { start } from '.'
const url = process.env.MONGO_URL
if (url === undefined) {
console.error('please provide mongodb url')
process.exit(1)
}
// eslint-disable-next-line @typescript-eslint/no-floating-promises
start(3333)
start(url, 3333)

View File

@ -20,14 +20,11 @@ import { createStorage } from '@anticrm/mongo'
import { addLocation } from '@anticrm/platform'
import { serverChunterId } from '@anticrm/server-chunter'
const url = 'mongodb://localhost:27017'
const dbName = 'ws1'
/**
* @public
*/
export async function start (port: number, host?: string): Promise<void> {
export async function start (dbUrl: string, port: number, host?: string): Promise<void> {
addLocation(serverChunterId, () => import('@anticrm/server-chunter-resources'))
startJsonRpc(() => createStorage(url, dbName), port, host)
startJsonRpc((workspace: string) => createStorage(dbUrl, workspace), port, host)
}

View File

@ -4,6 +4,7 @@
"compilerOptions": {
"rootDir": "./src",
"outDir": "./lib",
"esModuleInterop": true
"esModuleInterop": true,
"types": ["node"]
}
}

View File

@ -30,6 +30,6 @@ export async function createModel (url: string, dbName: string): Promise<number>
const result = await db.collection(DOMAIN_TX).insertMany(txJson as Document[])
return result.insertedCount
} finally {
client.close()
await client.close()
}
}

View File

@ -62,10 +62,10 @@ interface Workspace {
class SessionManager {
private readonly workspaces = new Map<string, Workspace>()
async addSession (ws: WebSocket, token: _Token, storageFactory: () => Promise<ServerStorage>): Promise<Session> {
async addSession (ws: WebSocket, token: _Token, storageFactory: (ws: string) => Promise<ServerStorage>): Promise<Session> {
const workspace = this.workspaces.get(token.workspace)
if (workspace === undefined) {
const storage = await storageFactory()
const storage = await storageFactory(token.workspace)
const session = new Session(this, token, storage)
const workspace: Workspace = {
storage,
@ -120,7 +120,7 @@ async function handleRequest<S> (service: S, ws: WebSocket, msg: string): Promis
* @param port -
* @param host -
*/
export function start (storageFactory: () => Promise<ServerStorage>, port: number, host?: string): void {
export function start (storageFactory: (workspace: string) => Promise<ServerStorage>, port: number, host?: string): void {
console.log(`starting server on port ${port} ...`)
const sessions = new SessionManager()