diff --git a/apps/server/src/exception-filter.ts b/apps/server/src/exception-filter.ts index a35b70b..6e03ea0 100644 --- a/apps/server/src/exception-filter.ts +++ b/apps/server/src/exception-filter.ts @@ -1,7 +1,6 @@ import { DomainException } from './exception/domain-exception'; -import { JsonRpcExceptionFilter } from './json-rpc/json-rpc.decorator'; -import { ExceptionFilter } from './json-rpc/exceptions/exception-filter'; -import { JsonRpcDomainException } from '../../../libs/types/src/exceptions/json-rpc-domain-exception'; +import { JsonRpcDomainException } from '@vacgom/types'; +import { ExceptionFilter, JsonRpcExceptionFilter } from 'nestjs-jayson'; @JsonRpcExceptionFilter(DomainException) export class DomainExceptionFilter implements ExceptionFilter { @@ -14,7 +13,7 @@ export class DomainExceptionFilter implements ExceptionFilter { data: exception.data, }, }; - + callback(error); } } diff --git a/apps/server/src/json-rpc/error.ts b/apps/server/src/json-rpc/error.ts deleted file mode 100644 index 2b8ac4e..0000000 --- a/apps/server/src/json-rpc/error.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class JsonRpcError extends Error { - constructor(public code: number, public message: string, public data?: T) { - super(message); - } -} diff --git a/apps/server/src/json-rpc/types.ts b/apps/server/src/json-rpc/types.ts deleted file mode 100644 index e69de29..0000000 diff --git a/libs/nestjs-jayson/.eslintrc.json b/libs/nestjs-jayson/.eslintrc.json new file mode 100644 index 0000000..20872da --- /dev/null +++ b/libs/nestjs-jayson/.eslintrc.json @@ -0,0 +1,67 @@ +{ + "ignorePatterns": [ + "**/*" + ], + "plugins": [ + "@nx" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": { + "@nx/enforce-module-boundaries": [ + "error", + { + "enforceBuildableLibDependency": true, + "allow": [], + "depConstraints": [ + { + "sourceTag": "*", + "onlyDependOnLibsWithTags": [ + "*" + ] + } + ] + } + ] + } + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "extends": [ + "plugin:@nx/typescript" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "extends": [ + "plugin:@nx/javascript" + ], + "rules": {} + }, + { + "files": [ + "*.spec.ts", + "*.spec.tsx", + "*.spec.js", + "*.spec.jsx" + ], + "env": { + "jest": true + }, + "rules": {} + } + ] +} diff --git a/libs/nestjs-jayson/README.md b/libs/nestjs-jayson/README.md new file mode 100644 index 0000000..79b30d2 --- /dev/null +++ b/libs/nestjs-jayson/README.md @@ -0,0 +1,7 @@ +# nestjs-jayson + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test nestjs-jayson` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/nestjs-jayson/jest.config.ts b/libs/nestjs-jayson/jest.config.ts new file mode 100644 index 0000000..b562349 --- /dev/null +++ b/libs/nestjs-jayson/jest.config.ts @@ -0,0 +1,13 @@ +/* eslint-disable */ +const nxPreset = require('@nx/jest/preset').default; + +export default { + displayName: 'nestjs-jayson', + preset: nxPreset, + testEnvironment: 'node', + transform: { + '^.+\\.[tj]s$': ['ts-jest', { tsconfig: 'tsconfig.spec.json' }], + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: './coverage/', +}; diff --git a/libs/nestjs-jayson/project.json b/libs/nestjs-jayson/project.json new file mode 100644 index 0000000..2f22741 --- /dev/null +++ b/libs/nestjs-jayson/project.json @@ -0,0 +1,16 @@ +{ + "name": "nestjs-jayson", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/nestjs-jayson/src", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/nestjs-jayson/jest.config.ts" + } + } + } +} diff --git a/libs/nestjs-jayson/src/index.ts b/libs/nestjs-jayson/src/index.ts new file mode 100644 index 0000000..f41a696 --- /dev/null +++ b/libs/nestjs-jayson/src/index.ts @@ -0,0 +1 @@ +export * from './lib'; diff --git a/libs/nestjs-jayson/src/lib/error.ts b/libs/nestjs-jayson/src/lib/error.ts new file mode 100644 index 0000000..07b25a2 --- /dev/null +++ b/libs/nestjs-jayson/src/lib/error.ts @@ -0,0 +1,9 @@ +export class JsonRpcError extends Error { + constructor( + public code: number, + public override message: string, + public data?: T + ) { + super(message); + } +} diff --git a/apps/server/src/json-rpc/exceptions/exception-filter.ts b/libs/nestjs-jayson/src/lib/exceptions/exception-filter.ts similarity index 100% rename from apps/server/src/json-rpc/exceptions/exception-filter.ts rename to libs/nestjs-jayson/src/lib/exceptions/exception-filter.ts diff --git a/apps/server/src/json-rpc/exceptions/exception-handler.ts b/libs/nestjs-jayson/src/lib/exceptions/exception-handler.ts similarity index 100% rename from apps/server/src/json-rpc/exceptions/exception-handler.ts rename to libs/nestjs-jayson/src/lib/exceptions/exception-handler.ts diff --git a/libs/nestjs-jayson/src/lib/exceptions/index.ts b/libs/nestjs-jayson/src/lib/exceptions/index.ts new file mode 100644 index 0000000..bbac417 --- /dev/null +++ b/libs/nestjs-jayson/src/lib/exceptions/index.ts @@ -0,0 +1,2 @@ +export * from './exception-filter'; +export * from './exception-handler'; diff --git a/libs/nestjs-jayson/src/lib/index.ts b/libs/nestjs-jayson/src/lib/index.ts new file mode 100644 index 0000000..d551270 --- /dev/null +++ b/libs/nestjs-jayson/src/lib/index.ts @@ -0,0 +1,8 @@ +export * from './error'; +export * from './json-rpc.decorator'; +export * from './json-rpc.module'; +export * from './json-rpc.service'; +export * from './json-rpc-middleware.interface'; +export * from './middleware'; +export * from './middleware-manager'; +export * from './exceptions'; diff --git a/apps/server/src/json-rpc/json-rpc-middleware.interface.ts b/libs/nestjs-jayson/src/lib/json-rpc-middleware.interface.ts similarity index 100% rename from apps/server/src/json-rpc/json-rpc-middleware.interface.ts rename to libs/nestjs-jayson/src/lib/json-rpc-middleware.interface.ts diff --git a/apps/server/src/json-rpc/json-rpc.decorator.ts b/libs/nestjs-jayson/src/lib/json-rpc.decorator.ts similarity index 100% rename from apps/server/src/json-rpc/json-rpc.decorator.ts rename to libs/nestjs-jayson/src/lib/json-rpc.decorator.ts diff --git a/apps/server/src/json-rpc/json-rpc.module.ts b/libs/nestjs-jayson/src/lib/json-rpc.module.ts similarity index 94% rename from apps/server/src/json-rpc/json-rpc.module.ts rename to libs/nestjs-jayson/src/lib/json-rpc.module.ts index 4518707..7c53ed2 100644 --- a/apps/server/src/json-rpc/json-rpc.module.ts +++ b/libs/nestjs-jayson/src/lib/json-rpc.module.ts @@ -9,7 +9,7 @@ import { import { DiscoveryModule } from '@nestjs/core'; import { JsonRpcService } from './json-rpc.service'; -import { JsonRpcExceptionHandler } from './exceptions/exception-handler'; +import { JsonRpcExceptionHandler } from './exceptions'; import { MiddlewareManager } from './middleware-manager'; import { JsonRpcMiddlewareInterface } from './json-rpc-middleware.interface'; import { JsonRpcServerMiddleware } from './middleware'; diff --git a/apps/server/src/json-rpc/json-rpc.service.ts b/libs/nestjs-jayson/src/lib/json-rpc.service.ts similarity index 95% rename from apps/server/src/json-rpc/json-rpc.service.ts rename to libs/nestjs-jayson/src/lib/json-rpc.service.ts index e4ddf9d..2447e6d 100644 --- a/apps/server/src/json-rpc/json-rpc.service.ts +++ b/libs/nestjs-jayson/src/lib/json-rpc.service.ts @@ -17,10 +17,8 @@ import { RequestContext, } from './json-rpc.decorator'; import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper'; -import { ExceptionFilter } from './exceptions/exception-filter'; -import { JsonRpcExceptionHandler } from './exceptions/exception-handler'; +import { ExceptionFilter, JsonRpcExceptionHandler } from './exceptions'; import { JsonRpcMiddlewareInterface } from './json-rpc-middleware.interface'; -import { AuthMiddleware } from '../password-reset/auth.middleware'; import { MiddlewareManager } from './middleware-manager'; @Injectable() @@ -69,7 +67,7 @@ export class JsonRpcService implements OnModuleInit { instance, methodName, `${controllerName}.${methodName}`, - [new AuthMiddleware()] + [] ); this.logger.log( `Registered method ${controllerName}.${methodName}`, @@ -109,7 +107,7 @@ export class JsonRpcService implements OnModuleInit { } private buildParam(params: JsonRpcParam[], requestContext: RequestContext) { - const args = []; + const args: any[] = []; params.forEach((param) => { if (param.type === 'REQ') { @@ -161,6 +159,8 @@ export class JsonRpcService implements OnModuleInit { const next = () => { if (ms.length > 0) { const middleware = ms.pop(); + if (!middleware) return resolve(true); + const instance = this.getMiddlewareInstance(middleware); const promise = instance.use(context.req, callback, next); diff --git a/apps/server/src/json-rpc/middleware-manager.ts b/libs/nestjs-jayson/src/lib/middleware-manager.ts similarity index 100% rename from apps/server/src/json-rpc/middleware-manager.ts rename to libs/nestjs-jayson/src/lib/middleware-manager.ts diff --git a/apps/server/src/json-rpc/middleware.ts b/libs/nestjs-jayson/src/lib/middleware.ts similarity index 78% rename from apps/server/src/json-rpc/middleware.ts rename to libs/nestjs-jayson/src/lib/middleware.ts index 5a8f50f..5f0b275 100644 --- a/apps/server/src/json-rpc/middleware.ts +++ b/libs/nestjs-jayson/src/lib/middleware.ts @@ -13,9 +13,9 @@ export class JsonRpcServerMiddleware implements NestMiddleware { const server = this.jsonService.getServer(); - server.call(req.body, context, function (err, result) { - if (err) return res.send(err); - res.send(result || {}); + server.call(req.body, context, function (err, result): void { + if (err) res.send(err); + else res.send(result || {}); }); } } diff --git a/libs/nestjs-jayson/tsconfig.json b/libs/nestjs-jayson/tsconfig.json new file mode 100644 index 0000000..20c6bc1 --- /dev/null +++ b/libs/nestjs-jayson/tsconfig.json @@ -0,0 +1,43 @@ +{ + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compileOnSave": false, + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "rootDir": ".", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es2015", + "module": "esnext", + "lib": [ + "es2020", + "dom" + ], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": "." + }, + "exclude": [ + "node_modules", + "tmp" + ] +} + diff --git a/libs/nestjs-jayson/tsconfig.lib.json b/libs/nestjs-jayson/tsconfig.lib.json new file mode 100644 index 0000000..c297a24 --- /dev/null +++ b/libs/nestjs-jayson/tsconfig.lib.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"], + "target": "es2021", + "strictNullChecks": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/libs/nestjs-jayson/tsconfig.spec.json b/libs/nestjs-jayson/tsconfig.spec.json new file mode 100644 index 0000000..9b2a121 --- /dev/null +++ b/libs/nestjs-jayson/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 7f004f8..51e2853 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -16,7 +16,8 @@ "baseUrl": ".", "paths": { "@vacgom/types": ["libs/types/src/index.ts"], - "@vacgom/vacapi-sdk": ["libs/vacapi-sdk/src/index.ts"] + "@vacgom/vacapi-sdk": ["libs/vacapi-sdk/src/index.ts"], + "nestjs-jayson": ["libs/nestjs-jayson/src/index.ts"] } }, "exclude": ["node_modules", "tmp"]