Browse Source

Merge pull request #6718 from nocodb/nc-fix/sentry

fix: Sentry integration correction
pull/6749/head
աӄա 11 months ago committed by GitHub
parent
commit
3011e14c5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      packages/nocodb/package.json
  2. 29
      packages/nocodb/src/Noco.ts
  3. 13
      packages/nocodb/src/app.module.ts
  4. 24
      packages/nocodb/src/filters/global-exception/global-exception.filter.ts
  5. 301
      pnpm-lock.yaml

1
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",

29
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';
@ -11,11 +9,10 @@ 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';
// import type * as http from 'http';
import type http from 'http';
import { MetaTable } from '~/utils/globals';
import { AppModule } from '~/app.module';
@ -100,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) {
@ -121,8 +115,6 @@ export default class Noco {
nestApp.use(requestIp.mw());
nestApp.use(cookieParser());
this.initSentry(nestApp);
nestApp.useWebSocketAdapter(new IoAdapter(httpServer));
nestApp.use(
@ -139,8 +131,6 @@ export default class Noco {
server.get('/', (_req, res) => res.redirect(dashboardPath));
}
this.initSentryErrorHandler(server);
return nestApp.getHttpAdapter().getInstance();
}
}
@ -189,19 +179,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());
}
}
}

13
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,

24
packages/nocodb/src/filters/global-exception/global-exception.filter.ts

@ -1,6 +1,8 @@
import { Catch, Logger, NotFoundException } from '@nestjs/common';
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,
@ -15,11 +17,16 @@ import {
@Catch()
export class GlobalExceptionFilter implements ExceptionFilter {
constructor(
@Optional() @InjectSentry() private readonly sentryClient: SentryService,
) {}
private logger = new Logger(GlobalExceptionFilter.name);
catch(exception: any, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest<Request>();
// skip unnecessary error logging
if (
@ -32,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);
@ -90,6 +106,8 @@ export class GlobalExceptionFilter implements ExceptionFilter {
if (exception.getStatus?.()) {
response.status(exception.getStatus()).json(exception.getResponse());
} else {
this.sentryClient?.instance().captureException(exception);
// todo: change the response code
response.status(400).json({
msg: exception.message,

301
pnpm-lock.yaml

@ -436,6 +436,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
@ -4184,6 +4187,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:
@ -4194,6 +4209,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:
@ -4204,6 +4233,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'}
@ -5161,6 +5212,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:
@ -5171,6 +5268,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:
@ -5464,6 +5580,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
@ -6327,6 +6473,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'}
@ -6336,6 +6491,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'}
@ -6378,6 +6543,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'}
@ -6386,6 +6556,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}
@ -9995,6 +10173,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==}
@ -13156,6 +13340,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==}
@ -13424,6 +13614,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'}
@ -14404,6 +14607,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:
@ -14412,6 +14627,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'}
@ -15616,6 +15842,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'}
@ -21482,6 +21714,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'}
@ -21559,6 +21810,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'}
@ -22178,6 +22436,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==}
@ -22908,6 +23172,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'}
@ -24002,6 +24273,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'}
@ -24014,6 +24300,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'}

Loading…
Cancel
Save