From f405b77cea29d081346b43a8bc07f4b3c3c63e2d Mon Sep 17 00:00:00 2001 From: Mahendra Kumar Date: Fri, 1 Dec 2023 12:09:04 -0300 Subject: [PATCH] add message queue integration (#2491) --- docs/docs/contributor/server/basics/queue.mdx | 46 ++ .../self-hosting/enviroment-variables.mdx | 8 + server/.env.example | 5 +- server/package.json | 2 + .../environment/environment.service.ts | 16 + .../interfaces/message-queue.interface.ts | 4 + .../src/integrations/integrations.module.ts | 47 ++ .../message-queue/drivers/bullmq.driver.ts | 60 ++ .../interfaces/job-options.interface.ts | 4 + .../message-queue-driver.interface.ts | 17 + .../message-queue/drivers/pg-boss.driver.ts | 37 ++ .../message-queue/interfaces/index.ts | 1 + .../interfaces/message-queue.interface.ts | 27 + .../message-queue/message-queue.constants.ts | 5 + .../message-queue/message-queue.module.ts | 51 ++ ...essage-queue-task-assigned.service.spec.ts | 46 ++ .../services/message-queue.service.ts | 37 ++ server/yarn.lock | 564 ++++++++++++------ 18 files changed, 796 insertions(+), 181 deletions(-) create mode 100644 docs/docs/contributor/server/basics/queue.mdx create mode 100644 server/src/integrations/environment/interfaces/message-queue.interface.ts create mode 100644 server/src/integrations/message-queue/drivers/bullmq.driver.ts create mode 100644 server/src/integrations/message-queue/drivers/interfaces/job-options.interface.ts create mode 100644 server/src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface.ts create mode 100644 server/src/integrations/message-queue/drivers/pg-boss.driver.ts create mode 100644 server/src/integrations/message-queue/interfaces/index.ts create mode 100644 server/src/integrations/message-queue/interfaces/message-queue.interface.ts create mode 100644 server/src/integrations/message-queue/message-queue.constants.ts create mode 100644 server/src/integrations/message-queue/message-queue.module.ts create mode 100644 server/src/integrations/message-queue/services/message-queue-task-assigned.service.spec.ts create mode 100644 server/src/integrations/message-queue/services/message-queue.service.ts diff --git a/docs/docs/contributor/server/basics/queue.mdx b/docs/docs/contributor/server/basics/queue.mdx new file mode 100644 index 000000000..fcd628082 --- /dev/null +++ b/docs/docs/contributor/server/basics/queue.mdx @@ -0,0 +1,46 @@ +--- +title: Message Queue +sidebar_position: 5 +sidebar_custom_props: + icon: TbTopologyStar +--- + +Queues facilitate async operations to be performed.It could be used for performing background tasks such as sending a welcome email on register. +Each use case will have its own queue class extended from `MessageQueueServiceBase`. + +Currently queue supports 2 drivers which can be configurred by env variable `MESSAGE_QUEUE_TYPE` +1. `pg-boss` this is the default driver, uses [pg-boss](https://github.com/timgit/pg-boss) under the hood. +2. `bull-mq` it uses [bull-mq](https://bullmq.io/) under the hood. + +Steps to create and use a new queue +1. add a queue name for your new queue under enum `MESSAGE_QUEUES`. +2. provide factory implementation of the queue with queue name as dependency token. +3. inject the queue that you created in the required module/service with queue name as dependency token. +4. add worker class with token based injection just like producer. + +### Example usage +```ts +class Resolver { + constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {} + + async onSomeAction() { + //business logic + await this.queue.add(someData); + } +} + +//async worker +class CustomWorker { + constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) { + this.initWorker(); + } + + async initWorker() { + await this.queue.work(async ({ id, data }) => { + //worker logic + }); + } +} + +``` + diff --git a/docs/docs/start/self-hosting/enviroment-variables.mdx b/docs/docs/start/self-hosting/enviroment-variables.mdx index b0862e436..577f6d062 100644 --- a/docs/docs/start/self-hosting/enviroment-variables.mdx +++ b/docs/docs/start/self-hosting/enviroment-variables.mdx @@ -24,6 +24,8 @@ import OptionTable from '@site/src/theme/OptionTable' @@ -61,6 +63,12 @@ import OptionTable from '@site/src/theme/OptionTable' ['STORAGE_LOCAL_PATH', '.local-storage', 'data path (local storage)'], ]}> +### Message Queue + + + ### Logging ('PG_DATABASE_URL')!; } + getRedisHost(): string { + return this.configService.get('REDIS_HOST') ?? '127.0.0.1'; + } + + getRedisPort(): number { + return +(this.configService.get('REDIS_PORT') ?? 6379); + } + getFrontBaseUrl(): string { return this.configService.get('FRONT_BASE_URL')!; } @@ -102,6 +111,13 @@ export class EnvironmentService { ); } + getMessageQueueType(): MessageQueueType { + return ( + this.configService.get('MESSAGE_QUEUE_TYPE') ?? + MessageQueueType.PgBoss + ); + } + getStorageS3Region(): AwsRegion | undefined { return this.configService.get('STORAGE_S3_REGION'); } diff --git a/server/src/integrations/environment/interfaces/message-queue.interface.ts b/server/src/integrations/environment/interfaces/message-queue.interface.ts new file mode 100644 index 000000000..ff37f2c36 --- /dev/null +++ b/server/src/integrations/environment/interfaces/message-queue.interface.ts @@ -0,0 +1,4 @@ +export enum MessageQueueType { + PgBoss = 'pg-boss', + BullMQ = 'bull-mq', +} diff --git a/server/src/integrations/integrations.module.ts b/server/src/integrations/integrations.module.ts index 86bbde6d3..e12af15c7 100644 --- a/server/src/integrations/integrations.module.ts +++ b/server/src/integrations/integrations.module.ts @@ -10,6 +10,9 @@ import { StorageType } from './environment/interfaces/storage.interface'; import { LoggerModule } from './logger/logger.module'; import { LoggerModuleOptions } from './logger/interfaces'; import { LoggerDriver } from './environment/interfaces/logger.interface'; +import { MessageQueueModule } from './message-queue/message-queue.module'; +import { MessageQueueModuleOptions } from './message-queue/interfaces'; +import { MessageQueueType } from './environment/interfaces/message-queue.interface'; /** * FileStorage Module factory @@ -84,6 +87,46 @@ const loggerModuleFactory = async ( } }; +/** + * MessageQueue Module factory + * @param environment + * @returns MessageQueueModuleOptions + */ +const messageQueueModuleFactory = async ( + environmentService: EnvironmentService, +): Promise => { + const type = environmentService.getMessageQueueType(); + + switch (type) { + case MessageQueueType.PgBoss: { + const connectionString = environmentService.getPGDatabaseUrl(); + return { + type: MessageQueueType.PgBoss, + options: { + connectionString, + }, + }; + } + case MessageQueueType.BullMQ: { + const host = environmentService.getRedisHost(); + const port = environmentService.getRedisPort(); + return { + type: MessageQueueType.BullMQ, + options: { + connection: { + host, + port, + }, + }, + }; + } + default: + throw new Error( + `Invalid message queue type (${type}), check your .env file`, + ); + } +}; + @Module({ imports: [ EnvironmentModule.forRoot({}), @@ -95,6 +138,10 @@ const loggerModuleFactory = async ( useFactory: loggerModuleFactory, inject: [EnvironmentService], }), + MessageQueueModule.forRoot({ + useFactory: messageQueueModuleFactory, + inject: [EnvironmentService], + }), ], exports: [], providers: [], diff --git a/server/src/integrations/message-queue/drivers/bullmq.driver.ts b/server/src/integrations/message-queue/drivers/bullmq.driver.ts new file mode 100644 index 000000000..bb6fd7b3c --- /dev/null +++ b/server/src/integrations/message-queue/drivers/bullmq.driver.ts @@ -0,0 +1,60 @@ +import { Queue, QueueOptions, Worker } from 'bullmq'; + +import { QueueJobOptions } from 'src/integrations/message-queue/drivers/interfaces/job-options.interface'; + +import { MessageQueues } from 'src/integrations/message-queue/message-queue.constants'; + +import { MessageQueueDriver } from './interfaces/message-queue-driver.interface'; + +export type BullMQDriverOptions = QueueOptions; + +export class BullMQDriver implements MessageQueueDriver { + private queueMap: Record = {} as Record< + MessageQueues, + Queue + >; + private workerMap: Record = {} as Record< + MessageQueues, + Worker + >; + + constructor(private options: BullMQDriverOptions) {} + + register(queueName: MessageQueues): void { + this.queueMap[queueName] = new Queue(queueName, this.options); + } + + async stop() { + const workers = Object.values(this.workerMap); + const queues = Object.values(this.queueMap); + await Promise.all([ + ...queues.map((q) => q.close()), + ...workers.map((w) => w.close()), + ]); + } + + async work( + queueName: MessageQueues, + handler: ({ data, id }: { data: T; id: string }) => Promise, + ) { + const worker = new Worker(queueName, async (job) => { + await handler(job as { data: T; id: string }); + }); + this.workerMap[queueName] = worker; + } + + async add( + queueName: MessageQueues, + data: T, + options?: QueueJobOptions, + ): Promise { + if (!this.queueMap[queueName]) { + throw new Error( + `Queue ${queueName} is not registered, make sure you have added it as a queue provider`, + ); + } + await this.queueMap[queueName].add(options?.id || '', data, { + priority: options?.priority, + }); + } +} diff --git a/server/src/integrations/message-queue/drivers/interfaces/job-options.interface.ts b/server/src/integrations/message-queue/drivers/interfaces/job-options.interface.ts new file mode 100644 index 000000000..f2cd28a24 --- /dev/null +++ b/server/src/integrations/message-queue/drivers/interfaces/job-options.interface.ts @@ -0,0 +1,4 @@ +export interface QueueJobOptions { + id?: string; + priority?: number; +} diff --git a/server/src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface.ts b/server/src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface.ts new file mode 100644 index 000000000..a0ed9e6d5 --- /dev/null +++ b/server/src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface.ts @@ -0,0 +1,17 @@ +import { QueueJobOptions } from 'src/integrations/message-queue/drivers/interfaces/job-options.interface'; + +import { MessageQueues } from 'src/integrations/message-queue/message-queue.constants'; + +export interface MessageQueueDriver { + add( + queueName: MessageQueues, + data: T, + options?: QueueJobOptions, + ): Promise; + work( + queueName: string, + handler: ({ data, id }: { data: T; id: string }) => Promise | void, + ); + stop?(): Promise; + register?(queueName: MessageQueues): void; +} diff --git a/server/src/integrations/message-queue/drivers/pg-boss.driver.ts b/server/src/integrations/message-queue/drivers/pg-boss.driver.ts new file mode 100644 index 000000000..b08213888 --- /dev/null +++ b/server/src/integrations/message-queue/drivers/pg-boss.driver.ts @@ -0,0 +1,37 @@ +import PgBoss from 'pg-boss'; + +import { QueueJobOptions } from 'src/integrations/message-queue/drivers/interfaces/job-options.interface'; + +import { MessageQueueDriver } from './interfaces/message-queue-driver.interface'; + +export type PgBossDriverOptions = PgBoss.ConstructorOptions; + +export class PgBossDriver implements MessageQueueDriver { + private pgBoss: PgBoss; + + constructor(options: PgBossDriverOptions) { + this.pgBoss = new PgBoss(options); + } + async stop() { + await this.pgBoss.stop(); + } + + async init(): Promise { + await this.pgBoss.start(); + } + + async work( + queueName: string, + handler: ({ data, id }: { data: T; id: string }) => Promise, + ) { + return this.pgBoss.work(queueName, handler); + } + + async add( + queueName: string, + data: T, + options?: QueueJobOptions, + ): Promise { + await this.pgBoss.send(queueName, data as object, options ? options : {}); + } +} diff --git a/server/src/integrations/message-queue/interfaces/index.ts b/server/src/integrations/message-queue/interfaces/index.ts new file mode 100644 index 000000000..300859d01 --- /dev/null +++ b/server/src/integrations/message-queue/interfaces/index.ts @@ -0,0 +1 @@ +export * from './message-queue.interface'; diff --git a/server/src/integrations/message-queue/interfaces/message-queue.interface.ts b/server/src/integrations/message-queue/interfaces/message-queue.interface.ts new file mode 100644 index 000000000..da1bf0993 --- /dev/null +++ b/server/src/integrations/message-queue/interfaces/message-queue.interface.ts @@ -0,0 +1,27 @@ +import { FactoryProvider, ModuleMetadata } from '@nestjs/common'; + +import { MessageQueueType } from 'src/integrations/environment/interfaces/message-queue.interface'; + +import { BullMQDriverOptions } from 'src/integrations/message-queue/drivers/bullmq.driver'; +import { PgBossDriverOptions } from 'src/integrations/message-queue/drivers/pg-boss.driver'; + +export interface PgBossDriverFactoryOptions { + type: MessageQueueType.PgBoss; + options: PgBossDriverOptions; +} + +export interface BullMQDriverFactoryOptions { + type: MessageQueueType.BullMQ; + options: BullMQDriverOptions; +} + +export type MessageQueueModuleOptions = + | PgBossDriverFactoryOptions + | BullMQDriverFactoryOptions; + +export type MessageQueueModuleAsyncOptions = { + useFactory: ( + ...args: any[] + ) => MessageQueueModuleOptions | Promise; +} & Pick & + Pick; diff --git a/server/src/integrations/message-queue/message-queue.constants.ts b/server/src/integrations/message-queue/message-queue.constants.ts new file mode 100644 index 000000000..849e402b4 --- /dev/null +++ b/server/src/integrations/message-queue/message-queue.constants.ts @@ -0,0 +1,5 @@ +export const QUEUE_DRIVER = Symbol('QUEUE_DRIVER'); + +export enum MessageQueues { + taskAssignedQueue = 'task-assigned-queue', +} diff --git a/server/src/integrations/message-queue/message-queue.module.ts b/server/src/integrations/message-queue/message-queue.module.ts new file mode 100644 index 000000000..05e08c0ea --- /dev/null +++ b/server/src/integrations/message-queue/message-queue.module.ts @@ -0,0 +1,51 @@ +import { DynamicModule, Global } from '@nestjs/common'; + +import { MessageQueueDriver } from 'src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface'; +import { MessageQueueType } from 'src/integrations/environment/interfaces/message-queue.interface'; + +import { MessageQueueModuleAsyncOptions } from 'src/integrations/message-queue/interfaces'; +import { + QUEUE_DRIVER, + MessageQueues, +} from 'src/integrations/message-queue/message-queue.constants'; +import { PgBossDriver } from 'src/integrations/message-queue/drivers/pg-boss.driver'; +import { MessageQueueService } from 'src/integrations/message-queue/services/message-queue.service'; +import { BullMQDriver } from 'src/integrations/message-queue/drivers/bullmq.driver'; + +@Global() +export class MessageQueueModule { + static forRoot(options: MessageQueueModuleAsyncOptions): DynamicModule { + const providers = [ + { + provide: MessageQueues.taskAssignedQueue, + useFactory: (driver: MessageQueueDriver) => { + return new MessageQueueService( + driver, + MessageQueues.taskAssignedQueue, + ); + }, + inject: [QUEUE_DRIVER], + }, + { + provide: QUEUE_DRIVER, + useFactory: async (...args: any[]) => { + const config = await options.useFactory(...args); + if (config.type === MessageQueueType.PgBoss) { + const boss = new PgBossDriver(config.options); + await boss.init(); + return boss; + } + return new BullMQDriver(config.options); + }, + inject: options.inject || [], + }, + ]; + + return { + module: MessageQueueModule, + imports: options.imports || [], + providers, + exports: [MessageQueues.taskAssignedQueue], + }; + } +} diff --git a/server/src/integrations/message-queue/services/message-queue-task-assigned.service.spec.ts b/server/src/integrations/message-queue/services/message-queue-task-assigned.service.spec.ts new file mode 100644 index 000000000..8244b94c3 --- /dev/null +++ b/server/src/integrations/message-queue/services/message-queue-task-assigned.service.spec.ts @@ -0,0 +1,46 @@ +import { Test, TestingModule } from '@nestjs/testing'; + +import { MessageQueueDriver } from 'src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface'; + +import { + QUEUE_DRIVER, + MessageQueues, +} from 'src/integrations/message-queue/message-queue.constants'; +import { MessageQueueService } from 'src/integrations/message-queue/services/message-queue.service'; + +describe('MessageQueueTaskAssigned queue', () => { + let service: MessageQueueService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + { + provide: MessageQueues.taskAssignedQueue, + useFactory: (driver: MessageQueueDriver) => { + return new MessageQueueService( + driver, + MessageQueues.taskAssignedQueue, + ); + }, + inject: [QUEUE_DRIVER], + }, + { + provide: QUEUE_DRIVER, + useValue: {}, + }, + ], + }).compile(); + + service = module.get(MessageQueues.taskAssignedQueue); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); + it('should contain the topic and driver', () => { + expect(service).toEqual({ + driver: {}, + queueName: MessageQueues.taskAssignedQueue, + }); + }); +}); diff --git a/server/src/integrations/message-queue/services/message-queue.service.ts b/server/src/integrations/message-queue/services/message-queue.service.ts new file mode 100644 index 000000000..28248478a --- /dev/null +++ b/server/src/integrations/message-queue/services/message-queue.service.ts @@ -0,0 +1,37 @@ +import { Inject, Injectable, OnModuleDestroy } from '@nestjs/common'; + +import { QueueJobOptions } from 'src/integrations/message-queue/drivers/interfaces/job-options.interface'; +import { MessageQueueDriver } from 'src/integrations/message-queue/drivers/interfaces/message-queue-driver.interface'; + +import { + MessageQueues, + QUEUE_DRIVER, +} from 'src/integrations/message-queue/message-queue.constants'; + +@Injectable() +export class MessageQueueService implements OnModuleDestroy { + constructor( + @Inject(QUEUE_DRIVER) protected driver: MessageQueueDriver, + protected queueName: MessageQueues, + ) { + if (typeof this.driver.register === 'function') { + this.driver.register(queueName); + } + } + + async onModuleDestroy() { + if (typeof this.driver.stop === 'function') { + await this.driver.stop(); + } + } + + add(data: T, options?: QueueJobOptions): Promise { + return this.driver.add(this.queueName, data, options); + } + + work( + handler: ({ data, id }: { data: T; id: string }) => Promise | void, + ) { + return this.driver.work(this.queueName, handler); + } +} diff --git a/server/yarn.lock b/server/yarn.lock index 46587db9f..b0218fc62 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -363,20 +363,20 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" -"@aws-sdk/client-cognito-identity@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.460.0.tgz#e41b81e6a5d8f33dece4b5a8a4560151fdd20dcf" - integrity sha512-Q3LH9/2yRUhOVqKVBVnX4L5QghT3tJaUMN8kQviRLKA8PJQpxknfJ4Em1EYcksPQjmd8xQgLhpQh/H2pipn5Lw== +"@aws-sdk/client-cognito-identity@3.462.0": + version "3.462.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.462.0.tgz#9c88a07e0a6b80a567e990a143b3f78124784640" + integrity sha512-NGsFxb2ysXWUPKCRoa4KIJTcL8kddY73EV0hbw9li7+pTFzzkiYiNg6RxfHp3U+sBlhN8poItQrkAXZTDIJ1yQ== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.460.0" + "@aws-sdk/client-sts" "3.462.0" "@aws-sdk/core" "3.451.0" "@aws-sdk/credential-provider-node" "3.460.0" "@aws-sdk/middleware-host-header" "3.460.0" "@aws-sdk/middleware-logger" "3.460.0" "@aws-sdk/middleware-recursion-detection" "3.460.0" - "@aws-sdk/middleware-signing" "3.460.0" + "@aws-sdk/middleware-signing" "3.461.0" "@aws-sdk/middleware-user-agent" "3.460.0" "@aws-sdk/region-config-resolver" "3.451.0" "@aws-sdk/types" "3.460.0" @@ -409,29 +409,29 @@ tslib "^2.5.0" "@aws-sdk/client-s3@^3.363.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.460.0.tgz#ec0752f3258ef2ca82601d5b174d6967e1a69f06" - integrity sha512-UlS+b+Hd/8jMjbiGnL7fBXuapbKxVoGF5de05+jxOt4gEb/n1tVFilSOR7CDUpfEnkD0twvFgRN4EOkE2skNMw== + version "3.462.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.462.0.tgz#f58855040c38af6ad127066a0413b044d86eff90" + integrity sha512-nyBmsS45b5/YI926dtJp6OA8Fx7yItcdK8lqJq5bgfbskyEqycFCXzykog1AkIBETOeUn3Saztw7HCGZKRad0g== dependencies: "@aws-crypto/sha1-browser" "3.0.0" "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.460.0" + "@aws-sdk/client-sts" "3.462.0" "@aws-sdk/core" "3.451.0" "@aws-sdk/credential-provider-node" "3.460.0" "@aws-sdk/middleware-bucket-endpoint" "3.460.0" "@aws-sdk/middleware-expect-continue" "3.460.0" - "@aws-sdk/middleware-flexible-checksums" "3.460.0" + "@aws-sdk/middleware-flexible-checksums" "3.461.0" "@aws-sdk/middleware-host-header" "3.460.0" - "@aws-sdk/middleware-location-constraint" "3.460.0" + "@aws-sdk/middleware-location-constraint" "3.461.0" "@aws-sdk/middleware-logger" "3.460.0" "@aws-sdk/middleware-recursion-detection" "3.460.0" - "@aws-sdk/middleware-sdk-s3" "3.460.0" - "@aws-sdk/middleware-signing" "3.460.0" + "@aws-sdk/middleware-sdk-s3" "3.461.0" + "@aws-sdk/middleware-signing" "3.461.0" "@aws-sdk/middleware-ssec" "3.460.0" "@aws-sdk/middleware-user-agent" "3.460.0" "@aws-sdk/region-config-resolver" "3.451.0" - "@aws-sdk/signature-v4-multi-region" "3.460.0" + "@aws-sdk/signature-v4-multi-region" "3.461.0" "@aws-sdk/types" "3.460.0" "@aws-sdk/util-endpoints" "3.460.0" "@aws-sdk/util-user-agent-browser" "3.460.0" @@ -513,10 +513,10 @@ "@smithy/util-utf8" "^2.0.2" tslib "^2.5.0" -"@aws-sdk/client-sts@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.460.0.tgz#6f76b02c99267a9ac6ceb7dfcfdff7577284e988" - integrity sha512-Z4h9hZJG5RB9iwhyXlkcnJqCP25+rgIrT8UDryItJfWyK+Pberk1Zft7XwEiyDGXoc48BJvtf7SbOwx3cutgFw== +"@aws-sdk/client-sts@3.462.0": + version "3.462.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.462.0.tgz#7168e8c29e2c3b67aca64841a72acd041c409a65" + integrity sha512-oO6SVGB9kR0dwc4T/M3++TcioBVv26cEpxZGS4BcKMDxSjkCLqJ/jE37aCNNPGTlCAhnuOAwqGjFqYrsehsI1Q== dependencies: "@aws-crypto/sha256-browser" "3.0.0" "@aws-crypto/sha256-js" "3.0.0" @@ -525,8 +525,8 @@ "@aws-sdk/middleware-host-header" "3.460.0" "@aws-sdk/middleware-logger" "3.460.0" "@aws-sdk/middleware-recursion-detection" "3.460.0" - "@aws-sdk/middleware-sdk-sts" "3.460.0" - "@aws-sdk/middleware-signing" "3.460.0" + "@aws-sdk/middleware-sdk-sts" "3.461.0" + "@aws-sdk/middleware-signing" "3.461.0" "@aws-sdk/middleware-user-agent" "3.460.0" "@aws-sdk/region-config-resolver" "3.451.0" "@aws-sdk/types" "3.460.0" @@ -567,12 +567,12 @@ "@smithy/smithy-client" "^2.1.15" tslib "^2.5.0" -"@aws-sdk/credential-provider-cognito-identity@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.460.0.tgz#a2fd4be48a32b9422499ca27b48b0104cc0d8117" - integrity sha512-S1GLrg65esgAs13htd8v7M1NSSjcX78aMcUcujeQpIND7Vtk5umgwbSqgt8fjzPxQk/spL8PztqqzKsLD3oqEA== +"@aws-sdk/credential-provider-cognito-identity@3.462.0": + version "3.462.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.462.0.tgz#c3dfa822df91c482e5d6ee1c10c069c81d27f253" + integrity sha512-oTN5PXFidfadOC+Ar1gZrRkvOTDzk4FZCf47Eqf6Spfm/Z58iQ8GuZ99uh98oQJZlcbYx8hCeuffRLQtPZS20Q== dependencies: - "@aws-sdk/client-cognito-identity" "3.460.0" + "@aws-sdk/client-cognito-identity" "3.462.0" "@aws-sdk/types" "3.460.0" "@smithy/property-provider" "^2.0.0" "@smithy/types" "^2.5.0" @@ -671,14 +671,14 @@ tslib "^2.5.0" "@aws-sdk/credential-providers@^3.363.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.460.0.tgz#1d8a41d749159b8a67d87657f8b0120454f05d27" - integrity sha512-+hjkPcisMeYgrpv7ErK8y3kJW757cW6qvFd1CrzGoQ48OxUV070Oggp08s+co6EssKqKgSX8xbJJ9hOkA4XwCA== + version "3.462.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.462.0.tgz#633ce0b9f4989f065e175d6d36e587814d6ed281" + integrity sha512-M5XBK3NPbuDmZPUPlpiKeS0NxLNq/ihpEP0ZjFKwOi2fToXt3x8LqZ0e6o8NDl4UqjHtgEewu8Wwrl4paTmc1A== dependencies: - "@aws-sdk/client-cognito-identity" "3.460.0" + "@aws-sdk/client-cognito-identity" "3.462.0" "@aws-sdk/client-sso" "3.460.0" - "@aws-sdk/client-sts" "3.460.0" - "@aws-sdk/credential-provider-cognito-identity" "3.460.0" + "@aws-sdk/client-sts" "3.462.0" + "@aws-sdk/credential-provider-cognito-identity" "3.462.0" "@aws-sdk/credential-provider-env" "3.460.0" "@aws-sdk/credential-provider-http" "3.460.0" "@aws-sdk/credential-provider-ini" "3.460.0" @@ -715,10 +715,10 @@ "@smithy/types" "^2.5.0" tslib "^2.5.0" -"@aws-sdk/middleware-flexible-checksums@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.460.0.tgz#9f8b9f68683d258247ff6be91c569128d5e9a16a" - integrity sha512-L7VI5bCEGsmUvKZqOFPofOuM+4p7Gg/li63dbDb7iCxnPG9aL+ir8vnOQ2ZwjmtxaGsWhShwcJDEk2dDiNUXDg== +"@aws-sdk/middleware-flexible-checksums@3.461.0": + version "3.461.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.461.0.tgz#a91e3414facf8c34b6b1130deb9d61b56be283d0" + integrity sha512-MNY7xMl2Qzoinj6Pos23TgD+WQtC9/G/VkNW/v8Ky5faRAt7bbS+ZEkkK3KcCrjnb8x4Bl/FzYNTCZRzRoQOtA== dependencies: "@aws-crypto/crc32" "3.0.0" "@aws-crypto/crc32c" "3.0.0" @@ -739,10 +739,10 @@ "@smithy/types" "^2.5.0" tslib "^2.5.0" -"@aws-sdk/middleware-location-constraint@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.460.0.tgz#501913b95165ed3e769c5c334151790addc9563c" - integrity sha512-0ciQnggW320qrzEtsEUvGWYrh5xoqxiDzWQ10MOZTw7/4dHX2+QnFQbzWK4ow4s2sS6AnBdYuDXpkGXDXNhoOw== +"@aws-sdk/middleware-location-constraint@3.461.0": + version "3.461.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.461.0.tgz#e9f6d8d1f7a65d5807c7d092cabdc6fc443c3b91" + integrity sha512-dibimciNOV2kuhBBmHbS+29X559xNw4BdZviGzjGAQPkqPx+7Adgvp5BHqSDgh7FIJpgN2+QGbrubIQ+V1Bn4A== dependencies: "@aws-sdk/types" "3.460.0" "@smithy/types" "^2.5.0" @@ -767,32 +767,35 @@ "@smithy/types" "^2.5.0" tslib "^2.5.0" -"@aws-sdk/middleware-sdk-s3@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.460.0.tgz#a35cedd4fc9b08597f65a4c20b99416e86acefac" - integrity sha512-aOTr4P3gABGYWGHTGCmLjqOIGJ9y2Jd5HSxQ+dzNk3ay2YOBdJ1HiomcoqWtsaO1PHrDLojK9A5rxt3rYUL3MA== +"@aws-sdk/middleware-sdk-s3@3.461.0": + version "3.461.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.461.0.tgz#615cffecb02b03a5a41730b7b561967195ca7e48" + integrity sha512-sOFUBWROq0xQxNoXp+3eepXrUAuMc/JPH+sI/r5QOznk7JVemYoBj99lknbTzJ4ssSK0yVrSUxxwGiGvDQb0Gg== dependencies: "@aws-sdk/types" "3.460.0" "@aws-sdk/util-arn-parser" "3.310.0" + "@smithy/node-config-provider" "^2.1.5" "@smithy/protocol-http" "^3.0.9" + "@smithy/signature-v4" "^2.0.0" "@smithy/smithy-client" "^2.1.15" "@smithy/types" "^2.5.0" + "@smithy/util-config-provider" "^2.0.0" tslib "^2.5.0" -"@aws-sdk/middleware-sdk-sts@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.460.0.tgz#5f9047f63ea77a02826023332a63fe327a3813aa" - integrity sha512-eAaKBULwvIEToKweJtZ+gLrDPVwdi/XYjiJMJFBVDFk1n6kfHeS6BlNVrw713YrThpPiWfKNz8U3TvWtvD2Wpg== +"@aws-sdk/middleware-sdk-sts@3.461.0": + version "3.461.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.461.0.tgz#746afa5958c22989e4c1a1217fc2a008f7e04bf3" + integrity sha512-sgNxkwKdJ/NZm7SJZBnbYPkbspmzn3lDyRSJH7PTCvyzDBzY2PB6yS/dfnGkitR+PYwromuOYMha37W4su2SOw== dependencies: - "@aws-sdk/middleware-signing" "3.460.0" + "@aws-sdk/middleware-signing" "3.461.0" "@aws-sdk/types" "3.460.0" "@smithy/types" "^2.5.0" tslib "^2.5.0" -"@aws-sdk/middleware-signing@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.460.0.tgz#7eacc102a3516b595c020cfc06dd4250fbe865c5" - integrity sha512-f7dPf0TdyGMMlMoaGLV85nCfcGZOMIaNm+nR0x21H4SJyn1vCNSLMD6Nksav26hAdI3zreBtI2enudj8YYl2XA== +"@aws-sdk/middleware-signing@3.461.0": + version "3.461.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.461.0.tgz#e7393f755660eb65a160e64584ad9383724bd2e1" + integrity sha512-aM/7VupHlsgeRG1UZSAQMWJX+2Jam4GG8ZGVAbLfBr9yh9cBwnUUndpUpYI9rU7atA8n+vISr162EbR7WTiFhQ== dependencies: "@aws-sdk/types" "3.460.0" "@smithy/property-provider" "^2.0.0" @@ -833,11 +836,12 @@ "@smithy/util-middleware" "^2.0.6" tslib "^2.5.0" -"@aws-sdk/signature-v4-multi-region@3.460.0": - version "3.460.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.460.0.tgz#85690485ffc077f1effecfd51471e218d8256b7e" - integrity sha512-JvP3Syha60QS2j+P0hYugHsWNnGItviyFisq/PhZlwCc/pSIsef2FGYuZYtcajzvinvmVpbpibo2B3VedWVrjQ== +"@aws-sdk/signature-v4-multi-region@3.461.0": + version "3.461.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.461.0.tgz#0ef0951bc39647d20099c69a99957ad1d429bf54" + integrity sha512-9tsdJ5KMPZzJN1x28AZKoS9J3xfwftFwutqcU1qsXXeouck0CztLfX+wr3etO4acPQO2zU305fnR2ulSsnns4g== dependencies: + "@aws-sdk/middleware-sdk-s3" "3.461.0" "@aws-sdk/types" "3.460.0" "@smithy/protocol-http" "^3.0.9" "@smithy/signature-v4" "^2.0.0" @@ -952,46 +956,46 @@ dependencies: tslib "^2.5.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" - integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: "@babel/highlight" "^7.23.4" chalk "^2.4.2" "@babel/compat-data@^7.22.9": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" - integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" - integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" + integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.3" + "@babel/helpers" "^7.23.5" + "@babel/parser" "^7.23.5" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.3", "@babel/generator@^7.23.4", "@babel/generator@^7.7.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" - integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== +"@babel/generator@^7.23.5", "@babel/generator@^7.7.2": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" + integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== dependencies: - "@babel/types" "^7.23.4" + "@babel/types" "^7.23.5" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -1075,18 +1079,18 @@ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== "@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helpers@^7.23.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" - integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== +"@babel/helpers@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" + integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.4" - "@babel/types" "^7.23.4" + "@babel/traverse" "^7.23.5" + "@babel/types" "^7.23.5" "@babel/highlight@^7.23.4": version "7.23.4" @@ -1097,10 +1101,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" - integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" + integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -1194,9 +1198,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/runtime@^7.21.0": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" - integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" + integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== dependencies: regenerator-runtime "^0.14.0" @@ -1209,26 +1213,26 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4", "@babel/traverse@^7.7.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" - integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== +"@babel/traverse@^7.23.5", "@babel/traverse@^7.7.2": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" + integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== dependencies: - "@babel/code-frame" "^7.23.4" - "@babel/generator" "^7.23.4" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.4" - "@babel/types" "^7.23.4" + "@babel/parser" "^7.23.5" + "@babel/types" "^7.23.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.3.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" - integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.5", "@babel/types@^7.3.3": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" + integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -1298,12 +1302,12 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== -"@fig/complete-commander@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@fig/complete-commander/-/complete-commander-2.0.1.tgz#6dd84f8812389107529aaedebd1bb67ac8bc16c6" - integrity sha512-AbGETely7iwD4F7XHe4g7pW6icWYYqJMdQog8CdEi9syU/av5L0O24BvCfgEeGO6TRPMpC+rFL7ZDJsqRtckOA== +"@fig/complete-commander@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@fig/complete-commander/-/complete-commander-3.0.0.tgz#02826f8604adfb694e576b39ad53acd735aa9d18" + integrity sha512-jxiF1O+xiqdM7jECmTTrSO5w35iKsVRcSCz9mu20R4bFgLJS+61VNHw2A3EY7gU1kKlLJye0TmkyTfAoPhIq7A== dependencies: - prettier "^2.3.2" + prettier "^3.1.0" "@golevelup/nestjs-discovery@4.0.0": version "4.0.0" @@ -1492,6 +1496,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1774,6 +1783,36 @@ semver "^7.3.5" tar "^6.1.11" +"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz#44d752c1a2dc113f15f781b7cc4f53a307e3fa38" + integrity sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ== + +"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz#f954f34355712212a8e06c465bc06c40852c6bb3" + integrity sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw== + +"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz#45c63037f045c2b15c44f80f0393fa24f9655367" + integrity sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg== + +"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz#35707efeafe6d22b3f373caf9e8775e8920d1399" + integrity sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA== + +"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz#091b1218b66c341f532611477ef89e83f25fae4f" + integrity sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA== + +"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" + integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== + "@nestjs/apollo@^11.0.5": version "11.0.6" resolved "https://registry.yarnpkg.com/@nestjs/apollo/-/apollo-11.0.6.tgz#7bd39e0efbaef3eceabfd99b3ae1e2dc8eff2d7a" @@ -2024,9 +2063,9 @@ tslib "^2.6.2" "@ptc-org/nestjs-query-core@^4.2.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@ptc-org/nestjs-query-core/-/nestjs-query-core-4.3.1.tgz#122a97612d75058d9b960c50c00d18a6c02fc42e" - integrity sha512-xyxTkgrVRQg+iu4YiYcTbdTcHYcj39uC39WbxFbWUiZpulXAIM8nzTeOiFY/kapcmJUoPa4pm5qMEdEAWBbtaQ== + version "4.3.2" + resolved "https://registry.yarnpkg.com/@ptc-org/nestjs-query-core/-/nestjs-query-core-4.3.2.tgz#b58ee0b7c8c40fa29b225b4db6e8b9ffa178ca8f" + integrity sha512-tCNJKY/143Mkmla9hXGEEVfv0RJ4e5MG2c0htwGZzts0i+20J4pf2POzMcLUbME3ue6ixdh+bIvwpBSpvFl8hA== dependencies: lodash.merge "^4.6.2" reflect-metadata "^0.1.13" @@ -2065,52 +2104,52 @@ resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.5.tgz#b77571685410217a548a9c753aa3cdfc215bfc78" integrity sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA== -"@sentry-internal/tracing@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.83.0.tgz#8f69d339569b020c495f8350a8ea527c369586e8" - integrity sha512-fY1ZyOiQaaUTuoq5rO+G4/5Ov3n8BnfNK7ck97yAGxy3w+E1CwhVZkXHEvTngNfdYV3ArxvlrtPRb9STFRqXvQ== +"@sentry-internal/tracing@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.84.0.tgz#430da253ee5b075be4ef57f20ea842c0208bc6b0" + integrity sha512-y9bGYA0OM6PEREfd+nk4UURZy29tpIw+7vQwpxWfEVs2fqq0/5TBFX/tKFb8AKUI9lVM8v0bcF0bNSCnuPQZHQ== dependencies: - "@sentry/core" "7.83.0" - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" + "@sentry/core" "7.84.0" + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" -"@sentry/core@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.83.0.tgz#29bdd5aba40a6f25c01c68387b6a9aa13e27f20a" - integrity sha512-fglvpw8aWM6nWXzCjAVXIMTiTEAQ9G9b85IpDd/7L8fuwaFTPQAUSJXupF2PfbpQ3FUYbJt80dxshbERVJG8vQ== +"@sentry/core@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.84.0.tgz#01d33fc452044ffd8ea57b20f60304b9cfa2b9e1" + integrity sha512-tbuwunbBx2kSex15IHCqHDnrMfIlqPc6w/76fwkGqokz3oh9GSEGlLICwmBWL8AypWimUg13IDtFpD0TJTriWA== dependencies: - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" "@sentry/node@^7.66.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.83.0.tgz#199965f4c0cb3cd0d2ae590faa260d2505c38528" - integrity sha512-ibnON+5ovoGOsvcLxcWQu5XAc4rbkvDkzCP74YGnME3/NzRuo3cKam8bUL5Wlm15h68QzxskyNOLuj6BEJ6AfQ== + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.84.0.tgz#c06167106796b2b83c0a9b52fa56f8ca820034ca" + integrity sha512-Xm3fIXT3TZOQi+6uQBavI8iOehD3PkY7v0y3hog0d4lQTH88vQK9BBsI+jZEq81Em+RG/u7vZNiFo6YMTnWF7Q== dependencies: - "@sentry-internal/tracing" "7.83.0" - "@sentry/core" "7.83.0" - "@sentry/types" "7.83.0" - "@sentry/utils" "7.83.0" + "@sentry-internal/tracing" "7.84.0" + "@sentry/core" "7.84.0" + "@sentry/types" "7.84.0" + "@sentry/utils" "7.84.0" https-proxy-agent "^5.0.0" "@sentry/tracing@^7.66.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.83.0.tgz#816c99ca1c9dc0b04962da88d4728b6360f46ee7" - integrity sha512-0VqUOV/DTYdnkxMU28miybyxsRDjizFe+O5vBzShZNR2XfRHI70ozd8kI/Uni685QlCYirpcnS5evrEx1yLf+A== + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.84.0.tgz#64fbd93ed771f8e19fb60b06968cc133e3c82ea0" + integrity sha512-NhBX28vUmCu/5avyGKX6B4UTm4MTOfbdg9ZzCnS7hPuWDfEAUIVHZVryi2q8bqp2DNGJvS9qIq/TSf39JIpdJg== dependencies: - "@sentry-internal/tracing" "7.83.0" + "@sentry-internal/tracing" "7.84.0" -"@sentry/types@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.83.0.tgz#117e45900603190c547e52bba35e1b3d539d47fb" - integrity sha512-Bd+zJcy8p1VgCfQqUprmUaw0QPWUV+GmCt6zJRHrHTb2pwLahXv6sHJvQ8F8Va6S7Keuy088U+kHzUFGQLMZMQ== +"@sentry/types@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.84.0.tgz#e8db86c36c61659c3b2558f0aa8b6a073a756117" + integrity sha512-VqGLIF3JOUrk7yIXjLXJvAORkZL1e3dDX0Q1okRehwyt/5CRE+mdUTeJZkBo9P9mBwgMyvtwklzOGGrzjb4eMA== -"@sentry/utils@7.83.0": - version "7.83.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.83.0.tgz#ec0fc0a468ec35ab9623603f1ba218dd58233eda" - integrity sha512-7SrZtgAn3pHFBqSSvV/VL0CWTBQ7VenJjok4+WGWd6/FhP3fKrEEd9rjVTUb2Pzq9WLJJYzdvxAG8RlggG+H4g== +"@sentry/utils@7.84.0": + version "7.84.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.84.0.tgz#32861d922fa31e86dd2863a1d9dfc5a369e98952" + integrity sha512-qdUVuxnRBvaf05AU+28R+xYtZmi/Ymf8os3Njq9g4XuA+QEkZLbzmIpRK5W9Ja7vUtjOeg29Xgg43A8znde9LQ== dependencies: - "@sentry/types" "7.83.0" + "@sentry/types" "7.84.0" "@sinclair/typebox@^0.24.1": version "0.24.51" @@ -2717,9 +2756,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.44.7" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.7.tgz#430b3cc96db70c81f405e6a08aebdb13869198f5" - integrity sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ== + version "8.44.8" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.8.tgz#f4fe1dab9b3d3dd98082d4b9f80e59ab40f1261c" + integrity sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2962,9 +3001,9 @@ form-data "^4.0.0" "@types/node@*": - version "20.10.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" - integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== + version "20.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.1.tgz#d2c96f356c3125fedc983d74c424910c3767141c" + integrity sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg== dependencies: undici-types "~5.26.4" @@ -2974,9 +3013,9 @@ integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^16.0.0": - version "16.18.65" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.65.tgz#b07eb49a14a808777b82879288a7e6f5a296ccfa" - integrity sha512-5E9WgTy95B7i90oISjui9U5Zu7iExUPfU4ygtv4yXEy6zJFE3oQYHCnh5H1jZRPkjphJt2Ml3oQW6M0qtK534A== + version "16.18.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.66.tgz#f59cc2ff96cc47f972a11a458a9b29bf0a209c34" + integrity sha512-sePmD/imfKvC4re/Wwos1NEcXYm6O96CAG5gQVY53nmDb8ePQ4qPku6uruN7n6TJ0t5FhcoUc2+yvE2/UZVDZw== "@types/oauth@*": version "0.9.4" @@ -3413,6 +3452,14 @@ agent-base@6: dependencies: debug "4" +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-formats@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -3979,6 +4026,21 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +bullmq@^4.14.0: + version "4.14.4" + resolved "https://registry.yarnpkg.com/bullmq/-/bullmq-4.14.4.tgz#0fa2d96ef3d2dad84a732158b7d2c5985243dd06" + integrity sha512-8tD3Zq4CP+2q+zZ1JSkKov5ra18Jhth8zdr2X1/V2MMOVpa8vfVCsQaRnKgDpiMpaF6AH9sucXUNtk4xamTEKw== + dependencies: + cron-parser "^4.6.0" + glob "^8.0.3" + ioredis "^5.3.2" + lodash "^4.17.21" + msgpackr "^1.6.2" + node-abort-controller "^3.1.1" + semver "^7.5.4" + tslib "^2.0.0" + uuid "^9.0.0" + busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" @@ -4121,6 +4183,11 @@ class-validator@^0.14.0: libphonenumber-js "^1.10.14" validator "^13.7.0" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" @@ -4187,6 +4254,11 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -4249,10 +4321,10 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" - integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== +commander@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== commander@4.1.1: version "4.1.1" @@ -4370,6 +4442,13 @@ 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@^4.0.0, cron-parser@^4.6.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" + integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== + dependencies: + luxon "^3.2.1" + cross-inspect@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cross-inspect/-/cross-inspect-1.0.0.tgz#5fda1af759a148594d2d58394a9e21364f6849af" @@ -4467,7 +4546,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -4476,6 +4555,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -4486,6 +4570,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +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== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -4590,9 +4679,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.535: - version "1.4.595" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.595.tgz#fa33309eb9aabb7426915f8e166ec60f664e9ad4" - integrity sha512-+ozvXuamBhDOKvMNUQvecxfbyICmIAwS4GpLmR0bsiSBlGnLaOcs2Cj7J8XSbW+YEaN3Xl3ffgpm+srTUWFwFQ== + version "1.4.600" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.600.tgz#10ad8a5edc3f92a9a70b4453157ec2261c6db088" + integrity sha512-KD6CWjf1BnQG+NsXuyiTDDT1eV13sKuYsOUioXkQweYTQIbgHkXPry9K7M+7cKtYHnSUPitVaLrXYB1jTkkYrw== emittery@^0.10.2: version "0.10.2" @@ -5417,7 +5506,7 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.1.0: +glob@^8.0.3, glob@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -5691,6 +5780,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5786,6 +5880,21 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +ioredis@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" + integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + 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" + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -6596,6 +6705,16 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.defaults@^4.2.0: + version "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.filter@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" @@ -6606,6 +6725,11 @@ lodash.includes@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" @@ -6752,6 +6876,11 @@ lru-cache@^7.10.1, lru-cache@^7.14.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +luxon@^3.2.1: + version "3.4.4" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" + integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== + macos-release@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.1.tgz#bccac4a8f7b93163a8d163b8ebf385b3c5f55bf9" @@ -6955,6 +7084,27 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +msgpackr-extract@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz#e05ec1bb4453ddf020551bcd5daaf0092a2c279d" + integrity sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A== + dependencies: + node-gyp-build-optional-packages "5.0.7" + optionalDependencies: + "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.2" + "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.2" + "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.2" + "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.2" + "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.2" + "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" + +msgpackr@^1.6.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.10.0.tgz#adbca9c951f06647a808f76bc00a519cf6f7fbe4" + integrity sha512-rVQ5YAQDoZKZLX+h8tNq7FiHrPJoeGHViz3U4wIcykhAEpwF/nH2Vbk8dQxmpX5JavkI8C7pt4bnkJ02ZmRoUw== + optionalDependencies: + msgpackr-extract "^3.0.2" + multer@1.4.4-lts.1: version "1.4.4-lts.1" resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.4-lts.1.tgz#24100f701a4611211cfae94ae16ea39bb314e04d" @@ -7008,13 +7158,13 @@ neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nest-commander@^3.12.0: - version "3.12.2" - resolved "https://registry.yarnpkg.com/nest-commander/-/nest-commander-3.12.2.tgz#3bf6f251d9215db0de5e40b3bda959054a8a98ae" - integrity sha512-iOIVzwepP21fFfU629lxGeWABhDRXfOmJeNsuqmdonx/TEYUpWuPJCPYMKRKOpv/UQj0vf/8hjbzq25VfU+0xQ== + version "3.12.4" + resolved "https://registry.yarnpkg.com/nest-commander/-/nest-commander-3.12.4.tgz#fc2c0065596815ddae8ec8ac7a40c07dc0137a0b" + integrity sha512-xl6YjoNqT8s6RCO0u4RND4X/MuKGR2iGsOHZkqYsiNJAAoG33OvryU/sFaQnRMAWo7QTLKl7TURVYcb7Fy4+ZA== dependencies: - "@fig/complete-commander" "^2.0.1" + "@fig/complete-commander" "^3.0.0" "@golevelup/nestjs-discovery" "4.0.0" - commander "11.0.0" + commander "11.1.0" cosmiconfig "8.3.6" inquirer "8.2.6" @@ -7062,15 +7212,20 @@ node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-gyp-build-optional-packages@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" + integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== nopt@^5.0.0: version "5.0.0" @@ -7127,12 +7282,12 @@ object-path@^0.11.8: integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" @@ -7261,6 +7416,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -7444,6 +7606,19 @@ peek-readable@^4.1.0: resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== +pg-boss@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/pg-boss/-/pg-boss-9.0.3.tgz#518ca7217d2d17f3ac5499f4f1ba2c289a4633c5" + integrity sha512-cUWUiv3sr563yNy0nCZ25Tv5U0m59Y9MhX/flm0vTR012yeVCrqpfboaZP4xFOQPdWipMJpuu4g94HR0SncTgw== + dependencies: + cron-parser "^4.0.0" + delay "^5.0.0" + lodash.debounce "^4.0.8" + p-map "^4.0.0" + pg "^8.5.1" + serialize-error "^8.1.0" + uuid "^9.0.0" + pg-cloudflare@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" @@ -7480,7 +7655,7 @@ pg-types@^2.1.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.11.3: +pg@^8.11.3, pg@^8.5.1: version "8.11.3" resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== @@ -7591,6 +7766,11 @@ prettier@^2.3.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== + pretty-format@^28.0.0, pretty-format@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" @@ -7759,6 +7939,18 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +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" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + reflect-metadata@0.1.13, reflect-metadata@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" @@ -7951,6 +8143,13 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +serialize-error@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" + integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== + dependencies: + type-fest "^0.20.2" + serialize-javascript@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" @@ -8133,6 +8332,11 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -8614,7 +8818,7 @@ tslib@^1.11.1, tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2, tslib@^2.6.2: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.5.2, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==