From 333dbba393b1be3ef5767104560875264bd29a48 Mon Sep 17 00:00:00 2001 From: ankitsridhar16 Date: Tue, 6 Dec 2022 13:18:02 +0530 Subject: [PATCH] chore: added docker files for bringing the container up --- packages/hoppscotch-backend/.dockerignore | 1 + packages/hoppscotch-backend/Dockerfile | 30 + .../hoppscotch-backend/docker-compose.yml | 25 + packages/hoppscotch-backend/package.json | 4 + .../hoppscotch-backend/prisma/schema.prisma | 85 +++ packages/hoppscotch-backend/src/app.module.ts | 45 +- .../hoppscotch-backend/src/app.resolver.ts | 12 + packages/hoppscotch-backend/src/errors.ts | 211 +++++++ packages/hoppscotch-backend/src/main.ts | 34 +- pnpm-lock.yaml | 552 +++++++++++++++++- 10 files changed, 980 insertions(+), 19 deletions(-) create mode 100644 packages/hoppscotch-backend/.dockerignore create mode 100644 packages/hoppscotch-backend/Dockerfile create mode 100644 packages/hoppscotch-backend/docker-compose.yml create mode 100644 packages/hoppscotch-backend/prisma/schema.prisma create mode 100644 packages/hoppscotch-backend/src/app.resolver.ts create mode 100644 packages/hoppscotch-backend/src/errors.ts diff --git a/packages/hoppscotch-backend/.dockerignore b/packages/hoppscotch-backend/.dockerignore new file mode 100644 index 000000000..4b904442b --- /dev/null +++ b/packages/hoppscotch-backend/.dockerignore @@ -0,0 +1 @@ +./node_modules diff --git a/packages/hoppscotch-backend/Dockerfile b/packages/hoppscotch-backend/Dockerfile new file mode 100644 index 000000000..0e655336d --- /dev/null +++ b/packages/hoppscotch-backend/Dockerfile @@ -0,0 +1,30 @@ +FROM node:lts + +WORKDIR /usr/src/app + +# Install pnpm +RUN npm i -g pnpm + +# NPM package install +COPY package*.json ./ +RUN pnpm install + + +# Prisma bits +#COPY prisma ./ +#RUN pnpx prisma generate + + +COPY . . + +RUN pnpm run build + +EXPOSE 3170 +EXPOSE 9229 + +ENV APP_PORT=${PORT} +ENV DB_URL=${DATABASE_URL} +ENV PRODUCTION=true +#ENV FB_SERVICE_KEY_PATH="secrets/fb-service-key.json" +CMD ["pnpm", "run", "start:dev"] +#CMD ["./run.sh", "start:dev"] diff --git a/packages/hoppscotch-backend/docker-compose.yml b/packages/hoppscotch-backend/docker-compose.yml new file mode 100644 index 000000000..a5e6d597b --- /dev/null +++ b/packages/hoppscotch-backend/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3.0' +services: + local: + build: ./Dockerfile + environment: + - PRODUCTION=false + - DATABASE_URL=postgresql://postgres:testpass@dev-db:5432/hoppscotch + - PORT=3000 +# volumes: +# - .:/usr/src/app + depends_on: + - dev-db + ports: + - "3170:3000" + - "9229:9229" + + dev-db: + image: postgres + ports: + - "5432:5432" + environment: + POSTGRES_PASSWORD: testpass + POSTGRES_DB: hoppscotch + + diff --git a/packages/hoppscotch-backend/package.json b/packages/hoppscotch-backend/package.json index d21bbeb83..cf458971c 100644 --- a/packages/hoppscotch-backend/package.json +++ b/packages/hoppscotch-backend/package.json @@ -21,9 +21,13 @@ "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { + "@nestjs/apollo": "^10.1.6", "@nestjs/common": "^9.2.1", "@nestjs/core": "^9.2.1", + "@nestjs/graphql": "^10.1.6", "@nestjs/platform-express": "^9.2.1", + "apollo-server-express": "^3.11.1", + "graphql": "^15.5.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.6.0" diff --git a/packages/hoppscotch-backend/prisma/schema.prisma b/packages/hoppscotch-backend/prisma/schema.prisma new file mode 100644 index 000000000..fb9f2eb22 --- /dev/null +++ b/packages/hoppscotch-backend/prisma/schema.prisma @@ -0,0 +1,85 @@ +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" + binaryTargets = ["native", "debian-openssl-1.1.x"] +} + +model Team { + id String @id @default(cuid()) + name String + members TeamMember[] + TeamInvitation TeamInvitation[] + TeamCollection TeamCollection[] + TeamRequest TeamRequest[] + TeamEnvironment TeamEnvironment[] +} + +model TeamMember { + id String @id @default(uuid()) // Membership ID + role TeamMemberRole + userUid String + teamID String + team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) + + @@unique([teamID, userUid]) +} + +model TeamInvitation { + id String @id @default(cuid()) + teamID String + team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) + creatorUid String + inviteeEmail String + inviteeRole TeamMemberRole + + @@unique([teamID, inviteeEmail]) + @@index([teamID]) +} + +model TeamCollection { + id String @id @default(cuid()) + parentID String? + parent TeamCollection? @relation("TeamCollectionChildParent", fields: [parentID], references: [id]) + children TeamCollection[] @relation("TeamCollectionChildParent") + requests TeamRequest[] + teamID String + team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) + title String +} + +model TeamRequest { + id String @id @default(cuid()) + collectionID String + collection TeamCollection @relation(fields: [collectionID], references: [id], onDelete: Cascade) + teamID String + team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) + title String + request Json +} + +model Shortcode { + id String @id + request Json + creatorUid String? + createdOn DateTime @default(now()) + + @@unique(fields: [id, creatorUid], name: "creator_uid_shortcode_unique") +} + +model TeamEnvironment { + id String @id @default(cuid()) + teamID String + team Team @relation(fields: [teamID], references: [id], onDelete: Cascade) + name String + variables Json +} + +enum TeamMemberRole { + OWNER + VIEWER + EDITOR +} diff --git a/packages/hoppscotch-backend/src/app.module.ts b/packages/hoppscotch-backend/src/app.module.ts index 86628031c..6c3f39d9f 100644 --- a/packages/hoppscotch-backend/src/app.module.ts +++ b/packages/hoppscotch-backend/src/app.module.ts @@ -1,10 +1,51 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { GraphQLModule } from '@nestjs/graphql'; +import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo'; +import { AppResolver } from './app.resolver'; @Module({ - imports: [], + imports: [ + GraphQLModule.forRoot({ + playground: process.env.PRODUCTION !== 'true', + debug: process.env.PRODUCTION !== 'true', + autoSchemaFile: true, + installSubscriptionHandlers: true, + subscriptions: { + 'subscriptions-transport-ws': { + path: '/graphql', + onConnect: (connectionParams: any) => { + return { + reqHeaders: Object.fromEntries( + Object.entries(connectionParams).map(([k, v]) => [ + k.toLowerCase(), + v, + ]), + ), + }; + }, + }, + }, + context: async ({ req, connection }) => { + if (req) { + return { reqHeaders: req.headers }; + } else { + return { + // Lowercase the keys + reqHeaders: Object.fromEntries( + Object.entries(connection.context).map(([k, v]) => [ + k.toLowerCase(), + v, + ]), + ), + }; + } + }, + driver: ApolloDriver, + }), + ], controllers: [AppController], - providers: [AppService], + providers: [AppService, AppResolver], }) export class AppModule {} diff --git a/packages/hoppscotch-backend/src/app.resolver.ts b/packages/hoppscotch-backend/src/app.resolver.ts new file mode 100644 index 000000000..f16f8b565 --- /dev/null +++ b/packages/hoppscotch-backend/src/app.resolver.ts @@ -0,0 +1,12 @@ +import { Query, Resolver } from '@nestjs/graphql'; +import { AppService } from './app.service'; + +@Resolver((of) => String) +export class AppResolver { + constructor(private appService: AppService) {} + + @Query((returns) => String) + async author() { + return this.appService.getHello(); + } +} diff --git a/packages/hoppscotch-backend/src/errors.ts b/packages/hoppscotch-backend/src/errors.ts new file mode 100644 index 000000000..794a06db5 --- /dev/null +++ b/packages/hoppscotch-backend/src/errors.ts @@ -0,0 +1,211 @@ +export const INVALID_EMAIL = 'invalid/email' as const; + +export const EMAIL_FAILED = 'email/failed' as const; + +/** + * Token Authorization failed (Check 'Authorization' Header) + * (GqlAuthGuard) + */ +export const AUTH_FAIL = 'auth/fail'; + +/** + * Tried to delete an user data document from fb firestore but failed. + * (FirebaseService) + */ +export const USER_FB_DOCUMENT_DELETION_FAILED = + 'fb/firebase_document_deletion_failed' as const; + +/** + * Tried to do an action on a user where user is not found + */ +export const USER_NOT_FOUND = 'user/not_found' as const; + +/** + * User deletion failure + * (UserService) + */ +export const USER_DELETION_FAILED = 'user/deletion_failed' as const; + +/** + * User deletion failure error due to user being a team owner + * (UserService) + */ +export const USER_IS_OWNER = 'user/is_owner' as const; + +/** + * Tried to perform action on a team which they are not a member of + * (GqlTeamMemberGuard) + */ +export const TEAM_MEMBER_NOT_FOUND = 'team/member_not_found' as const; + +/** + * Tried to perform action on a team that doesn't accept their member role level + * (GqlTeamMemberGuard) + */ +export const TEAM_NOT_REQUIRED_ROLE = 'team/not_required_role' as const; + +/** + * Team name validation failure + * (TeamService) + */ +export const TEAM_NAME_INVALID = 'team/name_invalid'; + +/** + * Couldn't find the sync data from the user + * (TeamCollectionService) + */ +export const TEAM_USER_NO_FB_SYNCDATA = 'team/user_no_fb_syncdata'; + +/** + * There was a problem resolving the firebase collection path + * (TeamCollectionService) + */ +export const TEAM_FB_COLL_PATH_RESOLVE_FAIL = 'team/fb_coll_path_resolve_fail'; + +/** + * Tried to update the team to a state it doesn't have any owners + * (TeamService) + */ +export const TEAM_ONLY_ONE_OWNER = 'team/only_one_owner'; + +/** + * Invalid or non-existent Team ID + * (TeamService) + */ +export const TEAM_INVALID_ID = 'team/invalid_id' as const; + +/** + * Invalid or non-existent collection id + * (GqlCollectionTeamMemberGuard) + */ +export const TEAM_INVALID_COLL_ID = 'team/invalid_coll_id' as const; + +/** + * Invalid team id or user id + * (TeamService) + */ +export const TEAM_INVALID_ID_OR_USER = 'team/invalid_id_or_user'; + +/** + * The provided title for the team collection is short (less than 3 characters) + * (TeamCollectionService) + */ +export const TEAM_COLL_SHORT_TITLE = 'team_coll/short_title'; + +/** + * The JSON used is not valid + * (TeamCollectionService) + */ +export const TEAM_COLL_INVALID_JSON = 'team_coll/invalid_json'; + +/** + * Tried to perform action on a request that doesn't accept their member role level + * (GqlRequestTeamMemberGuard) + */ +export const TEAM_REQ_NOT_REQUIRED_ROLE = 'team_req/not_required_role'; + +/** + * Tried to operate on a request which does not exist + * (TeamRequestService) + */ +export const TEAM_REQ_NOT_FOUND = 'team_req/not_found' as const; + +/** + * Invalid or non-existent collection id + * (TeamRequestService) + */ +export const TEAM_REQ_INVALID_TARGET_COLL_ID = + 'team_req/invalid_target_id' as const; + +/** + * Tried to perform action on a request when the user is not even member of the team + * (GqlRequestTeamMemberGuard, GqlCollectionTeamMemberGuard) + */ +export const TEAM_REQ_NOT_MEMBER = 'team_req/not_member'; + +export const TEAM_INVITE_MEMBER_HAS_INVITE = + 'team_invite/member_has_invite' as const; + +export const TEAM_INVITE_NO_INVITE_FOUND = + 'team_invite/no_invite_found' as const; + +export const TEAM_INVITE_ALREADY_MEMBER = 'team_invite/already_member' as const; + +export const TEAM_INVITE_EMAIL_DO_NOT_MATCH = + 'team_invite/email_do_not_match' as const; + +export const TEAM_INVITE_NOT_VALID_VIEWER = + 'team_invite/not_valid_viewer' as const; + +export const SHORTCODE_NOT_FOUND = 'shortcode/not_found' as const; + +export const SHORTCODE_INVALID_JSON = 'shortcode/invalid_json' as const; + +/** + * Invalid or non-existent TEAM ENVIRONMMENT ID + * (TeamEnvironmentsService) + */ +export const TEAM_ENVIRONMMENT_NOT_FOUND = + 'team_environment/not_found' as const; + +/** + * The user is not a member of the team of the given environment + * (GqlTeamEnvTeamGuard) + */ +export const TEAM_ENVIRONMENT_NOT_TEAM_MEMBER = + 'team_environment/not_team_member' as const; + +/* + + |------------------------------------| + |Server errors that are actually bugs| + |------------------------------------| + +*/ + +/** + * Couldn't find user data from the GraphQL context (Check if GqlAuthGuard is applied) + * (GqlTeamMemberGuard, GqlCollectionTeamMemberGuard) + */ +export const BUG_AUTH_NO_USER_CTX = 'bug/auth/auth_no_user_ctx' as const; + +/** + * Couldn't find teamID parameter in the attached GraphQL operation. (Check if teamID is present) + * (GqlTeamMemberGuard, GQLEAAdminGuard, GqlCollectionTeamMemberGuard) + */ +export const BUG_TEAM_NO_TEAM_ID = 'bug/team/no_team_id'; + +/** + * Couldn't find RequireTeamRole decorator. (Check if it is applied) + * (GqlTeamMemberGuard) + */ +export const BUG_TEAM_NO_REQUIRE_TEAM_ROLE = 'bug/team/no_require_team_role'; + +/** + * Couldn't find 'collectionID' param to the attached GQL operation. (Check if exists) + * (GqlCollectionTeamMemberGuard) + */ +export const BUG_TEAM_COLL_NO_COLL_ID = 'bug/team_coll/no_coll_id'; + +/** + * Couldn't find 'requestID' param to the attached GQL operation. (Check if exists) + * (GqlRequestTeamMemberGuard) + */ +export const BUG_TEAM_REQ_NO_REQ_ID = 'bug/team_req/no_req_id'; + +export const BUG_TEAM_INVITE_NO_INVITE_ID = + 'bug/team_invite/no_invite_id' as const; + +/** + * Couldn't find RequireTeamRole decorator. (Check if it is applied) + * (GqlTeamEnvTeamGuard) + */ +export const BUG_TEAM_ENV_GUARD_NO_REQUIRE_ROLES = + 'bug/team_env/guard_no_require_roles' as const; + +/** + * Couldn't find 'id' param to the operation. (Check if it is applied) + * (GqlTeamEnvTeamGuard) + */ +export const BUG_TEAM_ENV_GUARD_NO_ENV_ID = + 'bug/team_env/guard_no_env_id' as const; diff --git a/packages/hoppscotch-backend/src/main.ts b/packages/hoppscotch-backend/src/main.ts index 13cad38cf..5c4786c2a 100644 --- a/packages/hoppscotch-backend/src/main.ts +++ b/packages/hoppscotch-backend/src/main.ts @@ -1,8 +1,40 @@ import { NestFactory } from '@nestjs/core'; +import { json } from 'express'; import { AppModule } from './app.module'; async function bootstrap() { + console.log(`Running in production: ${process.env.PRODUCTION}`); + console.log(`Port: ${process.env.PORT}`); + console.log(`Database: ${process.env.DATABASE_URL}`); + const app = await NestFactory.create(AppModule); - await app.listen(3000); + + // Increase fil upload limit to 50MB + app.use( + json({ + limit: '100mb', + }), + ); + + if (process.env.PRODUCTION === 'false') { + console.log('Enabling CORS with development settings'); + app.enableCors({ + origin: true, + }); + } else { + console.log('Enabling CORS with production settings'); + + // HACK: Temporary fix for Liyas to work on production directly :P + /* + app.enableCors({ + origin: /hoppscotch\.io$/ + }); + */ + + app.enableCors({ + origin: true, + }); + } + await app.listen(process.env.PORT || 3170); } bootstrap(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 709ddc870..48173372f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,9 +44,11 @@ importers: packages/hoppscotch-backend: specifiers: + '@nestjs/apollo': ^10.1.6 '@nestjs/cli': ^9.1.5 '@nestjs/common': ^9.2.1 '@nestjs/core': ^9.2.1 + '@nestjs/graphql': ^10.1.6 '@nestjs/platform-express': ^9.2.1 '@nestjs/schematics': ^9.0.3 '@nestjs/testing': ^9.2.1 @@ -56,9 +58,11 @@ importers: '@types/supertest': ^2.0.12 '@typescript-eslint/eslint-plugin': ^5.45.0 '@typescript-eslint/parser': ^5.45.0 + apollo-server-express: ^3.11.1 eslint: ^8.29.0 eslint-config-prettier: ^8.5.0 eslint-plugin-prettier: ^4.2.1 + graphql: ^15.5.0 jest: 29.3.1 prettier: ^2.8.0 reflect-metadata: ^0.1.13 @@ -72,9 +76,13 @@ importers: tsconfig-paths: 4.1.1 typescript: ^4.9.3 dependencies: + '@nestjs/apollo': 10.1.6_s6pw6ravicthrbuw7ih3vbxenu '@nestjs/common': 9.2.1_whg6pvy6vwu66ypq7idiq2suxq '@nestjs/core': 9.2.1_ajc4cvdydchgvxyi4xnoij5t4i + '@nestjs/graphql': 10.1.6_2khsk5ahlt4vlkrgib4soffmwu '@nestjs/platform-express': 9.2.1_hjcqpoaebdr7gdo5hgc22hthbe + apollo-server-express: 3.11.1_graphql@15.8.0 + graphql: 15.8.0 reflect-metadata: 0.1.13 rimraf: 3.0.2 rxjs: 7.6.0 @@ -724,6 +732,138 @@ packages: openapi-types: 12.0.0 dev: false + /@apollo/protobufjs/1.2.6: + resolution: {integrity: sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==} + hasBin: true + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 10.17.60 + long: 4.0.0 + dev: false + + /@apollo/protobufjs/1.2.7: + resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} + hasBin: true + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + long: 4.0.0 + dev: false + + /@apollo/usage-reporting-protobuf/4.0.2: + resolution: {integrity: sha512-GfE8aDqi/lAFut95pjH9IRvH0zGsQ5G/2lYL0ZLZfML7ArX+A4UVHFANQcPCcUYGE6bI6OPhLekg4Vsjf6B1cw==} + dependencies: + '@apollo/protobufjs': 1.2.7 + dev: false + + /@apollo/utils.dropunuseddefinitions/1.1.0_graphql@15.8.0: + resolution: {integrity: sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: false + + /@apollo/utils.keyvaluecache/1.0.2: + resolution: {integrity: sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==} + dependencies: + '@apollo/utils.logger': 1.0.1 + lru-cache: 7.13.1 + dev: false + + /@apollo/utils.logger/1.0.1: + resolution: {integrity: sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==} + dev: false + + /@apollo/utils.printwithreducedwhitespace/1.1.0_graphql@15.8.0: + resolution: {integrity: sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: false + + /@apollo/utils.removealiases/1.0.0_graphql@15.8.0: + resolution: {integrity: sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: false + + /@apollo/utils.sortast/1.1.0_graphql@15.8.0: + resolution: {integrity: sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + lodash.sortby: 4.7.0 + dev: false + + /@apollo/utils.stripsensitiveliterals/1.2.0_graphql@15.8.0: + resolution: {integrity: sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: false + + /@apollo/utils.usagereporting/1.0.1_graphql@15.8.0: + resolution: {integrity: sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + '@apollo/usage-reporting-protobuf': 4.0.2 + '@apollo/utils.dropunuseddefinitions': 1.1.0_graphql@15.8.0 + '@apollo/utils.printwithreducedwhitespace': 1.1.0_graphql@15.8.0 + '@apollo/utils.removealiases': 1.0.0_graphql@15.8.0 + '@apollo/utils.sortast': 1.1.0_graphql@15.8.0 + '@apollo/utils.stripsensitiveliterals': 1.2.0_graphql@15.8.0 + graphql: 15.8.0 + dev: false + + /@apollographql/apollo-tools/0.5.4_graphql@15.8.0: + resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==} + engines: {node: '>=8', npm: '>=6'} + peerDependencies: + graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 15.8.0 + dev: false + + /@apollographql/graphql-playground-html/1.6.29: + resolution: {integrity: sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==} + dependencies: + xss: 1.0.14 + dev: false + /@ardatan/relay-compiler/12.0.0_graphql@15.8.0: resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} hasBin: true @@ -3160,7 +3300,39 @@ packages: dependencies: '@graphql-tools/utils': 8.8.0_graphql@15.8.0 graphql: 15.8.0 - tslib: 2.4.0 + tslib: 2.4.1 + + /@graphql-tools/merge/8.3.11_graphql@15.8.0: + resolution: {integrity: sha512-IpZh8r8e8FycXaUv04xe5HQH9siD1tkS8MvaO8Wb2FaPXv15XSYP+Wsb2MUStpIqGfQxa6xY/+eEuxv+VqwXyg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.1.0_graphql@15.8.0 + graphql: 15.8.0 + tslib: 2.4.1 + dev: false + + /@graphql-tools/merge/8.3.12_graphql@15.8.0: + resolution: {integrity: sha512-BFL8r4+FrqecPnIW0H8UJCBRQ4Y8Ep60aujw9c/sQuFmQTiqgWgpphswMGfaosP2zUinDE3ojU5wwcS2IJnumA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 9.1.1_graphql@15.8.0 + graphql: 15.8.0 + tslib: 2.4.1 + dev: false + + /@graphql-tools/mock/8.7.12_graphql@15.8.0: + resolution: {integrity: sha512-bEjj52T5idjzqFXfDZPFfPZDPFEjVmayYA6RYqMxM3Qdv5JJ8pSMEGDBcXhinbQudPKdRkLmR17usNmRMpUQEg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/schema': 9.0.10_graphql@15.8.0 + '@graphql-tools/utils': 9.1.1_graphql@15.8.0 + fast-json-stable-stringify: 2.1.0 + graphql: 15.8.0 + tslib: 2.4.1 + dev: false /@graphql-tools/optimize/1.3.0_graphql@15.8.0: resolution: {integrity: sha512-30QOWJoMJEt1De7tAFtWJ6VPrP6SLq+tSQrA3x+WMvCW3q2exq5wPDpvAXOakVKu0y8L2E+YkipC0hcQPBQdLg==} @@ -3227,9 +3399,33 @@ packages: '@graphql-tools/merge': 8.3.0_graphql@15.8.0 '@graphql-tools/utils': 8.8.0_graphql@15.8.0 graphql: 15.8.0 - tslib: 2.4.0 + tslib: 2.4.1 value-or-promise: 1.0.11 + /@graphql-tools/schema/9.0.10_graphql@15.8.0: + resolution: {integrity: sha512-lV0o4df9SpPiaeeDAzgdCJ2o2N9Wvsp0SMHlF2qDbh9aFCFQRsXuksgiDm2yTgT3TG5OtUes/t0D6uPjPZFUbQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 8.3.12_graphql@15.8.0 + '@graphql-tools/utils': 9.1.1_graphql@15.8.0 + graphql: 15.8.0 + tslib: 2.4.1 + value-or-promise: 1.0.11 + dev: false + + /@graphql-tools/schema/9.0.9_graphql@15.8.0: + resolution: {integrity: sha512-hwg8trUytO5ayQ8bzL3+sAyXcu2rhKt5pLXpLO0/TMTN2nXd3DBO4mqx+Ra4Er2mE/msInGQ5EmZbxVBPv+hSg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 8.3.11_graphql@15.8.0 + '@graphql-tools/utils': 9.1.0_graphql@15.8.0 + graphql: 15.8.0 + tslib: 2.4.1 + value-or-promise: 1.0.11 + dev: false + /@graphql-tools/url-loader/7.12.1_graphql@15.8.0: resolution: {integrity: sha512-Fd3ZZLEEr9GGFHEbdrcaMHFQu01BLpFnNDBkISupvjokd497O5Uh0xZvsZGC6mxVt0WWQWpgaK2ef+oLuOdLqQ==} peerDependencies: @@ -3263,7 +3459,25 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: graphql: 15.8.0 - tslib: 2.4.0 + tslib: 2.4.1 + + /@graphql-tools/utils/9.1.0_graphql@15.8.0: + resolution: {integrity: sha512-4Ketxo98IwKA/56LP6cI6PgQBwUCujszQcTNkzjq7liJPa2mLjKnmVOJ0bauMwKcEazeYuZagceljb0POmEGvQ==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 15.8.0 + tslib: 2.4.1 + dev: false + + /@graphql-tools/utils/9.1.1_graphql@15.8.0: + resolution: {integrity: sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 15.8.0 + tslib: 2.4.1 + dev: false /@graphql-tools/wrap/8.5.0_graphql@15.8.0: resolution: {integrity: sha512-I+x9dBNzC135WWPi04ejqurR/zDmhfeGbCftCaYKF4CvgWd+ZaJx4Uc74n1SBegQtrj+KDrOS4HgKwf9vAVR7A==} @@ -3973,6 +4187,10 @@ packages: chalk: 4.1.2 dev: true + /@josephg/resolvable/1.0.1: + resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} + dev: false + /@jridgewell/gen-mapping/0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -4095,6 +4313,37 @@ packages: dependencies: graphql: 15.8.0 + /@nestjs/apollo/10.1.6_s6pw6ravicthrbuw7ih3vbxenu: + resolution: {integrity: sha512-BQJBBUTjEQ6roCHPC2io/OV+4n/ph1kyN38FFHtTiGHAgWx+YdeMT4LEGcaM1qBOuGC7PyNYTL3Cm2gzsGPSdg==} + peerDependencies: + '@apollo/gateway': ^0.44.1 || ^0.46.0 || ^0.48.0 || ^0.49.0 || ^0.50.0 || ^2.0.0 + '@nestjs/common': ^8.2.3 || ^9.0.0 + '@nestjs/core': ^8.2.3 || ^9.0.0 + '@nestjs/graphql': ^10.0.0 + apollo-server-core: ^3.5.0 + apollo-server-express: ^3.5.0 + apollo-server-fastify: ^3.5.0 + graphql: ^15.8.0 || ^16.0.0 + peerDependenciesMeta: + '@apollo/gateway': + optional: true + apollo-server-core: + optional: true + apollo-server-express: + optional: true + apollo-server-fastify: + optional: true + dependencies: + '@nestjs/common': 9.2.1_whg6pvy6vwu66ypq7idiq2suxq + '@nestjs/core': 9.2.1_ajc4cvdydchgvxyi4xnoij5t4i + '@nestjs/graphql': 10.1.6_2khsk5ahlt4vlkrgib4soffmwu + apollo-server-express: 3.11.1_graphql@15.8.0 + graphql: 15.8.0 + iterall: 1.3.0 + lodash.omit: 4.5.0 + tslib: 2.4.1 + dev: false + /@nestjs/cli/9.1.5: resolution: {integrity: sha512-rSp26+Nv7PFtYrRSP18Gv5ZK8rRSc2SCCF5wh4SdZaVGgkxShpNq9YEfI+ik/uziN3KC5o74ppYRXGj+aHGVsA==} engines: {node: '>= 12.9.0'} @@ -4186,6 +4435,63 @@ packages: - encoding dev: false + /@nestjs/graphql/10.1.6_2khsk5ahlt4vlkrgib4soffmwu: + resolution: {integrity: sha512-RiDTqyBqk+qolcMMKBANuG5zw0q0zbVmkwWydB2F1ObvUyl5t/GOAcR8mbq3gvpfYzylQ5t5/svWUDq/7dcpaQ==} + 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 + 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 + peerDependenciesMeta: + '@apollo/subgraph': + optional: true + ts-morph: + optional: true + dependencies: + '@graphql-tools/merge': 8.3.11_graphql@15.8.0 + '@graphql-tools/schema': 9.0.9_graphql@15.8.0 + '@graphql-tools/utils': 9.1.0_graphql@15.8.0 + '@nestjs/common': 9.2.1_whg6pvy6vwu66ypq7idiq2suxq + '@nestjs/core': 9.2.1_ajc4cvdydchgvxyi4xnoij5t4i + '@nestjs/mapped-types': 1.2.0_n3ccvzwmui2f6jwh4xeqysew6i + chokidar: 3.5.3 + fast-glob: 3.2.12 + graphql: 15.8.0 + graphql-tag: 2.12.6_graphql@15.8.0 + graphql-ws: 5.5.5_graphql@15.8.0 + lodash: 4.17.21 + normalize-path: 3.0.0 + reflect-metadata: 0.1.13 + subscriptions-transport-ws: 0.11.0_graphql@15.8.0 + tslib: 2.4.1 + uuid: 9.0.0 + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - class-transformer + - class-validator + - utf-8-validate + dev: false + + /@nestjs/mapped-types/1.2.0_n3ccvzwmui2f6jwh4xeqysew6i: + resolution: {integrity: sha512-NTFwPZkQWsArQH8QSyFWGZvJ08gR+R4TofglqZoihn/vU+ktHEJjMqsIsADwb7XD97DhiD+TVv5ac+jG33BHrg==} + 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 + reflect-metadata: ^0.1.12 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + dependencies: + '@nestjs/common': 9.2.1_whg6pvy6vwu66ypq7idiq2suxq + reflect-metadata: 0.1.13 + dev: false + /@nestjs/platform-express/9.2.1_hjcqpoaebdr7gdo5hgc22hthbe: resolution: {integrity: sha512-7PecaXt8lrdS1p6Vb1X/am3GGv+EO1VahyDzaEGOK6C0zwhc0VPfLtwihkjjfhS6BjpRIXXgviwEjONUvxVZnA==} peerDependencies: @@ -4700,6 +5006,12 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true + /@types/accepts/1.3.5: + resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} + dependencies: + '@types/node': 18.11.10 + dev: false + /@types/axios/0.14.0: resolution: {integrity: sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ==} deprecated: This is a stub types definition for axios (https://github.com/mzabriskie/axios). axios provides its own type definitions, so you don't need @types/axios installed! @@ -4743,7 +5055,6 @@ packages: dependencies: '@types/connect': 3.4.35 '@types/node': 18.11.10 - dev: true /@types/chalk/2.2.0: resolution: {integrity: sha512-1zzPV9FDe1I/WHhRkf9SNgqtRJWZqrBWgu7JGveuHmmyR9CnAPCie2N/x+iHrgnpYBIcCJWHBoMRv2TRWktsvw==} @@ -4767,12 +5078,15 @@ packages: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.11.10 - dev: true /@types/cookiejar/2.1.2: resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} dev: true + /@types/cors/2.8.12: + resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==} + dev: false + /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: @@ -4807,7 +5121,6 @@ packages: '@types/node': 18.11.10 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 - dev: true /@types/express/4.17.14: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} @@ -4816,7 +5129,6 @@ packages: '@types/express-serve-static-core': 4.17.31 '@types/qs': 6.9.7 '@types/serve-static': 1.15.0 - dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} @@ -4891,7 +5203,6 @@ packages: /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - dev: true /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} @@ -4901,6 +5212,10 @@ packages: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} dev: true + /@types/node/10.17.60: + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + dev: false + /@types/node/16.11.43: resolution: {integrity: sha512-GqWykok+3uocgfAJM8imbozrqLnPyTrpFlrryURQlw1EesPUCx5XxTiucWDSFF9/NUEXDuD4bnvHm8xfVGWTpQ==} dev: true @@ -4910,7 +5225,6 @@ packages: /@types/node/18.11.10: resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==} - dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -4943,11 +5257,9 @@ packages: /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} @@ -4968,7 +5280,6 @@ packages: dependencies: '@types/mime': 3.0.1 '@types/node': 18.11.10 - dev: true /@types/splitpanes/2.2.1: resolution: {integrity: sha512-H5BgO6UdJRzz5ddRzuGvLBiPSPEuuHXb5ET+7avLLrEx1uc7f5Ut5oLMDQsfvGtHBBAFczt1QNYuDf27wHbvDQ==} @@ -6335,6 +6646,132 @@ packages: yauzl: 2.10.0 dev: false + /apollo-datasource/3.3.2: + resolution: {integrity: sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==} + engines: {node: '>=12.0'} + deprecated: The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + dependencies: + '@apollo/utils.keyvaluecache': 1.0.2 + apollo-server-env: 4.2.1 + transitivePeerDependencies: + - encoding + dev: false + + /apollo-reporting-protobuf/3.3.3: + resolution: {integrity: sha512-L3+DdClhLMaRZWVmMbBcwl4Ic77CnEBPXLW53F7hkYhkaZD88ivbCVB1w/x5gunO6ZHrdzhjq0FHmTsBvPo7aQ==} + deprecated: The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + dependencies: + '@apollo/protobufjs': 1.2.6 + dev: false + + /apollo-server-core/3.11.1_graphql@15.8.0: + resolution: {integrity: sha512-t/eCKrRFK1lYZlc5pHD99iG7Np7CEm3SmbDiONA7fckR3EaB/pdsEdIkIwQ5QBBpT5JLp/nwvrZRVwhaWmaRvw==} + engines: {node: '>=12.0'} + deprecated: The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + dependencies: + '@apollo/utils.keyvaluecache': 1.0.2 + '@apollo/utils.logger': 1.0.1 + '@apollo/utils.usagereporting': 1.0.1_graphql@15.8.0 + '@apollographql/apollo-tools': 0.5.4_graphql@15.8.0 + '@apollographql/graphql-playground-html': 1.6.29 + '@graphql-tools/mock': 8.7.12_graphql@15.8.0 + '@graphql-tools/schema': 8.5.0_graphql@15.8.0 + '@josephg/resolvable': 1.0.1 + apollo-datasource: 3.3.2 + apollo-reporting-protobuf: 3.3.3 + apollo-server-env: 4.2.1 + apollo-server-errors: 3.3.1_graphql@15.8.0 + apollo-server-plugin-base: 3.7.1_graphql@15.8.0 + apollo-server-types: 3.7.1_graphql@15.8.0 + async-retry: 1.3.3 + fast-json-stable-stringify: 2.1.0 + graphql: 15.8.0 + graphql-tag: 2.12.6_graphql@15.8.0 + loglevel: 1.8.1 + lru-cache: 6.0.0 + node-abort-controller: 3.0.1 + sha.js: 2.4.11 + uuid: 9.0.0 + whatwg-mimetype: 3.0.0 + transitivePeerDependencies: + - encoding + dev: false + + /apollo-server-env/4.2.1: + resolution: {integrity: sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==} + engines: {node: '>=12.0'} + deprecated: The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: false + + /apollo-server-errors/3.3.1_graphql@15.8.0: + resolution: {integrity: sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==} + engines: {node: '>=12.0'} + deprecated: The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + dependencies: + graphql: 15.8.0 + dev: false + + /apollo-server-express/3.11.1_graphql@15.8.0: + resolution: {integrity: sha512-x9ngcpXbBlt4naCXTwNtBFb/mOd9OU0wtFXvJkObHF26NsRazu3DxDfEuekA6V1NFOocD+A9jmVMQeQWug5MgA==} + engines: {node: '>=12.0'} + deprecated: The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + peerDependencies: + express: ^4.17.1 + graphql: ^15.3.0 || ^16.0.0 + dependencies: + '@types/accepts': 1.3.5 + '@types/body-parser': 1.19.2 + '@types/cors': 2.8.12 + '@types/express': 4.17.14 + '@types/express-serve-static-core': 4.17.31 + accepts: 1.3.8 + apollo-server-core: 3.11.1_graphql@15.8.0 + apollo-server-types: 3.7.1_graphql@15.8.0 + body-parser: 1.20.1 + cors: 2.8.5 + graphql: 15.8.0 + parseurl: 1.3.3 + transitivePeerDependencies: + - encoding + dev: false + + /apollo-server-plugin-base/3.7.1_graphql@15.8.0: + resolution: {integrity: sha512-g3vJStmQtQvjGI289UkLMfThmOEOddpVgHLHT2bNj0sCD/bbisj4xKbBHETqaURokteqSWyyd4RDTUe0wAUDNQ==} + engines: {node: '>=12.0'} + deprecated: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + dependencies: + apollo-server-types: 3.7.1_graphql@15.8.0 + graphql: 15.8.0 + transitivePeerDependencies: + - encoding + dev: false + + /apollo-server-types/3.7.1_graphql@15.8.0: + resolution: {integrity: sha512-aE9RDVplmkaOj/OduNmGa+0a1B5RIWI0o3zC1zLvBTVWMKTpo0ifVf11TyMkLCY+T7cnZqVqwyShziOyC3FyUw==} + engines: {node: '>=12.0'} + deprecated: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + dependencies: + '@apollo/utils.keyvaluecache': 1.0.2 + '@apollo/utils.logger': 1.0.1 + apollo-reporting-protobuf: 3.3.3 + apollo-server-env: 4.2.1 + graphql: 15.8.0 + transitivePeerDependencies: + - encoding + dev: false + /append-field/1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} dev: false @@ -6379,6 +6816,12 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} + /async-retry/1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + dependencies: + retry: 0.13.1 + dev: false + /async/2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: @@ -7336,6 +7779,10 @@ packages: hasBin: true dev: true + /cssfilter/0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + dev: false + /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true @@ -9111,6 +9558,17 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 + dev: true + + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + 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 /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -9580,7 +10038,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.11 + fast-glob: 3.2.12 ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 @@ -9704,7 +10162,16 @@ packages: 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.8.0 - tslib: 2.4.0 + tslib: 2.4.1 + + /graphql-ws/5.5.5_graphql@15.8.0: + resolution: {integrity: sha512-hvyIS71vs4Tu/yUYHPvGXsTgo0t3arU820+lT5VjZS2go0ewp2LqyCgxEN56CzOG7Iys52eRhHBiD1gGRdiQtw==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 15.8.0 + dev: false /graphql-ws/5.9.1_graphql@15.8.0: resolution: {integrity: sha512-mL/SWGBwIT9Meq0NlfS55yXXTOeWPMbK7bZBEZhFu46bcGk1coTx2Sdtzxdk+9yHWngD+Fk1PZDWaAutQa9tpw==} @@ -11824,6 +12291,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.omit/4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + dev: false + /lodash.once/4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} dev: true @@ -11855,6 +12326,11 @@ packages: slice-ansi: 4.0.0 wrap-ansi: 6.2.0 + /loglevel/1.8.1: + resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} + engines: {node: '>= 0.6.0'} + dev: false + /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false @@ -11887,6 +12363,11 @@ packages: dependencies: yallist: 4.0.0 + /lru-cache/7.13.1: + resolution: {integrity: sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==} + engines: {node: '>=12'} + dev: false + /macos-release/2.5.0: resolution: {integrity: sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==} engines: {node: '>=6'} @@ -12217,7 +12698,6 @@ packages: /node-abort-controller/3.0.1: resolution: {integrity: sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==} - dev: true /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} @@ -13206,6 +13686,11 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 + /retry/0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false + /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -13357,7 +13842,7 @@ packages: /rxjs/7.5.5: resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} dependencies: - tslib: 2.4.0 + tslib: 2.4.1 /rxjs/7.6.0: resolution: {integrity: sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==} @@ -13513,6 +13998,14 @@ packages: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + /shebang-command/1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -15826,6 +16319,11 @@ packages: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true + /whatwg-mimetype/3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + dev: false + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -16113,6 +16611,19 @@ packages: utf-8-validate: optional: true + /ws/8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /ws/8.2.3: resolution: {integrity: sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==} engines: {node: '>=10.0.0'} @@ -16180,6 +16691,15 @@ packages: engines: {node: '>=0.4.0'} dev: false + /xss/1.0.14: + resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==} + engines: {node: '>= 0.10.0'} + hasBin: true + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + dev: false + /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'}