From 9149c5b28f49c57757fe07889928877804be54c6 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Tue, 17 Oct 2023 19:41:44 +0000 Subject: [PATCH 1/7] fix: correction in sentry integration --- packages/nocodb/src/Noco.ts | 34 +++++++++---------- packages/nocodb/src/app.module.ts | 13 +++++++ .../global-exception.filter.ts | 9 ++++- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/packages/nocodb/src/Noco.ts b/packages/nocodb/src/Noco.ts index 994d732dfc..7b0ea06d9f 100644 --- a/packages/nocodb/src/Noco.ts +++ b/packages/nocodb/src/Noco.ts @@ -121,7 +121,7 @@ export default class Noco { nestApp.use(requestIp.mw()); nestApp.use(cookieParser()); - this.initSentry(nestApp); + // this.initSentry(nestApp); nestApp.useWebSocketAdapter(new IoAdapter(httpServer)); @@ -139,7 +139,7 @@ export default class Noco { server.get('/', (_req, res) => res.redirect(dashboardPath)); } - this.initSentryErrorHandler(server); + // this.initSentryErrorHandler(server); return nestApp.getHttpAdapter().getInstance(); } @@ -189,19 +189,19 @@ export default class Noco { } process.env.NC_SERVER_UUID = serverId; } - - private static initSentryErrorHandler(router) { - if (process.env.NC_SENTRY_DSN) { - router.use(Sentry.Handlers.errorHandler()); - } - } - - private static initSentry(router) { - if (process.env.NC_SENTRY_DSN) { - Sentry.init({ dsn: process.env.NC_SENTRY_DSN }); - - // The request handler must be the first middleware on the app - router.use(Sentry.Handlers.requestHandler()); - } - } + // + // private static initSentryErrorHandler(router) { + // if (process.env.NC_SENTRY_DSN) { + // router.use(Sentry.Handlers.errorHandler()); + // } + // } + // + // private static initSentry(router) { + // if (process.env.NC_SENTRY_DSN) { + // Sentry.init({ dsn: process.env.NC_SENTRY_DSN }); + // + // // The request handler must be the first middleware on the app + // router.use(Sentry.Handlers.requestHandler()); + // } + // } } diff --git a/packages/nocodb/src/app.module.ts b/packages/nocodb/src/app.module.ts index 1a944c37f1..493b9b0c9f 100644 --- a/packages/nocodb/src/app.module.ts +++ b/packages/nocodb/src/app.module.ts @@ -3,6 +3,7 @@ import { APP_FILTER, APP_GUARD } from '@nestjs/core'; // @ts-ignore import { ConfigModule } from '@nestjs/config'; import { EventEmitterModule as NestJsEventEmitter } from '@nestjs/event-emitter'; +import { SentryModule } from '@ntegral/nestjs-sentry'; import type { MiddlewareConsumer } from '@nestjs/common'; import { GlobalExceptionFilter } from '~/filters/global-exception/global-exception.filter'; import { GlobalMiddleware } from '~/middlewares/global/global.middleware'; @@ -24,6 +25,7 @@ import { HookHandlerService } from '~/services/hook-handler.service'; import { BasicStrategy } from '~/strategies/basic.strategy/basic.strategy'; import { UsersModule } from '~/modules/users/users.module'; import { AuthModule } from '~/modules/auth/auth.module'; +import {packageInfo} from "~/utils/packageVersion"; export const ceModuleConfig = { imports: [ @@ -39,6 +41,17 @@ export const ceModuleConfig = { load: [() => appConfig], isGlobal: true, }), + ...(process.env.NC_SENTRY_DSN + ? [ + SentryModule.forRoot({ + dsn: process.env.NC_SENTRY_DSN, + debug: false, + environment: process.env.NODE_ENV, + release: packageInfo.version, // must create a release in sentry.io dashboard + logLevels: ['debug'], //based on sentry.io loglevel // + }), + ] + : []), ], providers: [ AuthService, diff --git a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts index f1576cfa9d..ef3d2268aa 100644 --- a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts +++ b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts @@ -1,4 +1,5 @@ -import { Catch, Logger, NotFoundException } from '@nestjs/common'; +import { Catch, Logger, NotFoundException, Optional } from '@nestjs/common'; +import { InjectSentry, SentryService } from '@ntegral/nestjs-sentry'; import type { ArgumentsHost, ExceptionFilter } from '@nestjs/common'; import type { Response } from 'express'; import { @@ -15,6 +16,10 @@ import { @Catch() export class GlobalExceptionFilter implements ExceptionFilter { + constructor( + @Optional() @InjectSentry() private readonly client: SentryService, + ) {} + private logger = new Logger(GlobalExceptionFilter.name); catch(exception: any, host: ArgumentsHost) { @@ -90,6 +95,8 @@ export class GlobalExceptionFilter implements ExceptionFilter { if (exception.getStatus?.()) { response.status(exception.getStatus()).json(exception.getResponse()); } else { + this.client?.instance().captureException(exception); + // todo: change the response code response.status(400).json({ msg: exception.message, From 6e22796d15621d52cef79e7fcf12d436d069803b Mon Sep 17 00:00:00 2001 From: Pranav C Date: Tue, 17 Oct 2023 19:41:46 +0000 Subject: [PATCH 2/7] chore: integrate sentry --- packages/nocodb/src/Noco.ts | 2 -- packages/nocodb/src/app.module.ts | 2 +- .../global-exception/global-exception.filter.ts | 15 +++++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/nocodb/src/Noco.ts b/packages/nocodb/src/Noco.ts index 7b0ea06d9f..baf1d0fb8f 100644 --- a/packages/nocodb/src/Noco.ts +++ b/packages/nocodb/src/Noco.ts @@ -1,6 +1,4 @@ import path from 'path'; -import * as Sentry from '@sentry/node'; -import { Logger } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import clear from 'clear'; import * as express from 'express'; diff --git a/packages/nocodb/src/app.module.ts b/packages/nocodb/src/app.module.ts index 493b9b0c9f..b36bf4988b 100644 --- a/packages/nocodb/src/app.module.ts +++ b/packages/nocodb/src/app.module.ts @@ -25,7 +25,7 @@ import { HookHandlerService } from '~/services/hook-handler.service'; import { BasicStrategy } from '~/strategies/basic.strategy/basic.strategy'; import { UsersModule } from '~/modules/users/users.module'; import { AuthModule } from '~/modules/auth/auth.module'; -import {packageInfo} from "~/utils/packageVersion"; +import { packageInfo } from '~/utils/packageVersion'; export const ceModuleConfig = { imports: [ diff --git a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts index ef3d2268aa..dffbdd94d2 100644 --- a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts +++ b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts @@ -1,7 +1,8 @@ import { Catch, Logger, NotFoundException, Optional } from '@nestjs/common'; import { InjectSentry, SentryService } from '@ntegral/nestjs-sentry'; +import { ThrottlerException } from '@nestjs/throttler'; import type { ArgumentsHost, ExceptionFilter } from '@nestjs/common'; -import type { Response } from 'express'; +import type { Request, Response } from 'express'; import { AjvError, BadRequest, @@ -25,6 +26,7 @@ export class GlobalExceptionFilter implements ExceptionFilter { catch(exception: any, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); + const request = ctx.getRequest(); // skip unnecessary error logging if ( @@ -37,11 +39,20 @@ export class GlobalExceptionFilter implements ExceptionFilter { exception instanceof NotFound || exception instanceof NotImplemented || exception instanceof UnprocessableEntity || - exception instanceof NotFoundException + exception instanceof NotFoundException || + exception instanceof ThrottlerException ) ) this.logger.error(exception.message, exception.stack); + if (exception instanceof ThrottlerException) { + this.logger.log( + `${exception.message}, Path : ${request.path}, Workspace ID : ${ + (request as any).ncWorkspaceId + }, Project ID : ${(request as any).ncProjectId}`, + ); + } + // API not found if (exception instanceof NotFoundException) { this.logger.debug(exception.message, exception.stack); From 9733951c2fd0a2ccf63971c286c2a2a963a7be5c Mon Sep 17 00:00:00 2001 From: Pranav C Date: Tue, 17 Oct 2023 19:41:47 +0000 Subject: [PATCH 3/7] fix: missing import --- packages/nocodb/src/Noco.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/nocodb/src/Noco.ts b/packages/nocodb/src/Noco.ts index baf1d0fb8f..3ac59ba0e4 100644 --- a/packages/nocodb/src/Noco.ts +++ b/packages/nocodb/src/Noco.ts @@ -9,6 +9,7 @@ import dotenv from 'dotenv'; import { IoAdapter } from '@nestjs/platform-socket.io'; import requestIp from 'request-ip'; import cookieParser from 'cookie-parser'; +import { Logger } from '@nestjs/common'; import type { MetaService } from '~/meta/meta.service'; import type { IEventEmitter } from '~/modules/event-emitter/event-emitter.interface'; import type { Express } from 'express'; From 84d4eb5bece97f244e4ba2f18d2e527fb0c10ac2 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Tue, 17 Oct 2023 19:41:49 +0000 Subject: [PATCH 4/7] refactor: better naming --- .../src/filters/global-exception/global-exception.filter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts index dffbdd94d2..1d2d2f940f 100644 --- a/packages/nocodb/src/filters/global-exception/global-exception.filter.ts +++ b/packages/nocodb/src/filters/global-exception/global-exception.filter.ts @@ -18,7 +18,7 @@ import { @Catch() export class GlobalExceptionFilter implements ExceptionFilter { constructor( - @Optional() @InjectSentry() private readonly client: SentryService, + @Optional() @InjectSentry() private readonly sentryClient: SentryService, ) {} private logger = new Logger(GlobalExceptionFilter.name); @@ -106,7 +106,7 @@ export class GlobalExceptionFilter implements ExceptionFilter { if (exception.getStatus?.()) { response.status(exception.getStatus()).json(exception.getResponse()); } else { - this.client?.instance().captureException(exception); + this.sentryClient?.instance().captureException(exception); // todo: change the response code response.status(400).json({ From 1d1901ad86ca1c4a65040b0fb4d5c360ab97b2f6 Mon Sep 17 00:00:00 2001 From: mertmit Date: Wed, 18 Oct 2023 00:20:07 +0300 Subject: [PATCH 5/7] chore: install @ntegral/nestjs-sentry Signed-off-by: mertmit --- packages/nocodb/package.json | 1 + pnpm-lock.yaml | 301 +++++++++++++++++++++++++++++++++++ 2 files changed, 302 insertions(+) diff --git a/packages/nocodb/package.json b/packages/nocodb/package.json index a9333a9ce4..1e1d6515d9 100644 --- a/packages/nocodb/package.json +++ b/packages/nocodb/package.json @@ -64,6 +64,7 @@ "@nestjs/serve-static": "^4.0.0", "@nestjs/throttler": "^4.2.1", "@nestjs/websockets": "^10.2.1", + "@ntegral/nestjs-sentry": "^4.0.0", "@sentry/node": "^6.3.5", "@techpass/passport-openidconnect": "^0.3.3", "@types/chai": "^4.2.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f22c1df8d5..1c89b7d31a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -433,6 +433,9 @@ importers: '@nestjs/websockets': specifier: ^10.2.1 version: 10.2.1(@nestjs/common@10.2.1)(@nestjs/core@10.2.1)(@nestjs/platform-socket.io@10.2.1)(reflect-metadata@0.1.13)(rxjs@7.2.0) + '@ntegral/nestjs-sentry': + specifier: ^4.0.0 + version: 4.0.0(@nestjs/common@10.2.1)(@nestjs/core@10.2.1)(@sentry/hub@7.74.1)(@sentry/node@6.3.5)(graphql@15.3.0)(reflect-metadata@0.1.13)(rimraf@3.0.2)(rxjs@7.2.0) '@sentry/node': specifier: ^6.3.5 version: 6.3.5 @@ -4181,6 +4184,18 @@ packages: tslib: 2.0.3 dev: false + /@graphql-tools/merge@8.3.18(graphql@15.3.0): + resolution: {integrity: sha512-R8nBglvRWPAyLpZL/f3lxsY7wjnAeE0l056zHhcO/CgpvK76KYUt9oEkR05i8Hmt8DLRycBN0FiotJ0yDQWTVA==} + requiresBuild: true + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@15.3.0) + graphql: 15.3.0 + tslib: 2.6.2 + dev: false + optional: true + /@graphql-tools/schema@6.0.12(graphql@15.3.0): resolution: {integrity: sha512-XUmKJ+ipENaxuXIX4GapsLAUl1dFQBUg+S4ZbgtKVlwrPhZJ9bkjIqnUHk3wg4S4VXqzLX97ol1e4g9N6XLkYg==} peerDependencies: @@ -4191,6 +4206,20 @@ packages: tslib: 2.0.3 dev: false + /@graphql-tools/schema@9.0.16(graphql@15.3.0): + resolution: {integrity: sha512-kF+tbYPPf/6K2aHG3e1SWIbapDLQaqnIHVRG6ow3onkFoowwtKszvUyOASL6Krcv2x9bIMvd1UkvRf9OaoROQQ==} + requiresBuild: true + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 8.3.18(graphql@15.3.0) + '@graphql-tools/utils': 9.2.1(graphql@15.3.0) + graphql: 15.3.0 + tslib: 2.6.2 + value-or-promise: 1.0.12 + dev: false + optional: true + /@graphql-tools/utils@6.0.12(graphql@15.3.0): resolution: {integrity: sha512-MuFSkxXCe2QoD5QJPJ/1WIm0YnBzzXpkq9d/XznVAWptHFRwtwIbZ1xcREjYquFvoZ7ddsjZfyvUN/5ulmHhhg==} peerDependencies: @@ -4201,6 +4230,28 @@ packages: graphql: 15.3.0 dev: false + /@graphql-tools/utils@9.2.1(graphql@15.3.0): + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + requiresBuild: true + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@15.3.0) + graphql: 15.3.0 + tslib: 2.6.2 + dev: false + optional: true + + /@graphql-typed-document-node/core@3.2.0(graphql@15.3.0): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + requiresBuild: true + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 15.3.0 + dev: false + optional: true + /@humanwhocodes/config-array@0.11.10: resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} @@ -5158,6 +5209,52 @@ packages: reflect-metadata: 0.1.13 dev: false + /@nestjs/graphql@10.2.1(@nestjs/common@10.2.1)(@nestjs/core@10.2.1)(graphql@15.3.0)(reflect-metadata@0.1.13): + resolution: {integrity: sha512-FBzYTymT4oopiGMpej7GTRyhz1BgJxLlXZPUueamC5J9u1WxCwJyETkzBI/zeUkUydlklF/xd5zDd/Md6//hEw==} + requiresBuild: true + peerDependencies: + '@apollo/subgraph': ^0.1.5 || ^0.3.0 || ^0.4.0 || ^2.0.0 + '@nestjs/common': ^8.2.3 || ^9.0.0 + '@nestjs/core': ^8.2.3 || ^9.0.0 + class-transformer: '*' + class-validator: '*' + graphql: ^15.8.0 || ^16.0.0 + reflect-metadata: ^0.1.13 + ts-morph: ^13.0.2 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + peerDependenciesMeta: + '@apollo/subgraph': + optional: true + class-transformer: + optional: true + class-validator: + optional: true + ts-morph: + optional: true + dependencies: + '@graphql-tools/merge': 8.3.18(graphql@15.3.0) + '@graphql-tools/schema': 9.0.16(graphql@15.3.0) + '@graphql-tools/utils': 9.2.1(graphql@15.3.0) + '@nestjs/common': 10.2.1(reflect-metadata@0.1.13)(rxjs@7.2.0) + '@nestjs/core': 10.2.1(@nestjs/common@10.2.1)(@nestjs/platform-express@10.2.1)(@nestjs/websockets@10.2.1)(reflect-metadata@0.1.13)(rxjs@7.2.0) + '@nestjs/mapped-types': 1.2.2(@nestjs/common@10.2.1)(reflect-metadata@0.1.13) + chokidar: 3.5.3 + fast-glob: 3.2.12 + graphql: 15.3.0 + graphql-tag: 2.12.6(graphql@15.3.0) + graphql-ws: 5.11.3(graphql@15.3.0) + lodash: 4.17.21 + normalize-path: 3.0.0 + reflect-metadata: 0.1.13 + subscriptions-transport-ws: 0.11.0(graphql@15.3.0) + tslib: 2.5.0 + uuid: 9.0.0 + ws: 8.12.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + optional: true + /@nestjs/jwt@10.1.0(@nestjs/common@10.2.1): resolution: {integrity: sha512-iLwCGS25ybUxGS7i5j/Mwuyzvp/WxJftHlm8aLEBv5GV92apz6L1QVjxLdZrqXbzo++C8gdJauhzil8qitY+6w==} peerDependencies: @@ -5168,6 +5265,25 @@ packages: jsonwebtoken: 9.0.0 dev: false + /@nestjs/mapped-types@1.2.2(@nestjs/common@10.2.1)(reflect-metadata@0.1.13): + resolution: {integrity: sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==} + requiresBuild: true + peerDependencies: + '@nestjs/common': ^7.0.8 || ^8.0.0 || ^9.0.0 + class-transformer: ^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0 + class-validator: ^0.11.1 || ^0.12.0 || ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + dependencies: + '@nestjs/common': 10.2.1(reflect-metadata@0.1.13)(rxjs@7.2.0) + reflect-metadata: 0.1.13 + dev: false + optional: true + /@nestjs/mapped-types@2.0.2(@nestjs/common@10.2.1)(reflect-metadata@0.1.13): resolution: {integrity: sha512-V0izw6tWs6fTp9+KiiPUbGHWALy563Frn8X6Bm87ANLRuE46iuBMD5acKBDP5lKL/75QFvrzSJT7HkCbB0jTpg==} peerDependencies: @@ -5461,6 +5577,36 @@ packages: - debug dev: true + /@ntegral/nestjs-sentry@4.0.0(@nestjs/common@10.2.1)(@nestjs/core@10.2.1)(@sentry/hub@7.74.1)(@sentry/node@6.3.5)(graphql@15.3.0)(reflect-metadata@0.1.13)(rimraf@3.0.2)(rxjs@7.2.0): + resolution: {integrity: sha512-6WHZcK7NLeg7ue1y3Z61msEBzCGZeXQ0hWhliH1ddQH0kPbZ6lXLxduGMWYb0N/fPjXAX1Astz8urqnoTOZBQw==} + peerDependencies: + '@nestjs/common': ^9.0.4 + '@nestjs/core': ^9.0.4 + '@sentry/hub': ^7.7.0 + '@sentry/node': ^7.7.0 + reflect-metadata: ^0.1.13 + rimraf: ^3.0.2 + rxjs: ^7.2.0 + dependencies: + '@nestjs/common': 10.2.1(reflect-metadata@0.1.13)(rxjs@7.2.0) + '@nestjs/core': 10.2.1(@nestjs/common@10.2.1)(@nestjs/platform-express@10.2.1)(@nestjs/websockets@10.2.1)(reflect-metadata@0.1.13)(rxjs@7.2.0) + '@sentry/hub': 7.74.1 + '@sentry/node': 6.3.5 + reflect-metadata: 0.1.13 + rimraf: 3.0.2 + rxjs: 7.2.0 + optionalDependencies: + '@nestjs/graphql': 10.2.1(@nestjs/common@10.2.1)(@nestjs/core@10.2.1)(graphql@15.3.0)(reflect-metadata@0.1.13) + transitivePeerDependencies: + - '@apollo/subgraph' + - bufferutil + - class-transformer + - class-validator + - graphql + - ts-morph + - utf-8-validate + dev: false + /@nuxt/devalue@2.0.2: resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} dev: true @@ -6324,6 +6470,15 @@ packages: tslib: 1.14.1 dev: false + /@sentry/core@7.74.1: + resolution: {integrity: sha512-LvEhOSfdIvwkr+PdlrT/aA/iOLhkXrSkvjqAQyogE4ddCWeYfS0NoirxNt1EaxMBAWKhYZRqzkA7WA4LDLbzlA==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.74.1 + '@sentry/utils': 7.74.1 + tslib: 2.6.2 + dev: false + /@sentry/hub@6.3.5: resolution: {integrity: sha512-ZYFo7VYKwdPVjuV9BDFiYn+MpANn6eZMz5QDBfZ2dugIvIVbuOyOOLx8PSa3ZXJoVTZZ7s2wD2fi/ZxKjNjZOQ==} engines: {node: '>=6'} @@ -6333,6 +6488,16 @@ packages: tslib: 1.14.1 dev: false + /@sentry/hub@7.74.1: + resolution: {integrity: sha512-f/71NfZdYYiXjhdXlQnZhZRbWTRUfdrh7rr5KiHgNsyNj6z/rRNa0OiKEDxKubscUqiccnWRZM06/RglRJp5Ew==} + engines: {node: '>=8'} + dependencies: + '@sentry/core': 7.74.1 + '@sentry/types': 7.74.1 + '@sentry/utils': 7.74.1 + tslib: 2.6.2 + dev: false + /@sentry/minimal@6.3.5: resolution: {integrity: sha512-4RqIGAU0+8iI/1sw0GYPTr4SUA88/i2+JPjFJ+qloh5ANVaNwhFPRChw+Ys9xpre8LV9JZrEsEf8AvQr4fkNbA==} engines: {node: '>=6'} @@ -6375,6 +6540,11 @@ packages: engines: {node: '>=6'} dev: false + /@sentry/types@7.74.1: + resolution: {integrity: sha512-2jIuPc+YKvXqZETwr2E8VYnsH1zsSUR/wkIvg1uTVeVNyoowJv+YsOtCdeGyL2AwiotUBSPKu7O1Lz0kq5rMOQ==} + engines: {node: '>=8'} + dev: false + /@sentry/utils@6.3.5: resolution: {integrity: sha512-kHUcZ37QYlNzz7c9LVdApITXHaNmQK7+sw/If3M/qpff1fd5XoecA8laLfcYuz+Cw5mRhVmdhPcCRM3Xi1IGXg==} engines: {node: '>=6'} @@ -6383,6 +6553,14 @@ packages: tslib: 1.14.1 dev: false + /@sentry/utils@7.74.1: + resolution: {integrity: sha512-qUsqufuHYcy5gFhLZslLxA5kcEOkkODITXW3c7D+x+8iP/AJqa8v8CeUCVNS7RetHCuIeWAbbTClC4c411EwQg==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.74.1 + tslib: 2.6.2 + dev: false + /@sigstore/bundle@1.1.0: resolution: {integrity: sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9992,6 +10170,12 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.11) dev: true + /backo2@1.0.2: + resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} + requiresBuild: true + dev: false + optional: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -13149,6 +13333,12 @@ packages: resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} dev: false + /eventemitter3@3.1.2: + resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==} + requiresBuild: true + dev: false + optional: true + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -13417,6 +13607,19 @@ packages: dev: true optional: true + /fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + requiresBuild: true + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: false + optional: true + /fast-glob@3.2.7: resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} engines: {node: '>=8'} @@ -14397,6 +14600,18 @@ packages: graphql: 15.3.0 dev: false + /graphql-tag@2.12.6(graphql@15.3.0): + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 15.3.0 + tslib: 2.6.2 + dev: false + optional: true + /graphql-type-json@0.3.2(graphql@15.3.0): resolution: {integrity: sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==} peerDependencies: @@ -14405,6 +14620,17 @@ packages: graphql: 15.3.0 dev: false + /graphql-ws@5.11.3(graphql@15.3.0): + resolution: {integrity: sha512-fU8zwSgAX2noXAsuFiCZ8BtXeXZOzXyK5u1LloCdacsVth4skdBMPO74EG51lBoWSIZ8beUocdpV8+cQHBODnQ==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 15.3.0 + dev: false + optional: true + /graphql@15.3.0: resolution: {integrity: sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==} engines: {node: '>= 10.x'} @@ -15609,6 +15835,12 @@ packages: engines: {node: '>=8.0.0'} dev: true + /iterall@1.3.0: + resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} + requiresBuild: true + dev: false + optional: true + /iterare@1.2.1: resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} engines: {node: '>=6'} @@ -21475,6 +21707,25 @@ packages: postcss-selector-parser: 6.0.13 dev: true + /subscriptions-transport-ws@0.11.0(graphql@15.3.0): + resolution: {integrity: sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==} + deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md + requiresBuild: true + peerDependencies: + graphql: ^15.7.2 || ^16.0.0 + dependencies: + backo2: 1.0.2 + eventemitter3: 3.1.2 + graphql: 15.3.0 + iterall: 1.3.0 + symbol-observable: 1.2.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + optional: true + /superagent@8.1.2: resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} engines: {node: '>=6.4.0 <13 || >=14'} @@ -21552,6 +21803,13 @@ packages: picocolors: 1.0.0 dev: true + /symbol-observable@1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: false + optional: true + /symbol-observable@4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} @@ -22171,6 +22429,12 @@ packages: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: false + /tslib@2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + requiresBuild: true + dev: false + optional: true + /tslib@2.6.0: resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} @@ -22901,6 +23165,13 @@ packages: engines: {node: '>= 0.10'} dev: false + /value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + requiresBuild: true + dev: false + optional: true + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -23995,6 +24266,21 @@ packages: write-json-file: 3.2.0 dev: true + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + requiresBuild: true + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + optional: true + /ws@8.11.0: resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} engines: {node: '>=10.0.0'} @@ -24007,6 +24293,21 @@ packages: utf-8-validate: optional: true + /ws@8.12.0: + resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} + engines: {node: '>=10.0.0'} + requiresBuild: true + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + optional: true + /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} From f8ebf5dd0143dffeceb3e22640eac56283e15896 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Wed, 18 Oct 2023 17:49:30 +0530 Subject: [PATCH 6/7] chore: remove commented code Signed-off-by: Pranav C --- packages/nocodb/src/Noco.ts | 19 ------------------- packages/nocodb/src/db/conditionV2.ts | 4 +++- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/packages/nocodb/src/Noco.ts b/packages/nocodb/src/Noco.ts index 3ac59ba0e4..e58d488749 100644 --- a/packages/nocodb/src/Noco.ts +++ b/packages/nocodb/src/Noco.ts @@ -13,8 +13,6 @@ import { Logger } from '@nestjs/common'; import type { MetaService } from '~/meta/meta.service'; import type { IEventEmitter } from '~/modules/event-emitter/event-emitter.interface'; import type { Express } from 'express'; -// import type * as http from 'http'; - import type http from 'http'; import { MetaTable } from '~/utils/globals'; import { AppModule } from '~/app.module'; @@ -138,8 +136,6 @@ export default class Noco { server.get('/', (_req, res) => res.redirect(dashboardPath)); } - // this.initSentryErrorHandler(server); - return nestApp.getHttpAdapter().getInstance(); } } @@ -188,19 +184,4 @@ export default class Noco { } process.env.NC_SERVER_UUID = serverId; } - // - // private static initSentryErrorHandler(router) { - // if (process.env.NC_SENTRY_DSN) { - // router.use(Sentry.Handlers.errorHandler()); - // } - // } - // - // private static initSentry(router) { - // if (process.env.NC_SENTRY_DSN) { - // Sentry.init({ dsn: process.env.NC_SENTRY_DSN }); - // - // // The request handler must be the first middleware on the app - // router.use(Sentry.Handlers.requestHandler()); - // } - // } } diff --git a/packages/nocodb/src/db/conditionV2.ts b/packages/nocodb/src/db/conditionV2.ts index 1bbbc596a5..38a23e6f67 100644 --- a/packages/nocodb/src/db/conditionV2.ts +++ b/packages/nocodb/src/db/conditionV2.ts @@ -553,7 +553,9 @@ const parseConditionV2 = async ( val = `%${val}%`.replace(/^%'([\s\S]*)'%$/, '%$1%'); } else { val = - (val + '').startsWith('%') || (val + '').endsWith('%') ? val : `%${val}%`; + (val + '').startsWith('%') || (val + '').endsWith('%') + ? val + : `%${val}%`; } if (qb?.client?.config?.client === 'pg') { qb = qb.where(knex.raw('??::text ilike ?', [field, val])); From 49d0ff346db3271121a28ceec474d3ec4d0250c2 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Wed, 18 Oct 2023 23:42:41 +0530 Subject: [PATCH 7/7] chore: remove commented code Signed-off-by: Pranav C --- packages/nocodb/src/Noco.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/nocodb/src/Noco.ts b/packages/nocodb/src/Noco.ts index e58d488749..a10c00647d 100644 --- a/packages/nocodb/src/Noco.ts +++ b/packages/nocodb/src/Noco.ts @@ -97,10 +97,7 @@ export default class Noco { } static async init(param: any, httpServer: http.Server, server: Express) { - const nestApp = await NestFactory.create( - AppModule, - // new ExpressAdapter(server), - ); + const nestApp = await NestFactory.create(AppModule); if (process.env.NC_WORKER_CONTAINER === 'true') { if (!process.env.NC_REDIS_URL) { @@ -118,8 +115,6 @@ export default class Noco { nestApp.use(requestIp.mw()); nestApp.use(cookieParser()); - // this.initSentry(nestApp); - nestApp.useWebSocketAdapter(new IoAdapter(httpServer)); nestApp.use(