From 5213138cca592d01c451f200508d20352911251b Mon Sep 17 00:00:00 2001 From: Morgan Ludtke <42942267+ludtkemorgan@users.noreply.github.com> Date: Wed, 18 Sep 2024 09:11:18 -0500 Subject: [PATCH] fix: remove redis dependency (#1662) --- .circleci/config.yml | 7 - .travis.yml | 3 - backend/core/.env.template | 3 - backend/core/Dockerfile | 2 +- backend/core/README.md | 21 +-- backend/core/package.json | 6 - backend/core/src/app.module.ts | 28 ---- .../src/listings/listings-notifications.ts | 32 ---- backend/core/src/listings/listings.module.ts | 9 +- .../listings/tests/listings.service.spec.ts | 9 +- backend/core/src/shared/shared.module.ts | 2 - backend/core/src/shared/types/redis-types.ts | 12 -- docker-compose.yml | 10 -- docs/DeployServicesHeroku.md | 7 - yarn.lock | 157 +----------------- 15 files changed, 14 insertions(+), 294 deletions(-) delete mode 100644 backend/core/src/listings/listings-notifications.ts delete mode 100644 backend/core/src/shared/types/redis-types.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index 7846e4a4d5..9bac0b7e42 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,6 @@ executors: standard-node: docker: - image: "cimg/node:18.14.2" - - image: "circleci/redis:6.2.1-alpine" - image: "circleci/postgres:12.3-postgis" environment: POSTGRES_USER: bloom-ci @@ -31,9 +30,6 @@ executors: DATABASE_URL: "postgres://bloom-ci@localhost:5432/bloom" # DB URL for the jest tests per ormconfig.test.ts TEST_DATABASE_URL: "postgres://bloom-ci@localhost:5432/bloom" - REDIS_TLS_URL: "rediss://localhost:6379/0" - REDIS_URL: "redis://localhost:6379/0" - REDIS_USE_TLS: "0" PARTNERS_PORTAL_URL: "http://localhost:3001" jobs: @@ -83,9 +79,6 @@ jobs: DATABASE_URL: "postgres://bloom-ci@localhost:5432/bloom" # DB URL for the jest tests per ormconfig.test.ts TEST_DATABASE_URL: "postgres://bloom-ci@localhost:5432/bloom" - REDIS_TLS_URL: "rediss://localhost:6379/0" - REDIS_URL: "redis://localhost:6379/0" - REDIS_USE_TLS: "0" CLOUDINARY_SIGNED_PRESET: "fake_secret" CLOUDINARY_KEY: "fake_key" CLOUDINARY_CLOUD_NAME: "exygy" diff --git a/.travis.yml b/.travis.yml index 232129dbde..ab0bcc9373 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: node_js node_js: - 18 -services: - - redis-server before_install: - sudo sed -i -e '/local.*peer/s/postgres/all/' -e 's/peer\|md5/trust/g' /etc/postgresql/*/main/pg_hba.conf - sudo systemctl restart postgresql@12-main @@ -61,6 +59,5 @@ env: global: PGPORT=5433 PGUSER=travis TEST_DATABASE_URL=postgres://localhost:5433/bloom_test - REDIS_TLS_URL=redis://127.0.0.1:6379/0 NEW_RELIC_ENABLED=false NEW_RELIC_LOG_ENABLED=false diff --git a/backend/core/.env.template b/backend/core/.env.template index 36a0b67106..0e8c3cf46e 100644 --- a/backend/core/.env.template +++ b/backend/core/.env.template @@ -2,9 +2,6 @@ PORT=3100 NODE_ENV=development DATABASE_URL=postgres://localhost/bloom_detroit TEST_DATABASE_URL=postgres://localhost/bloom_test -REDIS_TLS_URL=redis://127.0.0.1:6379/0 -REDIS_URL=redis://127.0.0.1:6379/0 -REDIS_USE_TLS=0 THROTTLE_TTL=60 THROTTLE_LIMIT=2 EMAIL_API_KEY='SOME-LONG-SECRET-KEY' diff --git a/backend/core/Dockerfile b/backend/core/Dockerfile index 6c56939866..6d98d84c96 100644 --- a/backend/core/Dockerfile +++ b/backend/core/Dockerfile @@ -30,6 +30,6 @@ COPY --from=development /usr/src/app/dist ./dist EXPOSE ${PORT} # If you attempt to run this by itself, you'll need to pass in: -# PORT, DATABASE_URL, REDIS_URL, REDIS_TLS_URL +# PORT, DATABASE_URL # Typically via: docker run --env-file=".env" -t my-app CMD yarn start diff --git a/backend/core/README.md b/backend/core/README.md index 591ff23ff3..2a1c19a2e1 100644 --- a/backend/core/README.md +++ b/backend/core/README.md @@ -10,27 +10,15 @@ OpenAPI (fka Swagger) documentation is automatically generated by the server at - Install Node.js 14.x `brew install node@14.` - Install Postgres 12 `brew install postgresql` -- Install Redis `brew install redis` - Copy the `.env.template` within `backend/core` to `.env` and edit variables appropriate to your local environment. Ensure sure the Database URL and Test Database URL match your Postgres configuration. - Install dependencies `yarn install` within `backend/core` -### Redis - -To start Redis: -`redis-server`. - -To launch Redis as background service and restart at login: -`brew services start redis`. - -Test if Redis is working: -`redis-cli ping` - ### Using Docker containers -If you don't want to install Postgres and Redis on your local machine and instead want to use Docker containers, run: +If you don't want to install Postgres on your local machine and instead want to use Docker containers, run: ```shell script -docker-compose up redis postgres +docker-compose up postgres ``` All `psql` and `yarn` commands related to databases will then be connecting to the database in the docker container `postgres`. @@ -108,10 +96,7 @@ translation pair: | PORT | Port number the server will listen to for incoming connections | 3100 | number | | NODE_ENV | Controls build optimization and enables some additional logging when set to `development` | development | "development" \| "production" | | DATABASE_URL | Database connection | postgres://localhost/bloom | string | -| TEST_DATABASE_URL | Test database connection | postgres://localhost/bloom_test | string | string | -| REDIS_TLS_URL | Secure Redis connection | rediss://127.0.0.1:6379/ | string | -| REDIS_URL | TCP Redis connection string | redis://127.0.0.1:6379/0 | string | -| REDIS_USE_TLS | Flag controlling the use of TLS or unsecure transport for Redis | 0 | 0 \| 1 | +| TEST_DATABASE_URL | Test database connection | postgres://localhost/bloom_test | string | | THROTTLE_TTL | Rate limit TTL in seconds (currently used only for application submission endpoint) | 60 | number | | THROTTLE_LIMIT | Max number of operations in given time window THROTTLE_TTL after which HTTP 429 Too Many Requests will be returned by the server | 2 | number | | EMAIL_API_KEY | Sendgrid API key (see [sendgrid docs for creating API keys](https://sendgrid.com/docs/ui/account-and-settings/api-keys/#managing-api-keys) | Available internally | string | diff --git a/backend/core/package.json b/backend/core/package.json index 2a09a89d4c..6045220baa 100644 --- a/backend/core/package.json +++ b/backend/core/package.json @@ -46,9 +46,7 @@ "dependencies": { "@anchan828/nest-sendgrid": "^0.3.25", "@google-cloud/translate": "^6.2.6", - "@nestjs/bull": "^0.6.3", "@types/mapbox": "^1.6.42", - "bull": "^4.1.0", "@nestjs/cli": "^8.2.1", "@nestjs/common": "^8.3.1", "@nestjs/config": "^1.2.0", @@ -65,7 +63,6 @@ "async-retry": "^1.3.1", "axios": "0.21.2", "cache-manager": "^3.4.0", - "cache-manager-redis-store": "^2.0.0", "casbin": "5.13.0", "class-transformer": "0.3.1", "class-validator": "^0.12.2", @@ -77,14 +74,12 @@ "express": "^4.17.1", "fast-xml-parser": "^4.0.0-beta.2", "handlebars": "^4.7.6", - "ioredis": "^5.2.3", "joi": "^17.3.0", "jwt-simple": "^0.5.6", "jszip": "^3.10.1", "lodash": "^4.17.21", "mapbox": "^1.0.0-beta10", "nanoid": "^3.1.12", - "nestjs-throttler-storage-redis": "^0.1.18", "nestjs-twilio": "^2.1.0", "nestjs-typeorm-paginate": "^3.1.3", "newrelic": "7.5.1", @@ -112,7 +107,6 @@ "@nestjs/schematics": "^8.0.7", "@nestjs/testing": "^8.3.1", "@types/axios": "^0.14.0", - "@types/bull": "^3.15.5", "@types/cron": "^1.7.3", "@types/express": "^4.17.8", "@types/node": "^12.12.67", diff --git a/backend/core/src/app.module.ts b/backend/core/src/app.module.ts index b22aa0470c..be3933fb49 100644 --- a/backend/core/src/app.module.ts +++ b/backend/core/src/app.module.ts @@ -23,8 +23,6 @@ import { AmiChartsModule } from "./ami-charts/ami-charts.module" import { ApplicationFlaggedSetsModule } from "./application-flagged-sets/application-flagged-sets.module" import * as bodyParser from "body-parser" import { ThrottlerModule } from "@nestjs/throttler" -import { ThrottlerStorageRedisService } from "nestjs-throttler-storage-redis" -import Redis from "ioredis" import { SharedModule } from "./shared/shared.module" import { ConfigModule, ConfigService } from "@nestjs/config" import { TranslationsModule } from "./translations/translations.module" @@ -40,7 +38,6 @@ import { PaperApplicationsModule } from "./paper-applications/paper-applications import { SmsModule } from "./sms/sms.module" import { ScheduleModule } from "@nestjs/schedule" import { CronModule } from "./cron/cron.module" -import { BullModule } from "@nestjs/bull" import { ProgramsModule } from "./program/programs.module" import { ActivityLogModule } from "./activity-log/activity-log.module" import { logger } from "./shared/middlewares/logger.middleware" @@ -64,27 +61,6 @@ export function applicationSetup(app: INestApplication) { }) export class AppModule { static register(dbOptions): DynamicModule { - /** - * DEV NOTE: - * This configuration is required due to issues with - * self signed certificates in Redis 6. - * - * { rejectUnauthorized: false } option is intentional and required - * - * Read more: - * https://help.heroku.com/HC0F8CUS/redis-connection-issues - * https://devcenter.heroku.com/articles/heroku-redis#ioredis-module - */ - const redis = - "0" === process.env.REDIS_USE_TLS - ? new Redis(process.env.REDIS_URL, { connectTimeout: 60000 }) - : new Redis(process.env.REDIS_TLS_URL, { - tls: { - rejectUnauthorized: false, - }, - connectTimeout: 60000, - }) - return { module: AppModule, imports: [ @@ -94,9 +70,6 @@ export class AppModule { ApplicationsModule, AssetsModule, AuthModule, - BullModule.forRoot({ - redis: redis.options, - }), JurisdictionsModule, ListingsModule, CronModule, @@ -121,7 +94,6 @@ export class AppModule { useFactory: (config: ConfigService) => ({ ttl: config.get("THROTTLE_TTL"), limit: config.get("THROTTLE_LIMIT"), - storage: new ThrottlerStorageRedisService(redis), }), }), UnitsModule, diff --git a/backend/core/src/listings/listings-notifications.ts b/backend/core/src/listings/listings-notifications.ts deleted file mode 100644 index d9dd2ae74e..0000000000 --- a/backend/core/src/listings/listings-notifications.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Process, Processor } from "@nestjs/bull" -import { Job } from "bull" -import { Listing } from "./entities/listing.entity" -import { SmsService } from "../sms/services/sms.service" -import { StatusDto } from "../shared/dto/status.dto" - -export enum ListingUpdateType { - CREATE, - MODIFY, -} - -export class ListingNotificationInfo { - listing: Listing - updateType: ListingUpdateType -} - -// This class defines the processor for the "listings-notifications" queue. It is responsible -// for sending email and SMS notifications when listings are created or updated. -@Processor("listings-notifications") -export class ListingsNotificationsConsumer { - constructor(private readonly smsService: SmsService) {} - @Process() - async sendListingNotifications(job: Job): Promise { - const listing: Listing = job.data.listing - const status: StatusDto = await this.smsService.sendNewListingNotification(listing) - - // TODO(https://github.com/CityOfDetroit/bloom/issues/698): call out to the - // emailService to send email notifications. - - return status - } -} diff --git a/backend/core/src/listings/listings.module.ts b/backend/core/src/listings/listings.module.ts index 78e92fdc23..f12ebe9db8 100644 --- a/backend/core/src/listings/listings.module.ts +++ b/backend/core/src/listings/listings.module.ts @@ -3,7 +3,6 @@ import { TypeOrmModule } from "@nestjs/typeorm" import { ListingsService } from "./listings.service" import { ListingsController } from "./listings.controller" import { Listing } from "./entities/listing.entity" -import { ListingsNotificationsConsumer } from "./listings-notifications" import { Unit } from "../units/entities/unit.entity" import { Preference } from "../preferences/entities/preference.entity" import { AuthModule } from "../auth/auth.module" @@ -41,14 +40,8 @@ import { CsvBuilder } from "../../src/applications/services/csv-builder.service" SmsModule, ActivityLogModule, ], - providers: [ - ListingsService, - ListingsNotificationsConsumer, - CsvBuilder, - ListingsCsvExporterService, - ], + providers: [ListingsService, CsvBuilder, ListingsCsvExporterService], exports: [ListingsService], controllers: [ListingsController], }) -// We have to manually disconnect from redis on app close export class ListingsModule {} diff --git a/backend/core/src/listings/tests/listings.service.spec.ts b/backend/core/src/listings/tests/listings.service.spec.ts index d1b73f37df..562a815ee4 100644 --- a/backend/core/src/listings/tests/listings.service.spec.ts +++ b/backend/core/src/listings/tests/listings.service.spec.ts @@ -14,7 +14,6 @@ import { ContextIdFactory } from "@nestjs/core" import { UnitGroup } from "../../units-summary/entities/unit-group.entity" import { UnitType } from "../../unit-types/entities/unit-type.entity" import { Program } from "../../program/entities/program.entity" -import { BullModule, getQueueToken } from "@nestjs/bull" import { User } from "../../../src/auth/entities/user.entity" // Cypress brings in Chai types for the global expect, but we want to use jest @@ -108,8 +107,6 @@ const mockListingsRepo = { save: jest.fn(), } -const mockListingsNotificationsQueue = { add: jest.fn() } - describe("ListingsService", () => { beforeEach(async () => { process.env.APP_SECRET = "SECRET" @@ -147,11 +144,7 @@ describe("ListingsService", () => { }, { provide: getRepositoryToken(User), useValue: jest.fn() }, ], - imports: [BullModule.registerQueue({ name: "listings-notifications" })], - }) - .overrideProvider(getQueueToken("listings-notifications")) - .useValue(mockListingsNotificationsQueue) - .compile() + }).compile() const contextId = ContextIdFactory.create() jest.spyOn(ContextIdFactory, "getByRequest").mockImplementation(() => contextId) diff --git a/backend/core/src/shared/shared.module.ts b/backend/core/src/shared/shared.module.ts index d878195615..f7c0722748 100644 --- a/backend/core/src/shared/shared.module.ts +++ b/backend/core/src/shared/shared.module.ts @@ -12,8 +12,6 @@ import Joi from "joi" .default("development"), EMAIL_API_KEY: Joi.string().required(), DATABASE_URL: Joi.string().required(), - REDIS_TLS_URL: Joi.string().required(), - REDIS_USE_TLS: Joi.number().required(), THROTTLE_TTL: Joi.number().default(1), THROTTLE_LIMIT: Joi.number().default(100), APP_SECRET: Joi.string().required().min(16), diff --git a/backend/core/src/shared/types/redis-types.ts b/backend/core/src/shared/types/redis-types.ts deleted file mode 100644 index 1867aeb2a9..0000000000 --- a/backend/core/src/shared/types/redis-types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Store } from "cache-manager" -import Redis from "redis" - -interface RedisStore extends Store { - name: "redis" - getClient: () => Redis.RedisClient - isCacheableValue: (value: unknown) => boolean -} - -export interface RedisCache extends Cache { - store: RedisStore -} diff --git a/docker-compose.yml b/docker-compose.yml index 413a4b7fea..2d2bec7c35 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -77,21 +77,11 @@ services: environment: POSTGRES_USER: "postgres" DATABASE_URL: "postgres://postgres:5432/bloom" - REDIS_TLS_URL: "redis://redis:6379/0" - REDIS_URL: "redis://redis:6379/0" PGUSER: "postgres" PGPASSWORD: "postgres" PGDATABASE: "bloom" depends_on: - - redis - postgres - redis: - container_name: redis - image: redis:latest - ports: - - "6379:6379" - networks: - - backend postgres: container_name: postgres image: postgres:13 diff --git a/docs/DeployServicesHeroku.md b/docs/DeployServicesHeroku.md index 35d99fb1c8..a4d59a0e03 100644 --- a/docs/DeployServicesHeroku.md +++ b/docs/DeployServicesHeroku.md @@ -5,7 +5,6 @@ Bloom is designed to use a set of independently run services that provide the da ## Resources - [Heroku Postgres](https://www.heroku.com/postgres) -- [Heroku Redis](https://www.heroku.com/redis) ## Heroku Buildpacks @@ -38,9 +37,3 @@ DATABASE_URL= EMAIL_API_KEY='SENDGRID-API-KEY' PARTNERS_BASE_URL='PARTNER-PORTAL-URL' - -REDIS_TLS_URL= - -REDIS_URL= - -REDIS_USE_TLS=1 diff --git a/yarn.lock b/yarn.lock index 829c252b88..e89a27eade 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3212,21 +3212,6 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" -"@nestjs/bull-shared@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@nestjs/bull-shared/-/bull-shared-0.1.3.tgz#df08180d3990c1234599069fa37c399d4913c6c1" - integrity sha512-K0a1ERpnl/ZnTmm0UtYSSClDlDkQwNNwJYM6PogzpeflD64oqwVIn8Pj8rdS+BOYUxqdDy55q3p67ytO5oaVDA== - dependencies: - tslib "2.5.0" - -"@nestjs/bull@^0.6.3": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@nestjs/bull/-/bull-0.6.3.tgz#c93e97c4575828bee9664a3deca650c55292d5af" - integrity sha512-CckH9O3t9qSiO4RCzdYvtFSaaMfIhTXMYagV/rtmVvI1SX5XNnxEaQXvtjxDBXF9DB1JE/5AejIl6ICym+MJIw== - dependencies: - "@nestjs/bull-shared" "^0.1.3" - tslib "2.5.0" - "@nestjs/cli@^8.2.1": version "8.2.6" resolved "https://registry.yarnpkg.com/@nestjs/cli/-/cli-8.2.6.tgz#915aef9c1c025280ab8ebc915530fa0090bcbe49" @@ -4149,14 +4134,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/bull@^3.15.5": - version "3.15.7" - resolved "https://registry.yarnpkg.com/@types/bull/-/bull-3.15.7.tgz#a9d7fb332cc02dc021d0eb234b9604b356e9e6de" - integrity sha512-7NC7XN5NoS0A+leJ/dR69ZfKaegOlCZaii/xGgKnCyh1UYisRncibImb7VMwrc3OdJcbDJt6+4om70TeNl3J7g== - dependencies: - "@types/ioredis" "*" - "@types/redis" "^2.8.0" - "@types/cache-manager@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@types/cache-manager/-/cache-manager-3.4.0.tgz#414136ea3807a8cd071b8f20370c5df5dbffd382" @@ -4276,13 +4253,6 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/ioredis@*": - version "4.28.3" - resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.28.3.tgz#f680b6d89cf43a2f904af1d8fa0a28baa44ec6b4" - integrity sha512-1EvcD2XusY89icy6r+6r65CZ7Sjkg/rGjGTIXLIu8pWR/PQ1J9bhNV22slA6JZzG/5NIHeuGbDEWu9XCZRdyfw== - dependencies: - "@types/node" "*" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -4608,13 +4578,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/redis@^2.8.0": - version "2.8.32" - resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.32.tgz#1d3430219afbee10f8cfa389dad2571a05ecfb11" - integrity sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w== - dependencies: - "@types/node" "*" - "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -6037,20 +6000,6 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -bull@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/bull/-/bull-4.1.1.tgz#57fa7f9caa9ed74cd3fddc2301559d35f616bcef" - integrity sha512-EDkS3+QZyzHjC2gPThAlEwklIJSt2520nT6drpGfs5UlmVZnkTuA1unawUNLWjfN2lnwOJmstZ0t3/Rg/cRe8Q== - dependencies: - cron-parser "^2.13.0" - debuglog "^1.0.0" - get-port "^5.1.1" - ioredis "^4.27.0" - lodash "^4.17.21" - p-timeout "^3.2.0" - semver "^7.3.2" - uuid "^8.3.0" - busboy@1.6.0, busboy@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -6148,13 +6097,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cache-manager-redis-store@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cache-manager-redis-store/-/cache-manager-redis-store-2.0.0.tgz#25db93656c4ab7b3591bd6ca370e188ef90754c9" - integrity sha512-bWLWlUg6nCYHiJLCCYxY2MgvwvKnvlWwrbuynrzpjEIhfArD2GC9LtutIHFEPeyGVQN6C+WEw+P3r+BFBwhswg== - dependencies: - redis "^3.0.2" - cache-manager@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-3.4.0.tgz#6f352fa1ee95709878e3474e9ed8489ef751bba3" @@ -7210,14 +7152,6 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cron-parser@^2.13.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" - integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== - dependencies: - is-nan "^1.3.0" - moment-timezone "^0.5.31" - cron@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/cron/-/cron-1.7.2.tgz#2ea1f35c138a07edac2ac5af5084ed6fee5723db" @@ -7520,7 +7454,7 @@ debug@^4.3.2: dependencies: ms "2.1.2" -debuglog@^1.0.0, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -7686,12 +7620,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -denque@^1.1.0, denque@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de" - integrity sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ== - -denque@^2.0.1, denque@^2.1.0: +denque@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== @@ -10668,38 +10597,6 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ioredis@^4.27.0: - version "4.28.2" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.2.tgz#493ccd5d869fd0ec86c96498192718171f6c9203" - integrity sha512-kQ+Iv7+c6HsDdPP2XUHaMv8DhnSeAeKEwMbaoqsXYbO+03dItXt7+5jGQDRyjdRUV2rFJbzg7P4Qt1iX2tqkOg== - dependencies: - cluster-key-slot "^1.1.0" - debug "^4.3.1" - denque "^1.1.0" - lodash.defaults "^4.2.0" - lodash.flatten "^4.4.0" - lodash.isarguments "^3.1.0" - p-map "^2.1.0" - redis-commands "1.7.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -ioredis@^5.2.3: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.4.tgz#9e262a668bc29bae98f2054c1e0d7efd86996b96" - integrity sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.0.1" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - ioredis@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.1.tgz#55d394a51258cee3af9e96c21c863b1a97bf951f" @@ -11047,14 +10944,6 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-nan@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - is-negative-zero@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" @@ -12510,11 +12399,6 @@ lodash.defaults@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -13300,7 +13184,7 @@ moize@^6.1.0: fast-equals "^3.0.1" micro-memoize "^4.0.11" -moment-timezone@^0.5.31, moment-timezone@^0.5.x: +moment-timezone@^0.5.x: version "0.5.34" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== @@ -13505,11 +13389,6 @@ neo-async@^2.6.0, neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nestjs-throttler-storage-redis@^0.1.18: - version "0.1.18" - resolved "https://registry.yarnpkg.com/nestjs-throttler-storage-redis/-/nestjs-throttler-storage-redis-0.1.18.tgz#708b1823d0f72f8d2340833047a04e2afd86b1f7" - integrity sha512-BHYYN+fuJcBi96J2sOoID8VcI5jbMKfQ63Zsi5dzJ6dEnK4hqc6w4MbSKsBd8P8+eCDsSNFmnnmdhLcz/WwAaQ== - nestjs-twilio@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/nestjs-twilio/-/nestjs-twilio-2.1.0.tgz#d4ce8c8b6fd37dee31aa829d4f1ff5786e5d68e3" @@ -14418,11 +14297,6 @@ p-map-series@^2.1.0: resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - p-map@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" @@ -15880,11 +15754,6 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -redis-commands@1.7.0, redis-commands@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" - integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== - redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" @@ -15897,16 +15766,6 @@ redis-parser@^3.0.0: dependencies: redis-errors "^1.0.0" -redis@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/redis/-/redis-3.1.2.tgz#766851117e80653d23e0ed536254677ab647638c" - integrity sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw== - dependencies: - denque "^1.5.0" - redis-commands "^1.7.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - reduce-css-calc@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" @@ -18206,11 +18065,6 @@ tslib@2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@2.5.0, tslib@^2.2.0, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - tslib@>=1.9.0: version "2.0.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" @@ -18231,6 +18085,11 @@ tslib@^2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== +tslib@^2.2.0, tslib@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"