diff --git a/index.js b/index.js new file mode 100644 index 0000000..eab06b8 --- /dev/null +++ b/index.js @@ -0,0 +1,39 @@ +const { Authorizer } = require('@authorizerdev/authorizer-js') +const { Server } = require('@hocuspocus/server') + +const authorizer = new Authorizer({ + clientID: process.env.AUTHORIZER_CLIENT_ID, + authorizerURL: 'https://auth.discours.io', + redirectURL: 'https://testing.discours.io', +}) +;(async () => { + const server = await Server.configure({ + port: 4242, + async onConnect({ connection }) { + connection.requiresAuthentication = true + }, + async onAuthenticate(data) { + if (data.requestHeaders) { + const params = { + token_type: 'access_token', + token: data.requestHeaders['authorization'] || '', + } + if (params.token) { + const response = await authorizer.validateJWTToken(params) + if (response?.data?.is_valid) { + const { sub: user, allowed_roles: roles } = response.data.claims + console.debug(`user_id: ${user} roles: ${roles}`) + return { + id: user, + roles, + } + } + console.error('no valid auth token presented') + throw new Error('Not authorized!') + } + } + }, + }).listen() + + server.listen() +})() diff --git a/index.ts b/index.ts deleted file mode 100644 index d73ac25..0000000 --- a/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { - ApiResponse, - Authorizer, - ConfigType, - ValidateJWTTokenInput, - ValidateJWTTokenResponse, -} from '@authorizerdev/authorizer-js' -import Server, { onAuthenticatePayload } from '@hocuspocus/server' - -const authorizer = new Authorizer({ - clientID: process.env.AUTHORIZER_CLIENT_ID, - authorizerURL: 'https://auth.discours.io', - redirectURL: 'https://testing.discours.io', -} as ConfigType) - -const server = await Server.configure({ - port: 4242, - async onConnect({ connection }) { - connection.requiresAuthentication = true - }, - async onAuthenticate(data: onAuthenticatePayload) { - if (data.requestHeaders) { - const params: ValidateJWTTokenInput = { - token_type: 'access_token', - token: data.requestHeaders['authorization'] || '', - } - if (params.token) { - // NOTE: ожидаем, что клиент отправит токен - const response: ApiResponse = await authorizer.validateJWTToken(params) - if (response?.data?.is_valid) { - const { sub: user, allowed_roles: roles } = response.data.claims - console.debug(`user_id: ${user} roles: ${roles}`) - return { - id: user, - roles, - } - } - console.error('no valid auth token presented') - throw new Error('Not authorized!') - } - } - }, -}).listen() - -server.listen() diff --git a/package-lock.json b/package-lock.json index 1d50ebb..1fa31fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "discours-hocuspocus", + "name": "discours-editing-server", "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "discours-hocuspocus", + "name": "discours-editing-server", "version": "1.0.2", "license": "MIT", "dependencies": { @@ -13,8 +13,7 @@ "@hocuspocus/server": "2.0.1" }, "devDependencies": { - "@biomejs/biome": "1.5.3", - "typescript": "5.3.3" + "@biomejs/biome": "1.5.3" } }, "node_modules/@authorizerdev/authorizer-js": { @@ -58,22 +57,6 @@ "@biomejs/cli-win32-x64": "1.5.3" } }, - "node_modules/@biomejs/cli-darwin-arm64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.5.3.tgz", - "integrity": "sha512-ImU7mh1HghEDyqNmxEZBoMPr8SxekkZuYcs+gynKlNW+TALQs7swkERiBLkG9NR0K1B3/2uVzlvYowXrmlW8hw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.*" - } - }, "node_modules/@biomejs/cli-darwin-x64": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.5.3.tgz", @@ -90,102 +73,6 @@ "node": ">=14.*" } }, - "node_modules/@biomejs/cli-linux-arm64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.5.3.tgz", - "integrity": "sha512-cupBQv0sNF1OKqBfx7EDWMSsKwRrBUZfjXawT4s6hKV6ALq7p0QzWlxr/sDmbKMLOaLQtw2Qgu/77N9rm+f9Rg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.*" - } - }, - "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.5.3.tgz", - "integrity": "sha512-DYuMizUYUBYfS0IHGjDrOP1RGipqWfMGEvNEJ398zdtmCKLXaUvTimiox5dvx4X15mBK5M2m8wgWUgOP1giUpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.*" - } - }, - "node_modules/@biomejs/cli-linux-x64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.5.3.tgz", - "integrity": "sha512-YQrSArQvcv4FYsk7Q91Yv4uuu5F8hJyORVcv3zsjCLGkjIjx2RhjYLpTL733SNL7v33GmOlZY0eFR1ko38tuUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.*" - } - }, - "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.5.3.tgz", - "integrity": "sha512-UUHiAnlDqr2Y/LpvshBFhUYMWkl2/Jn+bi3U6jKuav0qWbbBKU/ByHgR4+NBxpKBYoCtWxhnmatfH1bpPIuZMw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.*" - } - }, - "node_modules/@biomejs/cli-win32-arm64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.5.3.tgz", - "integrity": "sha512-HxatYH7vf/kX9nrD+pDYuV2GI9GV8EFo6cfKkahAecTuZLPxryHx1WEfJthp5eNsE0+09STGkKIKjirP0ufaZA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.*" - } - }, - "node_modules/@biomejs/cli-win32-x64": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.5.3.tgz", - "integrity": "sha512-fMvbSouZEASU7mZH8SIJSANDm5OqsjgtVXlbUqxwed6BP7uuHRSs396Aqwh2+VoW8fwTpp6ybIUoC9FrzB0kyA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.*" - } - }, "node_modules/@hocuspocus/common": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@hocuspocus/common/-/common-2.0.1.tgz", diff --git a/package.json b/package.json index d3e2ee0..607ae93 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,11 @@ "name": "discours-editing-server", "version": "1.0.2", "description": "discours.io webrtc p2p network helping crdt-server", - "main": "index.ts", + "main": "index.js", "type": "module", "scripts": { "fix": "npx @biomejs/biome check --apply-unsafe .", - "start": "npx tsc index.ts" + "start": "node ./index.js" }, "repository": { "type": "git", @@ -19,7 +19,6 @@ "@hocuspocus/server": "2.0.1" }, "devDependencies": { - "@biomejs/biome": "1.5.3", - "typescript": "5.3.3" + "@biomejs/biome": "1.5.3" } } diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 10bf43c..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "target": "es2017", - "lib": ["es2022", "dom"], - "esModuleInterop": true, - "moduleResolution": "NodeNext", - "module": "NodeNext" - } -}