From 4bec4c4887ebdbe7d719ff79301efb2d87125570 Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 19 Aug 2023 13:29:52 +0800 Subject: [PATCH 01/13] feat(nest-langchain): add nest langchain package --- .verdaccio/config.yml | 28 ++++++ apps/yggdrasil-core-engine/.eslintrc.json | 6 +- .../src/app/app.controller.spec.ts | 2 +- .../src/app/app.controller.ts | 2 +- .../audio-chat-gpt/audio-chat-gpt.service.ts | 6 +- .../service/base-feature-chat-gpt.service.ts | 1 + .../image-chat-gpt/image-chat-gpt.service.ts | 2 +- .../pdf-chat-gpt/pdf-chat-gpt.service.ts | 2 +- .../txt-chat-gpt/txt-chat-gpt.service.ts | 2 +- .../url-chat-gpt/url-chat-gpt.service.ts | 2 +- .../yt-chat-gpt/yt-chat-gpt.service.ts | 4 +- .../src/app/config/azure.openai.config.ts | 14 ++- .../src/app/config/open.ai.config.ts | 3 + .../src/app/controllers/chatgpt.controller.ts | 44 ++------- .../adapter/audio-adapter.ts | 5 +- .../data-source-adapter.interface.ts | 1 + .../adapter/pdf-adapter.ts | 2 +- .../adapter/txt-adapter.ts | 2 +- .../adapter/url-adapter.ts | 4 +- .../src/app/provider/open-ai/open-ai.spec.ts | 45 +++++++++ .../src/app/provider/open-ai/open-ai.ts | 47 +++++++++ .../src/app/provider/provider.module.ts | 8 ++ .../src/app/services/service.module.ts | 15 +++ .../youtube-dl/youtube-dl.service.spec.ts | 1 - .../services/youtube-dl/youtube-dl.service.ts | 4 +- .../youtube-record.service.spec.ts | 4 - docker-compose.yml | 5 + libs/nest-langchain/.eslintrc.json | 25 +++++ libs/nest-langchain/README.md | 11 +++ libs/nest-langchain/jest.config.ts | 11 +++ libs/nest-langchain/package.json | 10 ++ libs/nest-langchain/project.json | 48 ++++++++++ libs/nest-langchain/src/index.ts | 3 + .../constants/nest.openai.client.constants.ts | 2 + .../nest-langchain/src/lib/interface/index.ts | 2 + .../lib/interface/nest.langchain-module.ts | 48 ++++++++++ .../nest.langchain-options.interface.ts | 3 + .../src/lib/nest-langchain.module.ts | 95 +++++++++++++++++++ .../src/lib/nest-langchain.service.spec.ts | 18 ++++ .../src/lib/nest-langchain.service.ts | 4 + libs/nest-langchain/src/utils/utils.ts | 3 + libs/nest-langchain/tsconfig.json | 22 +++++ libs/nest-langchain/tsconfig.lib.json | 16 ++++ libs/nest-langchain/tsconfig.spec.json | 14 +++ libs/nest-openai-client/tsconfig.lib.json | 2 +- package.json | 6 +- project.json | 14 +++ tsconfig.base.json | 1 + 48 files changed, 550 insertions(+), 69 deletions(-) create mode 100644 .verdaccio/config.yml create mode 100644 apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.spec.ts create mode 100644 apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.ts create mode 100644 apps/yggdrasil-core-engine/src/app/provider/provider.module.ts create mode 100644 libs/nest-langchain/.eslintrc.json create mode 100644 libs/nest-langchain/README.md create mode 100644 libs/nest-langchain/jest.config.ts create mode 100644 libs/nest-langchain/package.json create mode 100644 libs/nest-langchain/project.json create mode 100644 libs/nest-langchain/src/index.ts create mode 100644 libs/nest-langchain/src/lib/constants/nest.openai.client.constants.ts create mode 100644 libs/nest-langchain/src/lib/interface/index.ts create mode 100644 libs/nest-langchain/src/lib/interface/nest.langchain-module.ts create mode 100644 libs/nest-langchain/src/lib/interface/nest.langchain-options.interface.ts create mode 100644 libs/nest-langchain/src/lib/nest-langchain.module.ts create mode 100644 libs/nest-langchain/src/lib/nest-langchain.service.spec.ts create mode 100644 libs/nest-langchain/src/lib/nest-langchain.service.ts create mode 100644 libs/nest-langchain/src/utils/utils.ts create mode 100644 libs/nest-langchain/tsconfig.json create mode 100644 libs/nest-langchain/tsconfig.lib.json create mode 100644 libs/nest-langchain/tsconfig.spec.json create mode 100644 project.json diff --git a/.verdaccio/config.yml b/.verdaccio/config.yml new file mode 100644 index 0000000..a007fe8 --- /dev/null +++ b/.verdaccio/config.yml @@ -0,0 +1,28 @@ +# path to a directory with all packages +storage: ../tmp/local-registry/storage + +# a list of other known repositories we can talk to +uplinks: + npmjs: + url: https://registry.npmjs.org/ + maxage: 60m + +packages: + '**': + # give all users (including non-authenticated users) full access + # because it is a local registry + access: $all + publish: $all + unpublish: $all + + # if package is not available locally, proxy requests to npm registry + proxy: npmjs + +# log settings +logs: + type: stdout + format: pretty + level: warn + +publish: + allow_offline: true # set offline to true to allow publish offline diff --git a/apps/yggdrasil-core-engine/.eslintrc.json b/apps/yggdrasil-core-engine/.eslintrc.json index 9d9c0db..323d57c 100644 --- a/apps/yggdrasil-core-engine/.eslintrc.json +++ b/apps/yggdrasil-core-engine/.eslintrc.json @@ -14,5 +14,9 @@ "files": ["*.js", "*.jsx"], "rules": {} } - ] + ], + "rules": { + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": ["error"] + } } diff --git a/apps/yggdrasil-core-engine/src/app/app.controller.spec.ts b/apps/yggdrasil-core-engine/src/app/app.controller.spec.ts index 0a59754..8dc3ac6 100644 --- a/apps/yggdrasil-core-engine/src/app/app.controller.spec.ts +++ b/apps/yggdrasil-core-engine/src/app/app.controller.spec.ts @@ -41,7 +41,7 @@ describe('AppController', () => { describe('getData', () => { it('should return "Hello API"', () => { - return; + expect(app.get(AppController)).toBeDefined(); }); }); }); diff --git a/apps/yggdrasil-core-engine/src/app/app.controller.ts b/apps/yggdrasil-core-engine/src/app/app.controller.ts index 0f2acec..82248fa 100644 --- a/apps/yggdrasil-core-engine/src/app/app.controller.ts +++ b/apps/yggdrasil-core-engine/src/app/app.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get } from '@nestjs/common'; +import { Controller } from '@nestjs/common'; @Controller() export class AppController { diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/service/audio-chat-gpt/audio-chat-gpt.service.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/service/audio-chat-gpt/audio-chat-gpt.service.ts index 146160e..ef6047e 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/service/audio-chat-gpt/audio-chat-gpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/service/audio-chat-gpt/audio-chat-gpt.service.ts @@ -103,7 +103,7 @@ export class AudioChatGPTService extends BaseFeatureChatGPTService this.asgardLogger.log(`percentage: ${formatted}`); await delay(Math.random() * 500 + 256); }) - .process(async (path, index, pool) => { + .process(async (path, index) => { const transcriptionResponse = await this.getAdapter().getDataFromPath( path @@ -116,7 +116,9 @@ export class AudioChatGPTService extends BaseFeatureChatGPTService }); promisePool.errors?.length > 0 && - promisePool.errors.forEach((e) => this.asgardLogger.error(e.raw, e.stack, e)); + promisePool.errors.forEach((e) => + this.asgardLogger.error(e.raw, e.stack, e) + ); const results = promisePool.results.filter( (r) => r !== undefined && (r as any) !== Symbol.for('failed') ); diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/service/base-feature-chat-gpt.service.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/service/base-feature-chat-gpt.service.ts index 2bffb63..d4eca7a 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/service/base-feature-chat-gpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/service/base-feature-chat-gpt.service.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ import { DataSourceType } from '../../data-source-adapter/adapter/interface/data-source-type.enum'; import { DataSourceAdapterService } from '../../data-source-adapter/data-source-adapter.service'; import { PartCreateChatCompletionResponse } from '../interface/create.completion.response.usage.for.rpc.interface'; diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/service/image-chat-gpt/image-chat-gpt.service.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/service/image-chat-gpt/image-chat-gpt.service.ts index dfdf10c..aab1d68 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/service/image-chat-gpt/image-chat-gpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/service/image-chat-gpt/image-chat-gpt.service.ts @@ -57,7 +57,7 @@ export class ImageChatGptService extends BaseFeatureChatGPTService this.asgardLogger.log(`percentage: ${formatted}`); await delay(Math.random() * 500 + 256); }) - .process(async (content, index, pool) => { + .process(async (content, index) => { const summary = await this.getTXTSummary(content, { user, partNumber: index + 1, diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/service/pdf-chat-gpt/pdf-chat-gpt.service.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/service/pdf-chat-gpt/pdf-chat-gpt.service.ts index 419b9fb..1724feb 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/service/pdf-chat-gpt/pdf-chat-gpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/service/pdf-chat-gpt/pdf-chat-gpt.service.ts @@ -51,7 +51,7 @@ export class PDFChatGPTService extends BaseFeatureChatGPTService { this.asgardLogger.log(`percentage: ${formatted}`); await delay(Math.random() * 500 + 256); }) - .process(async (content, index, pool) => { + .process(async (content, index) => { const summary = await this.getPDFSummary(content, { user, partNumber: index + 1, diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/service/txt-chat-gpt/txt-chat-gpt.service.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/service/txt-chat-gpt/txt-chat-gpt.service.ts index dac49df..6a1e8dd 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/service/txt-chat-gpt/txt-chat-gpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/service/txt-chat-gpt/txt-chat-gpt.service.ts @@ -51,7 +51,7 @@ export class TXTChatGptService extends BaseFeatureChatGPTService { this.asgardLogger.log(`percentage: ${formatted}`); await delay(Math.random() * 500 + 256); }) - .process(async (content, index, pool) => { + .process(async (content, index) => { const summary = await this.getTXTSummary(content, { user, partNumber: index + 1, diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/service/url-chat-gpt/url-chat-gpt.service.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/service/url-chat-gpt/url-chat-gpt.service.ts index 6d29de1..bed259c 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/service/url-chat-gpt/url-chat-gpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/service/url-chat-gpt/url-chat-gpt.service.ts @@ -50,7 +50,7 @@ export class URLChatGPTService extends BaseFeatureChatGPTService { this.asgardLogger.log(`percentage: ${formatted}`); await delay(Math.random() * 500 + 256); }) - .process(async (content, index, pool) => { + .process(async (content, index) => { const summary = await this.getURLSummary(content, { title, user, diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/service/yt-chat-gpt/yt-chat-gpt.service.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/service/yt-chat-gpt/yt-chat-gpt.service.ts index 9a8e384..c1ecb3c 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/service/yt-chat-gpt/yt-chat-gpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/service/yt-chat-gpt/yt-chat-gpt.service.ts @@ -1,4 +1,4 @@ -import { Injectable, Scope } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { ChatGPTGateWayService } from '../../../services/chatgpt-gateway-service/chatgpt.service'; import PromisePool from '@supercharge/promise-pool/dist'; import { splitAudioFile } from '@asgard-hub/utils'; @@ -83,7 +83,7 @@ export class YTChatGPTService extends BaseFeatureChatGPTService this.asgardLogger.log(`percentage: ${formatted}`); await delay(Math.random() * 500 + 256); }) - .process(async (path, index, pool) => { + .process(async (path, index) => { const { summary, transcription } = await this.getYoutubeSummary( path, { diff --git a/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts b/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts index 35daceb..b554027 100644 --- a/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts +++ b/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts @@ -6,11 +6,17 @@ export interface IAzureOpenAIConfig { apiKey: string; endpoint: string; deploymentName: string; + instanceName: string; + apiVersion: string; + modelName: string; } export const azureOpenAIConfig = registerAs(ConfigPath.AzureOpenAI, () => ({ - enable: process.env.AZURE_OPENAI_ENABLE ? true : false, - apiKey: process.env.AZURE_OPENAI_API_KEY, - endpoint: process.env.AZURE_OPENAI_ENDPOINT, - deploymentName: process.env.AZURE_OPENAI_DEPLOYMENT_NAME, + enable: process.env.H_AZURE_OPENAI_ENABLE === 'true' ? true : false, + apiKey: process.env.H_AZURE_OPENAI_API_KEY, + endpoint: process.env.H_AZURE_OPENAI_ENDPOINT, + deploymentName: process.env.H_AZURE_OPENAI_DEPLOYMENT_NAME, + instanceName: process.env.H_AZURE_OPENAI_INSTANCE_NAME, + apiVersion: process.env.H_AZURE_OPENAI_API_VERSION, + modelName: process.env.H_AZURE_OPENAI_MODEL_NAME, })); diff --git a/apps/yggdrasil-core-engine/src/app/config/open.ai.config.ts b/apps/yggdrasil-core-engine/src/app/config/open.ai.config.ts index 1dbf843..dfca69a 100644 --- a/apps/yggdrasil-core-engine/src/app/config/open.ai.config.ts +++ b/apps/yggdrasil-core-engine/src/app/config/open.ai.config.ts @@ -3,8 +3,11 @@ import { ConfigPath } from './app.config'; export interface IOpenAIConfig { apiKey: string; + modelName?: string; + tokenLimit?: number; } export const openAIConfig = registerAs(ConfigPath.OpenAI, () => ({ apiKey: process.env.OPENAI_API_KEY, + modelName: 'gpt-3.5-turbo-16k-0613', })); diff --git a/apps/yggdrasil-core-engine/src/app/controllers/chatgpt.controller.ts b/apps/yggdrasil-core-engine/src/app/controllers/chatgpt.controller.ts index fcc06be..4c07fba 100644 --- a/apps/yggdrasil-core-engine/src/app/controllers/chatgpt.controller.ts +++ b/apps/yggdrasil-core-engine/src/app/controllers/chatgpt.controller.ts @@ -1,4 +1,4 @@ -import { Metadata, ServerUnaryCall } from '@grpc/grpc-js'; +import { Metadata } from '@grpc/grpc-js'; import { Controller, UseGuards } from '@nestjs/common'; import { GrpcMethod } from '@nestjs/microservices'; import { AuthGuard } from '../auth/auth.guard'; @@ -35,11 +35,7 @@ export class ChatGPTController { @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService') - generalMessages( - data: GeneralMessagesOptions, - metadata: Metadata, - call: ServerUnaryCall - ) { + generalMessages(data: GeneralMessagesOptions) { const result = this.service.generalMessages( data.chant as ChatGPTChant, data.customPrompt @@ -51,11 +47,7 @@ export class ChatGPTController { @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchGgtResponse') - fetchGptResponse( - data: GPTResponseOptions, - metadata: Metadata, - call: ServerUnaryCall - ) { + fetchGptResponse(data: GPTResponseOptions, metadata: Metadata) { const fromMetaData = (metadata.get('azure-service') ?? [])[0] ?? false; const isUseAzure = fromMetaData === 'true'; const temperature = data?.temperature ?? 1; @@ -75,11 +67,7 @@ export class ChatGPTController { @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchGgtResponseStream') - fetchGptResponseStream( - data: GPTResponseOptions, - metadata: Metadata, - call: ServerUnaryCall - ) { + fetchGptResponseStream(data: GPTResponseOptions, metadata: Metadata) { const fromMetaData = (metadata.get('azure-service') ?? [])[0] ?? false; const isUseAzure = fromMetaData === 'true'; const temperature = data?.temperature ?? 1; @@ -99,11 +87,7 @@ export class ChatGPTController { @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'GetCompletionResponse') - async getCompletionResponse( - data: CompletionResponseOptions, - metadata: Metadata, - call: ServerUnaryCall - ) { + async getCompletionResponse(data: CompletionResponseOptions) { const result = await this.service.getCompletionResponse( data.prompt, data.model @@ -114,11 +98,7 @@ export class ChatGPTController { // fetch Youtube Summary @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchYoutubeSummary') - async fetchYoutubeSummaryWithGPT( - data: YTSummaryOptions, - metadata: Metadata, - call: ServerUnaryCall - ) { + async fetchYoutubeSummaryWithGPT(data: YTSummaryOptions) { const result = await this.gatewayService .getFeatureService(GatewayFeature.YT) .fetchSummaryWithGPT(data); @@ -130,11 +110,7 @@ export class ChatGPTController { // fetch Docs Summary @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchUrlDocSummary') - async fetchPDFSummaryWithGPT( - data: URLDocSummaryOptions, - metadata: Metadata, - call: ServerUnaryCall - ) { + async fetchPDFSummaryWithGPT(data: URLDocSummaryOptions) { let result = []; switch (data.dataSourceType) { @@ -170,11 +146,7 @@ export class ChatGPTController { // fetch audio transcription @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchAudioTranscription') - async fetchAudioTranscription( - data: AudioChatOptions, - metadata: Metadata, - call: ServerUnaryCall - ) { + async fetchAudioTranscription(data: AudioChatOptions) { const result = await this.gatewayService .getFeatureService(GatewayFeature.Audio) .fetchDataByDataSourceUrl(data); diff --git a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/audio-adapter.ts b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/audio-adapter.ts index 64fa10c..2f55364 100644 --- a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/audio-adapter.ts +++ b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/audio-adapter.ts @@ -1,7 +1,7 @@ import { CreateTranscriptionResponse } from 'openai'; import { BaseDataSourceAdapter } from './interface/data-source-adapter.interface'; import { DataSourceType } from './interface/data-source-type.enum'; -import { Inject, Injectable, Scope } from '@nestjs/common'; +import { Inject, Injectable } from '@nestjs/common'; import { DownloadFileType, DownloadService, @@ -31,8 +31,7 @@ export class AudioAdapter extends BaseDataSourceAdapter { } async getDataFromPath( - path: string, - url?: string + path: string ): Promise { // call chatgpt service to get transcription const transcription = await this.chatGPTService.getTranscriptionResponse( diff --git a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/interface/data-source-adapter.interface.ts b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/interface/data-source-adapter.interface.ts index 3506285..8401430 100644 --- a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/interface/data-source-adapter.interface.ts +++ b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/interface/data-source-adapter.interface.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ export interface IDataSourceAdapter { getData(url: string): Promise; getDataFromPath(path: string, asExtension: string): Promise; diff --git a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/pdf-adapter.ts b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/pdf-adapter.ts index 64f3963..410e9a7 100644 --- a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/pdf-adapter.ts +++ b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/pdf-adapter.ts @@ -1,4 +1,4 @@ -import { Inject, Injectable, Scope } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { DownloadService } from '../../services/download-service/download-service.service'; import { BaseDataSourceAdapter } from './interface/data-source-adapter.interface'; import { DataSourceType } from './interface/data-source-type.enum'; diff --git a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/txt-adapter.ts b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/txt-adapter.ts index 1ebd20a..b6c9be1 100644 --- a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/txt-adapter.ts +++ b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/txt-adapter.ts @@ -1,7 +1,7 @@ import { BaseDataSourceAdapter } from './interface/data-source-adapter.interface'; import { DataSourceType } from './interface/data-source-type.enum'; import { DownloadService } from '../../services/download-service/download-service.service'; -import { Inject, Injectable, Scope } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; @Injectable() export class TXTAdapter extends BaseDataSourceAdapter { diff --git a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/url-adapter.ts b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/url-adapter.ts index db48d32..1e28787 100644 --- a/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/url-adapter.ts +++ b/apps/yggdrasil-core-engine/src/app/data-source-adapter/adapter/url-adapter.ts @@ -1,10 +1,8 @@ -import { HttpService } from '@nestjs/axios'; import { BaseDataSourceAdapter } from './interface/data-source-adapter.interface'; import { DataSourceType } from './interface/data-source-type.enum'; -import { lastValueFrom } from 'rxjs'; import * as cheerio from 'cheerio'; import { DownloadService } from '../../services/download-service/download-service.service'; -import { Inject, Injectable, Scope } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; export interface URLData { title: string; diff --git a/apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.spec.ts b/apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.spec.ts new file mode 100644 index 0000000..c6ff4c8 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.spec.ts @@ -0,0 +1,45 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { OpenAIProvider } from './open-ai'; +import { ConfigService } from '@nestjs/config'; + +export class MockOpenAIProvider { + getMock() { + return { + fetchChatOpenAIInput: jest.fn().mockImplementation(() => { + return { + temperature: 0, + openAIApiKey: '123', + modelName: '123', + }; + }), + }; + } +} + +describe('OpenAi', () => { + let provider: OpenAIProvider; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + { + provide: ConfigService, + useValue: { + get: jest.fn().mockImplementation(() => { + return { + apiKey: '123', + }; + }), + }, + }, + OpenAIProvider, + ], + }).compile(); + + provider = module.get(OpenAIProvider); + }); + + it('should be defined', () => { + expect(provider).toBeDefined(); + }); +}); diff --git a/apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.ts b/apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.ts new file mode 100644 index 0000000..6c29a11 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/provider/open-ai/open-ai.ts @@ -0,0 +1,47 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { ConfigPath } from '../../config/app.config'; +import { IAzureOpenAIConfig } from '../../config/azure.openai.config'; +import { NestLangChainAIChatOAuth } from '@sd0x/nest-langchain'; +import { IOpenAIConfig } from '../../config/open.ai.config'; + +@Injectable() +export class OpenAIProvider { + @Inject() + private readonly configService: ConfigService; + + fetchChatOpenAIInput(temperature = 0): NestLangChainAIChatOAuth { + const openAIConfig = this.configService.get( + ConfigPath.OpenAI + ); + + const azureOpenAIConfig = this.configService.get( + ConfigPath.AzureOpenAI + ); + + // NOTE: 我們目前預設使用 Azure OpenAI GPT-3.5 Turbo 0613 版本,因為提供了 functions 的功能。 + if (azureOpenAIConfig.enable) { + // Current API Version: 2023-07-01-preview + return { + temperature, + azureOpenAIApiKey: azureOpenAIConfig.apiKey, + azureOpenAIApiDeploymentName: azureOpenAIConfig.deploymentName, + azureOpenAIApiInstanceName: azureOpenAIConfig.instanceName, + azureOpenAIApiVersion: azureOpenAIConfig.apiVersion, + }; + } else { + return { + temperature, + openAIApiKey: openAIConfig.apiKey, + modelName: openAIConfig.modelName, + }; + } + } + + get openAIApiKey(): string { + const openAIConfig = this.configService.get( + ConfigPath.OpenAI + ); + return openAIConfig.apiKey; + } +} diff --git a/apps/yggdrasil-core-engine/src/app/provider/provider.module.ts b/apps/yggdrasil-core-engine/src/app/provider/provider.module.ts new file mode 100644 index 0000000..b7d6fcf --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/provider/provider.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { OpenAIProvider } from './open-ai/open-ai'; + +@Module({ + providers: [OpenAIProvider], + exports: [OpenAIProvider], +}) +export class ProviderModule {} diff --git a/apps/yggdrasil-core-engine/src/app/services/service.module.ts b/apps/yggdrasil-core-engine/src/app/services/service.module.ts index d3b50a8..e6b75dd 100644 --- a/apps/yggdrasil-core-engine/src/app/services/service.module.ts +++ b/apps/yggdrasil-core-engine/src/app/services/service.module.ts @@ -12,8 +12,11 @@ import { NestWinstonModule } from '@asgard-hub/nest-winston'; import { IAppConfig, ConfigPath } from '../config/app.config'; import { isDev, isStaging, isProd } from '../constants/common.constant'; import { NestOpenAIClientModule } from '@sd0x/nest-openai-client'; +import { NestLangChainModule } from '@sd0x/nest-langchain'; import { IAzureOpenAIConfig } from '../config/azure.openai.config'; import { IOpenAIConfig } from '../config/open.ai.config'; +import { OpenAIProvider } from '../provider/open-ai/open-ai'; +import { ProviderModule } from '../provider/provider.module'; @Global() @Module({ @@ -38,6 +41,18 @@ import { IOpenAIConfig } from '../config/open.ai.config'; }), inject: [ConfigService], }), + NestLangChainModule.registerAsync({ + imports: [ProviderModule], + useFactory: (openAIProvider: OpenAIProvider) => ({ + runtime: { + isDev, + isStaging, + isProd, + }, + langChainAIChatOAuth: openAIProvider.fetchChatOpenAIInput(), + }), + inject: [OpenAIProvider], + }), NestWinstonModule.registerAsync({ useFactory: (configService: ConfigService) => ({ runtime: { diff --git a/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.spec.ts b/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.spec.ts index fab5dd1..3d29efe 100644 --- a/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.spec.ts +++ b/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.spec.ts @@ -1,4 +1,3 @@ -import { Test, TestingModule } from '@nestjs/testing'; import { YoutubeDlService } from './youtube-dl.service'; describe('YoutubeDlService', () => { diff --git a/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.ts b/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.ts index 0924879..92c71a4 100644 --- a/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.ts +++ b/apps/yggdrasil-core-engine/src/app/services/youtube-dl/youtube-dl.service.ts @@ -1,9 +1,7 @@ import { Injectable, Scope } from '@nestjs/common'; import { randomUUID } from 'crypto'; -import { join, dirname, basename, extname } from 'path'; -import * as fs from 'fs'; +import { join } from 'path'; import { exec } from 'youtube-dl-exec'; -import { OnEvent } from '@nestjs/event-emitter'; export interface DownloadAudioEvent { audioFilePath: string; diff --git a/apps/yggdrasil-core-engine/src/app/services/youtube-record/youtube-record.service.spec.ts b/apps/yggdrasil-core-engine/src/app/services/youtube-record/youtube-record.service.spec.ts index c0280e9..be852a5 100644 --- a/apps/yggdrasil-core-engine/src/app/services/youtube-record/youtube-record.service.spec.ts +++ b/apps/yggdrasil-core-engine/src/app/services/youtube-record/youtube-record.service.spec.ts @@ -1,10 +1,6 @@ -import { Test, TestingModule } from '@nestjs/testing'; import { YoutubeRecordService } from './youtube-record.service'; -import { ModuleMocker, MockFunctionMetadata } from 'jest-mock'; import { YTRecord } from '../../mongo/schemas/yt.record.schema'; -const moduleMocker = new ModuleMocker(global); - describe('YoutubeRecordService', () => { it('test_create_record_successfully', async () => { // Arrange diff --git a/docker-compose.yml b/docker-compose.yml index b6883fe..2cab0c3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,11 @@ version: '3.5' services: + mongodb: + image: mongo:6.0 + ports: ['27017:27017'] + volumes: + - './docker-data/mongodb-data:/data/db' redis: image: redis:4 ports: ['6379:6379'] diff --git a/libs/nest-langchain/.eslintrc.json b/libs/nest-langchain/.eslintrc.json new file mode 100644 index 0000000..adbe7ae --- /dev/null +++ b/libs/nest-langchain/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.json"], + "parser": "jsonc-eslint-parser", + "rules": { + "@nx/dependency-checks": "error" + } + } + ] +} diff --git a/libs/nest-langchain/README.md b/libs/nest-langchain/README.md new file mode 100644 index 0000000..0e39009 --- /dev/null +++ b/libs/nest-langchain/README.md @@ -0,0 +1,11 @@ +# nest-langchain + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build nest-langchain` to build the library. + +## Running unit tests + +Run `nx test nest-langchain` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/nest-langchain/jest.config.ts b/libs/nest-langchain/jest.config.ts new file mode 100644 index 0000000..85f621a --- /dev/null +++ b/libs/nest-langchain/jest.config.ts @@ -0,0 +1,11 @@ +/* eslint-disable */ +export default { + displayName: 'nest-langchain', + preset: '../../jest.preset.js', + testEnvironment: 'node', + transform: { + '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../coverage/libs/nest-langchain', +}; diff --git a/libs/nest-langchain/package.json b/libs/nest-langchain/package.json new file mode 100644 index 0000000..5c5227b --- /dev/null +++ b/libs/nest-langchain/package.json @@ -0,0 +1,10 @@ +{ + "name": "@sd0x/nest-langchain", + "version": "0.0.1", + "dependencies": { + "tslib": "^2.3.0" + }, + "type": "commonjs", + "main": "./src/index.js", + "typings": "./src/index.d.ts" +} diff --git a/libs/nest-langchain/project.json b/libs/nest-langchain/project.json new file mode 100644 index 0000000..dd81ccd --- /dev/null +++ b/libs/nest-langchain/project.json @@ -0,0 +1,48 @@ +{ + "name": "nest-langchain", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/nest-langchain/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/libs/nest-langchain", + "tsConfig": "libs/nest-langchain/tsconfig.lib.json", + "packageJson": "libs/nest-langchain/package.json", + "main": "libs/nest-langchain/src/index.ts", + "assets": ["libs/nest-langchain/*.md"] + } + }, + "publish": { + "command": "node tools/scripts/publish.mjs nest-langchain {args.ver} {args.tag}", + "dependsOn": ["build"] + }, + "lint": { + "executor": "@nx/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "libs/nest-langchain/**/*.ts", + "libs/nest-langchain/package.json" + ] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/nest-langchain/jest.config.ts", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + } + }, + "tags": [] +} diff --git a/libs/nest-langchain/src/index.ts b/libs/nest-langchain/src/index.ts new file mode 100644 index 0000000..c6b73e7 --- /dev/null +++ b/libs/nest-langchain/src/index.ts @@ -0,0 +1,3 @@ +export * from './lib/nest-langchain.service'; +export * from './lib/nest-langchain.module'; +export * from './lib/interface'; diff --git a/libs/nest-langchain/src/lib/constants/nest.openai.client.constants.ts b/libs/nest-langchain/src/lib/constants/nest.openai.client.constants.ts new file mode 100644 index 0000000..bdb7673 --- /dev/null +++ b/libs/nest-langchain/src/lib/constants/nest.openai.client.constants.ts @@ -0,0 +1,2 @@ +export const NEST_LANGCHAIN_MODULE_ID = 'NEST_LANGCHAIN_MODULE_ID'; +export const NEST_LANGCHAIN_MODULE_OPTIONS = 'NEST_LANGCHAIN_MODULE_OPTIONS'; diff --git a/libs/nest-langchain/src/lib/interface/index.ts b/libs/nest-langchain/src/lib/interface/index.ts new file mode 100644 index 0000000..dbcc94f --- /dev/null +++ b/libs/nest-langchain/src/lib/interface/index.ts @@ -0,0 +1,2 @@ +export * from './nest.langchain-module'; +export * from './nest.langchain-options.interface'; diff --git a/libs/nest-langchain/src/lib/interface/nest.langchain-module.ts b/libs/nest-langchain/src/lib/interface/nest.langchain-module.ts new file mode 100644 index 0000000..d5e1db2 --- /dev/null +++ b/libs/nest-langchain/src/lib/interface/nest.langchain-module.ts @@ -0,0 +1,48 @@ +import { ModuleMetadata, Type } from '@nestjs/common'; +import { BaseChatModelParams } from 'langchain/dist/chat_models/base'; +import { + OpenAIChatInput, + AzureOpenAIInput, +} from 'langchain/chat_models/openai'; + +export class NestLangchainRuntime { + isDev = false; + isStaging = false; + isProd = true; +} + +export type NestLangChainAIChatOAuth = Partial & + Partial & + BaseChatModelParams & { + concurrency?: number; + cache?: boolean; + openAIApiKey?: string; + }; + +export interface NestLangchainOptions extends Record { + runtime?: NestLangchainRuntime; + langChainAIChatOAuth?: NestLangChainAIChatOAuth; +} + +export type NestLangchainModuleOptions = NestLangchainOptions; + +export interface NestLangchainOptionsFactory { + createNestLangchainOptions(): + | Promise + | NestLangchainModuleOptions; +} + +export type NestLangchainModuleFactoryOptions = Omit< + NestLangchainOptions, + 'clientName' +>; + +export interface NestLangchainModuleAsyncOptions + extends Pick { + useExisting?: Type; + useClass?: Type; + useFactory?: ( + ...args: any[] + ) => Promise | NestLangchainModuleOptions; + inject?: any[]; +} diff --git a/libs/nest-langchain/src/lib/interface/nest.langchain-options.interface.ts b/libs/nest-langchain/src/lib/interface/nest.langchain-options.interface.ts new file mode 100644 index 0000000..6f983db --- /dev/null +++ b/libs/nest-langchain/src/lib/interface/nest.langchain-options.interface.ts @@ -0,0 +1,3 @@ +export enum NestLangchainOptionsSupplement { + 'NEST_LANGCHAIN_SERVICE' = 'NEST_LANGCHAIN_SERVICE', +} diff --git a/libs/nest-langchain/src/lib/nest-langchain.module.ts b/libs/nest-langchain/src/lib/nest-langchain.module.ts new file mode 100644 index 0000000..ba28670 --- /dev/null +++ b/libs/nest-langchain/src/lib/nest-langchain.module.ts @@ -0,0 +1,95 @@ +import { DynamicModule, Module, Provider, Type } from '@nestjs/common'; +import { NestLangchainService } from './nest-langchain.service'; +import { + NEST_LANGCHAIN_MODULE_ID, + NEST_LANGCHAIN_MODULE_OPTIONS, +} from './constants/nest.openai.client.constants'; +import { + NestLangchainModuleAsyncOptions, + NestLangchainOptionsFactory, +} from './interface/nest.langchain-module'; +import { NestLangchainOptionsSupplement } from './interface/nest.langchain-options.interface'; +import { randomStringGenerator } from '../utils/utils'; + +@Module({ + controllers: [], + providers: [NestLangchainService], + exports: [NestLangchainService], +}) +export class NestLangChainModule { + static forRoot() { + return { + module: NestLangChainModule, + providers: [NestLangchainService], + exports: [NestLangchainService], + }; + } + + static async registerAsync( + options: NestLangchainModuleAsyncOptions + ): Promise { + const createProviders = this.createAsyncProviders(options); + return { + module: NestLangChainModule, + imports: [...(options?.imports ?? [])], + providers: [ + ...createProviders, + { + provide: NEST_LANGCHAIN_MODULE_ID, + useValue: randomStringGenerator(), + }, + { + provide: NestLangchainOptionsSupplement.NEST_LANGCHAIN_SERVICE, + useClass: NestLangchainService, + }, + ], + exports: [ + NEST_LANGCHAIN_MODULE_ID, + NEST_LANGCHAIN_MODULE_OPTIONS, + NestLangchainOptionsSupplement.NEST_LANGCHAIN_SERVICE, + ], + }; + } + + private static createAsyncProviders( + options: NestLangchainModuleAsyncOptions + ): Provider[] { + if (options.useExisting || options.useFactory) { + return [this.createAsyncOptionsProvider(options)]; + } + + const useClass = options.useClass as Type; + + return [ + this.createAsyncOptionsProvider(options), + { + provide: useClass, + useClass: useClass, + }, + ]; + } + + private static createAsyncOptionsProvider( + options: NestLangchainModuleAsyncOptions + ): Provider { + if (options.useFactory) { + return { + provide: NEST_LANGCHAIN_MODULE_OPTIONS, + useFactory: options.useFactory, + inject: options.inject || [], + }; + } + + const inject = [ + (options.useClass || + options.useExisting) as Type, + ]; + + return { + provide: NEST_LANGCHAIN_MODULE_OPTIONS, + useFactory: async (optionsFactory: NestLangchainOptionsFactory) => + optionsFactory.createNestLangchainOptions(), + inject, + }; + } +} diff --git a/libs/nest-langchain/src/lib/nest-langchain.service.spec.ts b/libs/nest-langchain/src/lib/nest-langchain.service.spec.ts new file mode 100644 index 0000000..ea9abf4 --- /dev/null +++ b/libs/nest-langchain/src/lib/nest-langchain.service.spec.ts @@ -0,0 +1,18 @@ +import { Test } from '@nestjs/testing'; +import { NestLangchainService } from './nest-langchain.service'; + +describe('NestLangchainService', () => { + let service: NestLangchainService; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + providers: [NestLangchainService], + }).compile(); + + service = module.get(NestLangchainService); + }); + + it('should be defined', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/libs/nest-langchain/src/lib/nest-langchain.service.ts b/libs/nest-langchain/src/lib/nest-langchain.service.ts new file mode 100644 index 0000000..67f2790 --- /dev/null +++ b/libs/nest-langchain/src/lib/nest-langchain.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class NestLangchainService {} diff --git a/libs/nest-langchain/src/utils/utils.ts b/libs/nest-langchain/src/utils/utils.ts new file mode 100644 index 0000000..7e39be7 --- /dev/null +++ b/libs/nest-langchain/src/utils/utils.ts @@ -0,0 +1,3 @@ +import { uid } from 'uid'; + +export const randomStringGenerator = () => uid(21); diff --git a/libs/nest-langchain/tsconfig.json b/libs/nest-langchain/tsconfig.json new file mode 100644 index 0000000..f5b8565 --- /dev/null +++ b/libs/nest-langchain/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/libs/nest-langchain/tsconfig.lib.json b/libs/nest-langchain/tsconfig.lib.json new file mode 100644 index 0000000..c297a24 --- /dev/null +++ b/libs/nest-langchain/tsconfig.lib.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"], + "target": "es2021", + "strictNullChecks": true, + "noImplicitAny": true, + "strictBindCallApply": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/libs/nest-langchain/tsconfig.spec.json b/libs/nest-langchain/tsconfig.spec.json new file mode 100644 index 0000000..9b2a121 --- /dev/null +++ b/libs/nest-langchain/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/libs/nest-openai-client/tsconfig.lib.json b/libs/nest-openai-client/tsconfig.lib.json index 1eb40b5..c297a24 100644 --- a/libs/nest-openai-client/tsconfig.lib.json +++ b/libs/nest-openai-client/tsconfig.lib.json @@ -4,7 +4,7 @@ "outDir": "../../dist/out-tsc", "declaration": true, "types": ["node"], - "target": "es6", + "target": "es2021", "strictNullChecks": true, "noImplicitAny": true, "strictBindCallApply": true, diff --git a/package.json b/package.json index 823bc43..5235183 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,10 @@ "prettier": "^2.6.2", "ts-jest": "^29.1.0", "ts-node": "10.9.1", - "typescript": "5.1.6" + "typescript": "5.1.6", + "verdaccio": "^5.0.4" + }, + "nx": { + "includedScripts": [] } } diff --git a/project.json b/project.json new file mode 100644 index 0000000..3127d30 --- /dev/null +++ b/project.json @@ -0,0 +1,14 @@ +{ + "name": "@asgard-hub/source", + "$schema": "node_modules/nx/schemas/project-schema.json", + "targets": { + "local-registry": { + "executor": "@nx/js:verdaccio", + "options": { + "port": 4873, + "config": ".verdaccio/config.yml", + "storage": "tmp/local-registry/storage" + } + } + } +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 49c506c..643b94f 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -17,6 +17,7 @@ "paths": { "@asgard-hub/nest-winston": ["libs/nest-winston/src/index.ts"], "@asgard-hub/utils": ["libs/utils/src/index.ts"], + "@sd0x/nest-langchain": ["libs/nest-langchain/src/index.ts"], "@sd0x/nest-openai-client": ["libs/nest-openai-client/src/index.ts"] } }, From c1653e37a4b430ce610856d16516ca9f24ec09e4 Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 19 Aug 2023 13:37:28 +0800 Subject: [PATCH 02/13] feat(ci): add push nest-langchain package --- .github/workflows/release.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3060145..777a254 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,10 +13,17 @@ jobs: with: node-version: '18.x' registry-url: 'https://registry.npmjs.org' - - name: Install dependencies, build and publish 🔧 + - name: Install dependencies, build 🔧 and publish 🚀 nest-openai-client env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: | npm ci npx nx run nest-openai-client:build npx nx run nest-openai-client:publish --ver=${{ github.event.release.tag_name }} --tag=latest + - name: Install dependencies, build 🔧 and publish 🚀 nest-langchain:build + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + npm ci + npx nx run nest-langchain:build + npx nx run nest-langchain:publish --ver=${{ github.event.release.tag_name }} --tag=latest From 3d84a6f0e15e01a04e9723c69867cc6a9904d9a7 Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 19 Aug 2023 13:43:05 +0800 Subject: [PATCH 03/13] fix(doc): add doc --- README.md | 1 + libs/nest-langchain/README.md | 57 ++++++++++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3428cb3..97d298a 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ you can use grpc, restful, etc. to communicate with the micro-service. and we ha ## Packages - [Nest.js OpenAI Client Package](https://www.npmjs.com/package/@sd0x/nest-openai-client/) +- [Nest.js LangChain Package](https://www.npmjs.com/package/@sd0x/nest-langchain/) ## TODO diff --git a/libs/nest-langchain/README.md b/libs/nest-langchain/README.md index 0e39009..5c9a490 100644 --- a/libs/nest-langchain/README.md +++ b/libs/nest-langchain/README.md @@ -1,11 +1,58 @@ # nest-langchain -This library was generated with [Nx](https://nx.dev). +This is a client for the [LangChain.js](https://github.com/hwchase17/langchainjs) library. -## Building +[x] OpenAI API +[x] Azure OpenAI API -Run `nx build nest-langchain` to build the library. +## Installation -## Running unit tests +```bash +npm install @sd0x/nest-langchain +``` -Run `nx test nest-langchain` to execute the unit tests via [Jest](https://jestjs.io). +## Usage + +```typescript +import { NestLangChainModule } from '@sd0x/nest-langchain'; +... +NestLangChainModule.registerAsync({ + imports: [ProviderModule], + useFactory: (openAIProvider: OpenAIProvider) => ({ + runtime: { + isDev, + isStaging, + isProd, + }, + langChainAIChatOAuth: openAIProvider.fetchChatOpenAIInput(), + }), + inject: [OpenAIProvider], + }), + +// OpenAIProvider +fetchChatOpenAIInput(temperature = 0): NestLangChainAIChatOAuth { + const openAIConfig = this.configService.get( + ConfigPath.OpenAI + ); + + const azureOpenAIConfig = this.configService.get( + ConfigPath.AzureOpenAI + ); + + if (azureOpenAIConfig.enable) { + return { + temperature, + azureOpenAIApiKey: azureOpenAIConfig.apiKey, + azureOpenAIApiDeploymentName: azureOpenAIConfig.deploymentName, + azureOpenAIApiInstanceName: azureOpenAIConfig.instanceName, + azureOpenAIApiVersion: azureOpenAIConfig.apiVersion, + }; + } else { + return { + temperature, + openAIApiKey: openAIConfig.apiKey, + modelName: openAIConfig.modelName, + }; + } + } +``` From 02ceaf89bc4c9e5d0897446566d43a8535c8fcea Mon Sep 17 00:00:00 2001 From: sd0 Date: Sun, 20 Aug 2023 00:11:33 +0800 Subject: [PATCH 04/13] feat(langchain): Integration LangChain --- apps/yggdrasil-core-engine/.env.local.example | 2 +- .../prompt/translate-to-english.prompt.ts | 61 + .../src/app/config/azure.openai.config.ts | 14 +- .../chatgpt.service.ts | 2 +- .../lang-chain/lang-chain.service.spec.ts | 18 + .../services/lang-chain/lang-chain.service.ts | 38 + .../src/app/services/service.module.ts | 4 + .../src/lib/interface/base-prompt.ts | 11 + .../nest-langchain/src/lib/interface/index.ts | 1 + .../src/lib/nest-langchain.module.ts | 2 + .../src/lib/nest-langchain.service.ts | 80 +- .../langchain/langchain.provider.spec.ts | 42 + .../provider/langchain/langchain.provider.ts | 18 + .../src/lib/provider/provider.module.ts | 8 + libs/nest-winston/src/index.ts | 1 + libs/nest-winston/src/interface/index.ts | 2 + .../nest-winston-options.interface.ts | 3 +- .../src/lib/nest-winston.module.ts | 6 +- package-lock.json | 1919 +++++++++++++++-- package.json | 2 + 20 files changed, 2075 insertions(+), 159 deletions(-) create mode 100644 apps/yggdrasil-core-engine/src/app/chatgpt/prompt/translate-to-english.prompt.ts create mode 100644 apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.spec.ts create mode 100644 apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.ts create mode 100644 libs/nest-langchain/src/lib/interface/base-prompt.ts create mode 100644 libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts create mode 100644 libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts create mode 100644 libs/nest-langchain/src/lib/provider/provider.module.ts create mode 100644 libs/nest-winston/src/interface/index.ts diff --git a/apps/yggdrasil-core-engine/.env.local.example b/apps/yggdrasil-core-engine/.env.local.example index 1ece7ec..8ae8a3d 100644 --- a/apps/yggdrasil-core-engine/.env.local.example +++ b/apps/yggdrasil-core-engine/.env.local.example @@ -1,7 +1,7 @@ PACKAGE_NAME=Yggdrasil Core Engine SERVICE_NAME=yggdrasil-core-engine CORE_ENGINE_API_KEY= -CHATGPT_API_KEY= +OPENAI_API_KEY= CHATGPT_ORG= OPENAI_API_TYPE= AZURE_API_BASE_PATH= diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/prompt/translate-to-english.prompt.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/prompt/translate-to-english.prompt.ts new file mode 100644 index 0000000..48b272d --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/prompt/translate-to-english.prompt.ts @@ -0,0 +1,61 @@ +import { BaseLangChainPrompt } from '@sd0x/nest-langchain'; +import { + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +} from 'langchain/prompts'; +import { z } from 'zod'; + +export interface TranslateToEnglishPromptParams { + userInput: string; +} + +export interface TranslateToEnglishPromptResponse { + translationResult: string; +} + +export class TranslateToEnglishPrompt + implements BaseLangChainPrompt +{ + private readonly inputVariables = ['userInput']; + + private readonly systemPrompt = `English translation assistant`; + private readonly prompt = `You are an English translation assistant. Users will provide you with sentences in any language, and you need to translate them into English, paying attention to the tone and wording to ensure smooth language flow. + + Please note that there is no need to provide feedback on the translated content. Just focus on the translation. There is no need to include Input in the answer. + + --- + Let's start translating the content: + {${this.inputVariables[0]}} +`; + + private zodSchema = z.object({ + translationResult: z.string(), + }); + + generatePrompt() { + const prompt = new ChatPromptTemplate({ + promptMessages: [ + SystemMessagePromptTemplate.fromTemplate(this.systemPrompt), + HumanMessagePromptTemplate.fromTemplate(this.prompt), + ], + inputVariables: this.inputVariables, + }); + + return prompt; + } + + getZodSchema() { + return this.zodSchema; + } + + generateInputVariables( + params: TranslateToEnglishPromptParams + ): TranslateToEnglishPromptParams { + const inputVariables = { + userInput: params.userInput, + }; + + return inputVariables; + } +} diff --git a/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts b/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts index b554027..b5b8361 100644 --- a/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts +++ b/apps/yggdrasil-core-engine/src/app/config/azure.openai.config.ts @@ -12,11 +12,11 @@ export interface IAzureOpenAIConfig { } export const azureOpenAIConfig = registerAs(ConfigPath.AzureOpenAI, () => ({ - enable: process.env.H_AZURE_OPENAI_ENABLE === 'true' ? true : false, - apiKey: process.env.H_AZURE_OPENAI_API_KEY, - endpoint: process.env.H_AZURE_OPENAI_ENDPOINT, - deploymentName: process.env.H_AZURE_OPENAI_DEPLOYMENT_NAME, - instanceName: process.env.H_AZURE_OPENAI_INSTANCE_NAME, - apiVersion: process.env.H_AZURE_OPENAI_API_VERSION, - modelName: process.env.H_AZURE_OPENAI_MODEL_NAME, + enable: process.env.A_AZURE_OPENAI_ENABLE === 'true' ? true : false, + apiKey: process.env.A_AZURE_OPENAI_API_KEY, + endpoint: process.env.A_AZURE_OPENAI_ENDPOINT, + deploymentName: process.env.A_AZURE_OPENAI_DEPLOYMENT_NAME, + instanceName: process.env.A_AZURE_OPENAI_INSTANCE_NAME, + apiVersion: process.env.A_AZURE_OPENAI_API_VERSION, + modelName: process.env.A_AZURE_OPENAI_MODEL_NAME, })); diff --git a/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts b/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts index c5a6409..70d1eb0 100644 --- a/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { Inject, Injectable } from '@nestjs/common'; import { ChatGPTChant } from '@asgard-hub/utils'; import { ChatCompletionRequestMessage, diff --git a/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.spec.ts b/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.spec.ts new file mode 100644 index 0000000..f2ba057 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LangChainService } from './lang-chain.service'; + +describe('LangChainService', () => { + let service: LangChainService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [LangChainService], + }).compile(); + + service = module.get(LangChainService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.ts b/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.ts new file mode 100644 index 0000000..36ed310 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.ts @@ -0,0 +1,38 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { + NestLangchainOptionsSupplement, + NestLangchainService, +} from '@sd0x/nest-langchain'; +import { + TranslateToEnglishPrompt, + TranslateToEnglishPromptParams, + TranslateToEnglishPromptResponse, +} from '../../chatgpt/prompt/translate-to-english.prompt'; +import { AsgardLogger, AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; +import { Timeout } from '@nestjs/schedule'; + +@Injectable() +export class LangChainService { + @Inject(NestLangchainOptionsSupplement.NEST_LANGCHAIN_SERVICE) + private readonly nestLangchainService: NestLangchainService; + + @Inject(AsgardLoggerSupplement.LOGGER_HELPER_SERVICE) + private readonly asgardLogger: AsgardLogger; + + @Timeout(1000) + async getFunctionChainResponse() { + const result = await this.nestLangchainService.getFunctionChainResponse< + TranslateToEnglishPromptResponse, + TranslateToEnglishPromptParams + >({ + input: { + userInput: '這是一條測試訊息', + }, + langChainPromptType: TranslateToEnglishPrompt, + }); + + this.asgardLogger.log(result.translationResult); + + return result.translationResult; + } +} diff --git a/apps/yggdrasil-core-engine/src/app/services/service.module.ts b/apps/yggdrasil-core-engine/src/app/services/service.module.ts index e6b75dd..d48e035 100644 --- a/apps/yggdrasil-core-engine/src/app/services/service.module.ts +++ b/apps/yggdrasil-core-engine/src/app/services/service.module.ts @@ -17,10 +17,13 @@ import { IAzureOpenAIConfig } from '../config/azure.openai.config'; import { IOpenAIConfig } from '../config/open.ai.config'; import { OpenAIProvider } from '../provider/open-ai/open-ai'; import { ProviderModule } from '../provider/provider.module'; +import { LangChainService } from './lang-chain/lang-chain.service'; +import { ScheduleModule } from '@nestjs/schedule'; @Global() @Module({ imports: [ + ScheduleModule.forRoot(), NestOpenAIClientModule.registerAsync({ useFactory: (configService: ConfigService) => ({ apiKey: configService.get(ConfigPath.OpenAI).apiKey, @@ -74,6 +77,7 @@ import { ProviderModule } from '../provider/provider.module'; YoutubeRecordService, YoutubeDataService, YAudioTranscriptionService, + LangChainService, ], exports: [ ChatGPTGateWayService, diff --git a/libs/nest-langchain/src/lib/interface/base-prompt.ts b/libs/nest-langchain/src/lib/interface/base-prompt.ts new file mode 100644 index 0000000..741dbc1 --- /dev/null +++ b/libs/nest-langchain/src/lib/interface/base-prompt.ts @@ -0,0 +1,11 @@ +import { ChatOpenAICallOptions } from 'langchain/chat_models/openai'; +import { ChatPromptTemplate } from 'langchain/prompts'; +import { ChainValues } from 'langchain/schema'; +import { z } from 'zod'; +export interface BaseLangChainPrompt< + T extends ChainValues & ChatOpenAICallOptions +> { + generatePrompt(): ChatPromptTemplate; + getZodSchema(): z.AnyZodObject; + generateInputVariables(params?: T): T; +} diff --git a/libs/nest-langchain/src/lib/interface/index.ts b/libs/nest-langchain/src/lib/interface/index.ts index dbcc94f..9f2a9a5 100644 --- a/libs/nest-langchain/src/lib/interface/index.ts +++ b/libs/nest-langchain/src/lib/interface/index.ts @@ -1,2 +1,3 @@ export * from './nest.langchain-module'; export * from './nest.langchain-options.interface'; +export * from './base-prompt'; diff --git a/libs/nest-langchain/src/lib/nest-langchain.module.ts b/libs/nest-langchain/src/lib/nest-langchain.module.ts index ba28670..03a801c 100644 --- a/libs/nest-langchain/src/lib/nest-langchain.module.ts +++ b/libs/nest-langchain/src/lib/nest-langchain.module.ts @@ -10,8 +10,10 @@ import { } from './interface/nest.langchain-module'; import { NestLangchainOptionsSupplement } from './interface/nest.langchain-options.interface'; import { randomStringGenerator } from '../utils/utils'; +import { ProviderModule } from './provider/provider.module'; @Module({ + imports: [ProviderModule], controllers: [], providers: [NestLangchainService], exports: [NestLangchainService], diff --git a/libs/nest-langchain/src/lib/nest-langchain.service.ts b/libs/nest-langchain/src/lib/nest-langchain.service.ts index 67f2790..a681de2 100644 --- a/libs/nest-langchain/src/lib/nest-langchain.service.ts +++ b/libs/nest-langchain/src/lib/nest-langchain.service.ts @@ -1,4 +1,80 @@ -import { Injectable } from '@nestjs/common'; +import { Inject, Injectable } from '@nestjs/common'; +import { + ChatOpenAI, + ChatOpenAICallOptions, +} from 'langchain/chat_models/openai'; +import { NestLangChainAIChatOAuth } from './interface'; +import { ChainValues } from 'langchain/schema'; +import { LangChainProvider } from './provider/langchain/langchain.provider'; +import { Callbacks } from 'langchain/callbacks'; +import { BaseLangChainPrompt } from './interface/base-prompt'; +import { NEST_LANGCHAIN_MODULE_OPTIONS } from './constants/nest.openai.client.constants'; + +export class functionChainOption { + callbacks?: Callbacks; + tags?: string[]; + verbose?: boolean; +} + +export interface NestLangChainParams { + input?: T; + langChainPromptType: { new (): BaseLangChainPrompt }; + options?: functionChainOption; +} + +export interface FunctionChainResponse { + output: T; +} + +function createInstance(type: { + new (): BaseLangChainPrompt; +}): BaseLangChainPrompt { + return new type(); +} @Injectable() -export class NestLangchainService {} +export class NestLangchainService { + @Inject(NEST_LANGCHAIN_MODULE_OPTIONS) + private readonly nestLangChainAIChatOAuth!: NestLangChainAIChatOAuth; + + @Inject() + private readonly langchainProvider!: LangChainProvider; + + async getFunctionChainResponse< + T = ChainValues, + U extends ChainValues & ChatOpenAICallOptions = ChainValues & + ChatOpenAICallOptions + >(params: NestLangChainParams): Promise { + // setup chatOpenAI + const llm = this.getChatOpenAI({ + ...this.nestLangChainAIChatOAuth, + }); + + const langChainPrompt = createInstance(params.langChainPromptType); + + const chain = this.langchainProvider.createStructuredOutputChainFromZod( + langChainPrompt.getZodSchema(), + { + prompt: langChainPrompt.generatePrompt(), + llm, + verbose: params?.options?.verbose ?? false, + tags: params?.options?.tags, + callbacks: params?.options?.callbacks, + } + ); + + const result = (await chain.call( + langChainPrompt.generateInputVariables(params.input) + )) as FunctionChainResponse; + + return { + ...result.output, + }; + } + + getChatOpenAI(params: NestLangChainAIChatOAuth) { + return new ChatOpenAI({ + ...params, + }); + } +} diff --git a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts new file mode 100644 index 0000000..66068c7 --- /dev/null +++ b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts @@ -0,0 +1,42 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LangChainProvider } from './langchain.provider'; +import { HahowNestWinstonOptionsSupplement } from '@hahowise-ai/hahow-nest-winston'; +import { MockHahowNestLoggerService } from '../../mock/mock-hahow-nest-logger.service.spec'; + +describe('Langchain', () => { + let provider: LangChainProvider; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + { + provide: HahowNestWinstonOptionsSupplement.HAHOW_LOGGER_SERVICE, + useValue: new MockHahowNestLoggerService(), + }, + LangChainProvider, + ], + }).compile(); + + provider = await module.resolve(LangChainProvider); + }); + + it('should be defined', () => { + expect(provider).toBeDefined(); + }); +}); + +export class MockLangChainProvider { + createStructuredOutputChainFromZod() { + return jest.fn().mockImplementation(() => ({ + run: jest.fn().mockImplementation(() => ({ + output: 'output', + })), + })); + } + + createHahowiseCallbackHandler() { + return { + fetchCalledToolRecord: jest.fn().mockImplementation(() => []), + }; + } +} diff --git a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts new file mode 100644 index 0000000..0b95181 --- /dev/null +++ b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts @@ -0,0 +1,18 @@ +import { Injectable, Scope } from '@nestjs/common'; +import { + StructuredOutputChainInput, + createStructuredOutputChainFromZod, +} from 'langchain/chains/openai_functions'; +import { ChatOpenAI } from 'langchain/chat_models/openai'; +import { LLMChain } from 'langchain/dist'; +import { z } from 'zod'; + +@Injectable() +export class LangChainProvider { + createStructuredOutputChainFromZod( + zodSchema: T, + input: Omit + ): LLMChain { + return createStructuredOutputChainFromZod(zodSchema, input); + } +} diff --git a/libs/nest-langchain/src/lib/provider/provider.module.ts b/libs/nest-langchain/src/lib/provider/provider.module.ts new file mode 100644 index 0000000..22fa1fc --- /dev/null +++ b/libs/nest-langchain/src/lib/provider/provider.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { LangChainProvider } from './langchain/langchain.provider'; + +@Module({ + providers: [LangChainProvider], + exports: [LangChainProvider], +}) +export class ProviderModule {} diff --git a/libs/nest-winston/src/index.ts b/libs/nest-winston/src/index.ts index cfac54d..aa5e199 100644 --- a/libs/nest-winston/src/index.ts +++ b/libs/nest-winston/src/index.ts @@ -1,2 +1,3 @@ export * from './lib/nest-winston.module'; export * from './lib/logger.service'; +export * from './interface'; diff --git a/libs/nest-winston/src/interface/index.ts b/libs/nest-winston/src/interface/index.ts new file mode 100644 index 0000000..ab7e0ab --- /dev/null +++ b/libs/nest-winston/src/interface/index.ts @@ -0,0 +1,2 @@ +export * from './nest-winston-module'; +export * from './nest-winston-options.interface'; diff --git a/libs/nest-winston/src/interface/nest-winston-options.interface.ts b/libs/nest-winston/src/interface/nest-winston-options.interface.ts index 86788c6..235b42e 100644 --- a/libs/nest-winston/src/interface/nest-winston-options.interface.ts +++ b/libs/nest-winston/src/interface/nest-winston-options.interface.ts @@ -1,4 +1,3 @@ -export enum NestWinstonOptionsSupplement { +export enum AsgardLoggerSupplement { 'LOGGER_HELPER_SERVICE' = 'LOGGER_HELPER_SERVICE', } - diff --git a/libs/nest-winston/src/lib/nest-winston.module.ts b/libs/nest-winston/src/lib/nest-winston.module.ts index 65f9650..f213508 100644 --- a/libs/nest-winston/src/lib/nest-winston.module.ts +++ b/libs/nest-winston/src/lib/nest-winston.module.ts @@ -5,7 +5,7 @@ import { WinstonModule, } from 'nest-winston'; import { AsgardLogger } from './logger.service'; -import { NestWinstonOptionsSupplement } from '../interface/nest-winston-options.interface'; +import { AsgardLoggerSupplement } from '../interface/nest-winston-options.interface'; import { NestWinstonModuleAsyncOptions, NestWinstonOptionsFactory, @@ -63,14 +63,14 @@ export class NestWinstonModule { useValue: randomStringGenerator(), }, { - provide: NestWinstonOptionsSupplement.LOGGER_HELPER_SERVICE, + provide: AsgardLoggerSupplement.LOGGER_HELPER_SERVICE, useClass: AsgardLogger, }, ], exports: [ NEST_WINSTON_MODULE_ID, NEST_WINSTON_MODULE_OPTIONS, - NestWinstonOptionsSupplement.LOGGER_HELPER_SERVICE, + AsgardLoggerSupplement.LOGGER_HELPER_SERVICE, ], }; } diff --git a/package-lock.json b/package-lock.json index 79c290e..f865881 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "@nestjs/microservices": "^10.1.3", "@nestjs/mongoose": "^10.0.1", "@nestjs/platform-express": "10.1.3", + "@nestjs/schedule": "^3.0.2", "@sd0x/nest-openai-client": "^0.0.10", "@supercharge/promise-pool": "^2.4.0", "axios": "^1.4.0", @@ -54,6 +55,7 @@ "@nx/node": "16.7.2", "@nx/webpack": "16.7.2", "@nx/workspace": "16.7.2", + "@types/cron": "^2.4.0", "@types/jest": "^29.5.3", "@types/node": "~18.7.23", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -66,7 +68,8 @@ "prettier": "^2.6.2", "ts-jest": "^29.1.0", "ts-node": "10.9.1", - "typescript": "5.1.6" + "typescript": "5.1.6", + "verdaccio": "^5.0.4" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3228,6 +3231,20 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, + "node_modules/@nestjs/schedule": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.2.tgz", + "integrity": "sha512-INhpzkyquosLbVrXx4v+rfAnomwBTgKQvs7e9BZ2LSZdWQOqCQD2PmvWDiu8c4wdJIH6wcWQh98w5KxIcKuVBA==", + "dependencies": { + "cron": "2.4.0", + "uuid": "9.0.0" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", + "reflect-metadata": "^0.1.12" + } + }, "node_modules/@nestjs/schematics": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.0.2.tgz", @@ -4268,6 +4285,16 @@ "@types/node": "*" } }, + "node_modules/@types/cron": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/cron/-/cron-2.4.0.tgz", + "integrity": "sha512-5bBaAkqvSFBX8JMi/xCofNzG5E594TNsApMz68dLd/sQYz/HGQqgcxGHTRjOvD4G3Y+YF1Oo3S7QdCvKt1KAJQ==", + "deprecated": "This is a stub types definition. cron provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "cron": "*" + } + }, "node_modules/@types/eslint": { "version": "8.44.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", @@ -4396,6 +4423,12 @@ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" }, + "node_modules/@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "dev": true + }, "node_modules/@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", @@ -4771,199 +4804,667 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "node_modules/@verdaccio/commons-api": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@verdaccio/commons-api/-/commons-api-10.2.0.tgz", + "integrity": "sha512-F/YZANu4DmpcEV0jronzI7v2fGVWkQ5Mwi+bVmV+ACJ+EzR0c9Jbhtbe5QyLUuzR97t8R5E/Xe53O0cc2LukdQ==", + "dev": true, + "dependencies": { + "http-errors": "2.0.0", + "http-status-codes": "2.2.0" + }, "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" + "node": ">=8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "node_modules/@verdaccio/config": { + "version": "6.0.0-6-next.74", + "resolved": "https://registry.npmjs.org/@verdaccio/config/-/config-6.0.0-6-next.74.tgz", + "integrity": "sha512-qpP3Hc6OCdUjJw17SQaEBPfTY/YFAGpWuiUizX5D9P46Xf/pEL99oViqA77xJPI0VZIlVue4kxcAO/zJ2oxNwA==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/utils": "6.0.0-6-next.42", + "debug": "4.3.4", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "minimatch": "3.1.2", + "yup": "0.32.11" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "node_modules/@verdaccio/config/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@verdaccio/config/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "node_modules/@verdaccio/config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "node_modules/@verdaccio/core": { + "version": "6.0.0-6-next.74", + "resolved": "https://registry.npmjs.org/@verdaccio/core/-/core-6.0.0-6-next.74.tgz", + "integrity": "sha512-aXryZX2GyvWLvEn2pnxarTY6nOedrh9W7uGsXaW7uYOD7dq8lOQ4NH8Hhl/nw+Sswp3mE5JNl2P3nIoGyhOYiQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "ajv": "8.12.0", + "core-js": "3.30.2", + "http-errors": "2.0.0", + "http-status-codes": "2.2.0", + "process-warning": "1.0.0", + "semver": "7.5.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "node_modules/@verdaccio/core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "node_modules/@verdaccio/core/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "node_modules/@verdaccio/core/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "node_modules/@verdaccio/file-locking": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@verdaccio/file-locking/-/file-locking-10.3.1.tgz", + "integrity": "sha512-oqYLfv3Yg3mAgw9qhASBpjD50osj2AX4IwbkUtyuhhKGyoFU9eZdrbeW6tpnqUnj6yBMtAPm2eGD4BwQuX400g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "lockfile": "1.0.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "node_modules/@verdaccio/local-storage": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/@verdaccio/local-storage/-/local-storage-10.3.3.tgz", + "integrity": "sha512-/n0FH+1hxVg80YhYBfJuW7F2AuvLY2fra8/DTCilWDll9Y5yZDxwntZfcKHJLerCA4atrbJtvaqpWkoV3Q9x8w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@verdaccio/commons-api": "10.2.0", + "@verdaccio/file-locking": "10.3.1", + "@verdaccio/streams": "10.2.1", + "async": "3.2.4", + "debug": "4.3.4", + "lodash": "4.17.21", + "lowdb": "1.0.0", + "mkdirp": "1.0.4" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "node_modules/@verdaccio/local-storage/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "node_modules/@verdaccio/logger-7": { + "version": "6.0.0-6-next.19", + "resolved": "https://registry.npmjs.org/@verdaccio/logger-7/-/logger-7-6.0.0-6-next.19.tgz", + "integrity": "sha512-DQwmPPRWvrT4TMur4g4+c5dNr7WnoT6sXYpw0Yh6NgZpH2D6FMcaxpH1me0rklpfnnXZmV3/zs2MvLJaWmRl4w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@verdaccio/logger-commons": "6.0.0-6-next.42", + "pino": "7.11.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "node_modules/@verdaccio/logger-commons": { + "version": "6.0.0-6-next.42", + "resolved": "https://registry.npmjs.org/@verdaccio/logger-commons/-/logger-commons-6.0.0-6-next.42.tgz", + "integrity": "sha512-ydp12CVXdYhkXPxJevGW38Qf9HJdOF/KWcDmCWo7pi9atfiMkUWoOuEC1nr+7Dx+S5dA7kDfTqFLdadAuyO93A==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" + "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/logger-prettify": "6.0.0-6-next.10", + "colorette": "2.0.20", + "debug": "4.3.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "node_modules/@verdaccio/logger-prettify": { + "version": "6.0.0-6-next.10", + "resolved": "https://registry.npmjs.org/@verdaccio/logger-prettify/-/logger-prettify-6.0.0-6-next.10.tgz", + "integrity": "sha512-G9woGojHXoRg3W4fE2ZlNy2c25f5faqLWHxVdnDFbgbH6dieG+GzlyNwiOcrRC4LEkh7dWcgwuNMx1NZFojqhg==", "dev": true, "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" + "colorette": "2.0.20", + "dayjs": "1.11.7", + "lodash": "4.17.21", + "pino-abstract-transport": "1.0.0", + "sonic-boom": "3.3.0" }, "engines": { - "node": ">=14.15.0" + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", - "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "node_modules/@verdaccio/middleware": { + "version": "6.0.0-6-next.53", + "resolved": "https://registry.npmjs.org/@verdaccio/middleware/-/middleware-6.0.0-6-next.53.tgz", + "integrity": "sha512-shzf8+ww161TGOQA+Ee+JsWLgji07kkxLJr+YQSj3d9glbq4OE64sw51cV3BwpBbIALWziLTmIbYLaZgaRkZYg==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "@verdaccio/config": "6.0.0-6-next.74", + "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/url": "11.0.0-6-next.40", + "@verdaccio/utils": "6.0.0-6-next.42", + "debug": "4.3.4", + "express": "4.18.2", + "express-rate-limit": "5.5.1", + "lodash": "4.17.21", + "lru-cache": "7.18.3", + "mime": "2.6.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/@verdaccio/middleware/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@verdaccio/middleware/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@verdaccio/search": { + "version": "6.0.0-6-next.2", + "resolved": "https://registry.npmjs.org/@verdaccio/search/-/search-6.0.0-6-next.2.tgz", + "integrity": "sha512-5Hkcxoj7crPn6Zth59I54af6KO5Ho7bzvCHCDbEwcmjewKcQJB4Kst4cEtpN/xA1ao0hqOSruEObl7/mqCq8hg==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/@verdaccio/signature": { + "version": "6.0.0-6-next.2", + "resolved": "https://registry.npmjs.org/@verdaccio/signature/-/signature-6.0.0-6-next.2.tgz", + "integrity": "sha512-aFvMbxxHzJCpPmqSgVuQYvYN2RP11CoSEcTXikkyb1zF4Uf3cOy53zUZ1Y7iOKCRYTgWrmet9KP7+24e44GHxg==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "jsonwebtoken": "9.0.0", + "lodash": "4.17.21" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/@verdaccio/signature/node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/@verdaccio/signature/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@verdaccio/signature/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@verdaccio/streams": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@verdaccio/streams/-/streams-10.2.1.tgz", + "integrity": "sha512-OojIG/f7UYKxC4dYX8x5ax8QhRx1b8OYUAMz82rUottCuzrssX/4nn5QE7Ank0DUSX3C9l/HPthc4d9uKRJqJQ==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/@verdaccio/tarball": { + "version": "11.0.0-6-next.43", + "resolved": "https://registry.npmjs.org/@verdaccio/tarball/-/tarball-11.0.0-6-next.43.tgz", + "integrity": "sha512-/cojl1+EWLhfu5FJh/dLBtwwC+vI6dR0xldJvE7BHJ5P79DnBUbzAqtwoWwsOR2FkGkWoReXZjPR4QVrUivhLA==", + "dev": true, + "dependencies": { + "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/url": "11.0.0-6-next.40", + "@verdaccio/utils": "6.0.0-6-next.42", + "debug": "4.3.4", + "lodash": "4.17.21" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/@verdaccio/ui-theme": { + "version": "6.0.0-6-next.74", + "resolved": "https://registry.npmjs.org/@verdaccio/ui-theme/-/ui-theme-6.0.0-6-next.74.tgz", + "integrity": "sha512-IoAl4bbLF9SFJsQvyEbJeubRs0O2WusOOgry6vsfp1w48+oarcnGkdOU/WZuIdlFhmPdhOJpYL0cFDUBRDvdOA==", + "dev": true + }, + "node_modules/@verdaccio/url": { + "version": "11.0.0-6-next.40", + "resolved": "https://registry.npmjs.org/@verdaccio/url/-/url-11.0.0-6-next.40.tgz", + "integrity": "sha512-TGP+96QEgvQMIx+0WsFmxpeV/YJlX+os85zrBipioZDUm/JmNK6i9wCfYjA5Uncn+NGRsI6bUJhi05Ymoh10cA==", + "dev": true, + "dependencies": { + "@verdaccio/core": "6.0.0-6-next.74", + "debug": "4.3.4", + "lodash": "4.17.21", + "validator": "13.9.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/@verdaccio/utils": { + "version": "6.0.0-6-next.42", + "resolved": "https://registry.npmjs.org/@verdaccio/utils/-/utils-6.0.0-6-next.42.tgz", + "integrity": "sha512-ckf1N0rlnWd07aQQx+K9/fvO1LtSVGAAls22Isdfb+dfBjUYalIha/EDIEr3mq7QTqm0zA6mLhP7m4Bv35FH6g==", + "dev": true, + "dependencies": { + "@verdaccio/core": "6.0.0-6-next.74", + "lodash": "4.17.21", + "minimatch": "3.1.2", + "semver": "7.5.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/@verdaccio/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@verdaccio/utils/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@verdaccio/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@verdaccio/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -5192,6 +5693,15 @@ "node": ">= 8" } }, + "node_modules/apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -5257,6 +5767,24 @@ "node": ">=8" } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -5267,6 +5795,15 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.15", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", @@ -5304,6 +5841,21 @@ "postcss": "^8.1.0" } }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, "node_modules/axios": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", @@ -5539,6 +6091,21 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -5872,6 +6439,12 @@ } ] }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, "node_modules/catharsis": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", @@ -6051,6 +6624,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/clipanion": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-3.2.1.tgz", + "integrity": "sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==", + "dev": true, + "dependencies": { + "typanion": "^3.8.0" + }, + "peerDependencies": { + "typanion": "*" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -6386,6 +6971,19 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dev": true, + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", @@ -6478,6 +7076,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/core-js": { + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz", + "integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.32.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", @@ -6530,6 +7139,14 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cron": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.0.tgz", + "integrity": "sha512-Cx77ic1TyIAtUggr0oAhtS8MLzPBUqGNIvdDM7jE3oFIxfe8LXWI9q3iQN/H2CebAiMir53LQKWOhEKnzkJTAQ==", + "dependencies": { + "luxon": "^3.2.1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6812,6 +7429,18 @@ "node": ">=8" } }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/data-urls": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", @@ -6826,6 +7455,12 @@ "node": ">=14" } }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7200,6 +7835,16 @@ "stream-shift": "^1.0.0" } }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -7322,6 +7967,18 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -7919,6 +8576,12 @@ "node": ">= 0.10.0" } }, + "node_modules/express-rate-limit": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.5.1.tgz", + "integrity": "sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==", + "dev": true + }, "node_modules/express/node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -7979,6 +8642,15 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8011,6 +8683,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fast-redact": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", + "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", @@ -8281,6 +8962,15 @@ } } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "7.2.13", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", @@ -8634,6 +9324,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -8847,6 +9546,81 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/harmony-reflect": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", @@ -9080,6 +9854,27 @@ } } }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http-status-codes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.2.0.tgz", + "integrity": "sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==", + "dev": true + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -9452,6 +10247,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "peer": true }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -9468,6 +10269,12 @@ "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -9516,6 +10323,12 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -10305,6 +11118,12 @@ "xmlcreate": "^2.0.4" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "node_modules/jsdoc": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", @@ -10432,6 +11251,12 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -10444,6 +11269,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -10492,6 +11323,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, "node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", @@ -10500,6 +11340,74 @@ "node": ">=0.10.0" } }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -10527,6 +11435,18 @@ "node": ">=12.0.0" } }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dev": true, + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/klaw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", @@ -11128,11 +12048,26 @@ "node": ">=8" } }, + "node_modules/lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "dev": true, + "dependencies": { + "signal-exit": "^3.0.2" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -11211,6 +12146,31 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, + "node_modules/lowdb": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", + "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.3", + "is-promise": "^2.1.0", + "lodash": "4", + "pify": "^3.0.0", + "steno": "^0.4.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lowdb/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -11220,6 +12180,14 @@ "yallist": "^3.0.2" } }, + "node_modules/luxon": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.0.tgz", + "integrity": "sha512-7eDo4Pt7aGhoCheGFIuq4Xa2fJm4ZpmldpGhjTYBNUYNCN6TIEP6v7chwwwt3KRp7YR+rghbfvjyo3V5y9hgBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/magic-bytes.js": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.15.tgz", @@ -11735,6 +12703,54 @@ "multicast-dns": "cli.js" } }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "dev": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/nanoclone": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==", + "dev": true + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -11765,6 +12781,15 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, + "bin": { + "ncp": "bin/ncp" + } + }, "node_modules/needle": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", @@ -12154,6 +13179,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -12184,6 +13218,12 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "dev": true + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -12557,6 +13597,12 @@ "ms": "^2.1.1" } }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12580,8 +13626,105 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "engines": { - "node": ">=0.10.0" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", + "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "dev": true, + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-abstract-transport/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", + "dev": true + }, + "node_modules/pino/node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "dev": true, + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/pino/node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0" } }, "node_modules/pirates": { @@ -12690,6 +13833,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -13317,11 +14469,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", + "dev": true + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -13335,6 +14502,12 @@ "node": ">= 6" } }, + "node_modules/property-expr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz", + "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==", + "dev": true + }, "node_modules/proto3-json-serializer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", @@ -13473,8 +14646,7 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "peer": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/punycode": { "version": "2.3.0", @@ -13540,6 +14712,12 @@ } ] }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -13611,6 +14789,15 @@ "node": ">=8.10.0" } }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/redis": { "version": "4.6.7", "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.7.tgz", @@ -13728,6 +14915,84 @@ "node": ">=0.10" } }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -14424,6 +15689,15 @@ "npm": ">= 3.0.0" } }, + "node_modules/sonic-boom": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", + "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -14533,12 +15807,46 @@ "wbuf": "^1.7.3" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -14581,6 +15889,15 @@ "node": ">= 0.8" } }, + "node_modules/steno": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", + "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.3" + } + }, "node_modules/stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -15102,6 +16419,15 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "dev": true, + "dependencies": { + "real-require": "^0.1.0" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -15160,6 +16486,12 @@ "node": ">=0.6" } }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "dev": true + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -15356,6 +16688,15 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "dev": true, + "engines": { + "node": ">=0.6.x" + } + }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", @@ -15377,6 +16718,30 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/typanion": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.14.0.tgz", + "integrity": "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -15527,6 +16892,12 @@ "node": ">= 10.0.0" } }, + "node_modules/unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -15637,6 +17008,15 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -15645,6 +17025,235 @@ "node": ">= 0.8" } }, + "node_modules/verdaccio": { + "version": "5.26.1", + "resolved": "https://registry.npmjs.org/verdaccio/-/verdaccio-5.26.1.tgz", + "integrity": "sha512-rpP1O6w3UomhEXQHr0EGMxpTPUsBgkR8VoK2eNS3aFC8xFgaeoeHF/GABd4bSyKMa22JyHjqeEFH46U9plMX+A==", + "dev": true, + "dependencies": { + "@verdaccio/config": "6.0.0-6-next.74", + "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/local-storage": "10.3.3", + "@verdaccio/logger-7": "6.0.0-6-next.19", + "@verdaccio/middleware": "6.0.0-6-next.53", + "@verdaccio/search": "6.0.0-6-next.2", + "@verdaccio/signature": "6.0.0-6-next.2", + "@verdaccio/streams": "10.2.1", + "@verdaccio/tarball": "11.0.0-6-next.43", + "@verdaccio/ui-theme": "6.0.0-6-next.74", + "@verdaccio/url": "11.0.0-6-next.40", + "@verdaccio/utils": "6.0.0-6-next.42", + "async": "3.2.4", + "clipanion": "3.2.1", + "compression": "1.7.4", + "cookies": "0.8.0", + "cors": "2.8.5", + "debug": "^4.3.4", + "envinfo": "7.10.0", + "express": "4.18.2", + "express-rate-limit": "5.5.1", + "fast-safe-stringify": "2.1.1", + "handlebars": "4.7.7", + "js-yaml": "4.1.0", + "JSONStream": "1.3.5", + "jsonwebtoken": "9.0.1", + "kleur": "4.1.5", + "lodash": "4.17.21", + "lru-cache": "7.18.3", + "mime": "3.0.0", + "mkdirp": "1.0.4", + "mv": "2.1.1", + "pkginfo": "0.4.1", + "request": "2.88.2", + "semver": "7.5.4", + "validator": "13.9.0", + "verdaccio-audit": "11.0.0-6-next.37", + "verdaccio-htpasswd": "11.0.0-6-next.44" + }, + "bin": { + "verdaccio": "bin/verdaccio" + }, + "engines": { + "node": ">=12.18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/verdaccio-audit": { + "version": "11.0.0-6-next.37", + "resolved": "https://registry.npmjs.org/verdaccio-audit/-/verdaccio-audit-11.0.0-6-next.37.tgz", + "integrity": "sha512-hzQq90HmKwy327PueS58V720MRDycSCmo7DNgOy+h8dvITG6XAQ6bSsiTgQScjmwImdp3tkl3bqu9kXh33bPxA==", + "dev": true, + "dependencies": { + "@verdaccio/config": "6.0.0-6-next.74", + "@verdaccio/core": "6.0.0-6-next.74", + "express": "4.18.2", + "https-proxy-agent": "5.0.1", + "node-fetch": "cjs" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/verdaccio-htpasswd": { + "version": "11.0.0-6-next.44", + "resolved": "https://registry.npmjs.org/verdaccio-htpasswd/-/verdaccio-htpasswd-11.0.0-6-next.44.tgz", + "integrity": "sha512-ZKCpZ5KhcHXjAlYkCI6CM6O8KO/Pr/x5C89zqjRR7OMaPyOAu0psIJjvhTycn1efZub4pT6Tlj7rCRlmvIbR0w==", + "dev": true, + "dependencies": { + "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/file-locking": "11.0.0-6-next.7", + "apache-md5": "1.1.8", + "bcryptjs": "2.4.3", + "core-js": "3.30.2", + "debug": "4.3.4", + "http-errors": "2.0.0", + "unix-crypt-td-js": "1.1.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/verdaccio-htpasswd/node_modules/@verdaccio/file-locking": { + "version": "11.0.0-6-next.7", + "resolved": "https://registry.npmjs.org/@verdaccio/file-locking/-/file-locking-11.0.0-6-next.7.tgz", + "integrity": "sha512-S0GNoe2oBOgB7fKJN2vZqnl5qDEvdnTfKAfa47InXweJROeul6kjlE2/NlbNbK3zZID01VR1HFrFehMQO0Jyfw==", + "dev": true, + "dependencies": { + "lockfile": "1.0.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/verdaccio" + } + }, + "node_modules/verdaccio/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/verdaccio/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/verdaccio/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/verdaccio/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/verdaccio/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/verdaccio/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/verdaccio/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/verdaccio/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/verdaccio/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -16072,6 +17681,12 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -16252,6 +17867,24 @@ "node": ">= 14" } }, + "node_modules/yup": { + "version": "0.32.11", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", + "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/lodash": "^4.14.175", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/zod": { "version": "3.22.2", "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", diff --git a/package.json b/package.json index 5235183..c0b5f30 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@nestjs/microservices": "^10.1.3", "@nestjs/mongoose": "^10.0.1", "@nestjs/platform-express": "10.1.3", + "@nestjs/schedule": "^3.0.2", "@sd0x/nest-openai-client": "^0.0.10", "@supercharge/promise-pool": "^2.4.0", "axios": "^1.4.0", @@ -50,6 +51,7 @@ "@nx/node": "16.7.2", "@nx/webpack": "16.7.2", "@nx/workspace": "16.7.2", + "@types/cron": "^2.4.0", "@types/jest": "^29.5.3", "@types/node": "~18.7.23", "@typescript-eslint/eslint-plugin": "5.62.0", From 7ea7f1307a31273c94629c59fbc52ee2f2ceabfe Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 26 Aug 2023 01:49:53 +0800 Subject: [PATCH 05/13] feat(langchain): general chat --- apps/yggdrasil-core-engine/.env.local.example | 17 ++--- .../src/app/app.module.ts | 5 +- .../src/app/chatgpt/chatgpt.module.ts | 2 +- .../{ => chatgpt}/chatgpt.controller.ts | 33 +++++----- .../llm-ai/llm-ai.controller.spec.ts | 18 ++++++ .../controllers/llm-ai/llm-ai.controller.ts | 56 +++++++++++++++++ .../lang-chain/lang-chain.service.spec.ts | 0 .../lang-chain/lang-chain.service.ts | 36 ++++++----- .../src/app/llm-ai/llm-ai.module.ts | 50 +++++++++++++++ .../prompt/translate-to-english.prompt.ts | 10 ++- .../src/app/services/service.module.ts | 17 ----- .../src/assets/llmai/proto/llmai.proto | 17 +++++ apps/yggdrasil-core-engine/src/main.ts | 15 +++-- .../src/app/app.module.ts | 29 ++++++++- .../src/app/config/app.config.ts | 1 + .../src/app/config/core.engine.config.ts | 26 +++++++- .../interface/chatgpt.service.interface.ts | 16 +++++ .../services/message/message.service.ts | 38 +++++------- .../src/assets/llmai.proto | 17 +++++ .../src/lib/interface/base-prompt.ts | 5 +- .../lib/interface/nest.langchain-params.ts | 22 +++++++ .../src/lib/nest-langchain.service.ts | 62 ++++++++----------- .../provider/langchain/langchain.provider.ts | 7 +++ libs/nest-langchain/src/utils/utils.ts | 9 +++ .../src/lib/nest-winston.module.ts | 3 +- libs/utils/src/index.ts | 1 + libs/utils/src/lib/chatgpt-chant.enum.ts | 3 + libs/utils/src/lib/function-selection.enum.ts | 6 ++ package-lock.json | 33 ++++------ package.json | 3 +- 30 files changed, 403 insertions(+), 154 deletions(-) rename apps/yggdrasil-core-engine/src/app/controllers/{ => chatgpt}/chatgpt.controller.ts (78%) create mode 100644 apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts create mode 100644 apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts rename apps/yggdrasil-core-engine/src/app/{services => llm-ai}/lang-chain/lang-chain.service.spec.ts (100%) rename apps/yggdrasil-core-engine/src/app/{services => llm-ai}/lang-chain/lang-chain.service.ts (50%) create mode 100644 apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts rename apps/yggdrasil-core-engine/src/app/{chatgpt => llm-ai}/prompt/translate-to-english.prompt.ts (87%) create mode 100644 apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto create mode 100644 apps/yggdrasil-discord-client/src/assets/llmai.proto create mode 100644 libs/nest-langchain/src/lib/interface/nest.langchain-params.ts create mode 100644 libs/utils/src/lib/function-selection.enum.ts diff --git a/apps/yggdrasil-core-engine/.env.local.example b/apps/yggdrasil-core-engine/.env.local.example index 8ae8a3d..49c6ce8 100644 --- a/apps/yggdrasil-core-engine/.env.local.example +++ b/apps/yggdrasil-core-engine/.env.local.example @@ -1,12 +1,15 @@ PACKAGE_NAME=Yggdrasil Core Engine SERVICE_NAME=yggdrasil-core-engine +LOGGER_LEVEL=debug CORE_ENGINE_API_KEY= OPENAI_API_KEY= -CHATGPT_ORG= -OPENAI_API_TYPE= -AZURE_API_BASE_PATH= -AZURE_CHATGPT_API_KEY= -AZURE_DEPLOYMENT_NAME= -AZURE_API_VERSION='2023-03-15-preview' +OPENAI_ORG= +A_AZURE_OPENAI_ENABLE= +A_AZURE_OPENAI_API_KEY= +A_AZURE_OPENAI_ENDPOINT= +A_AZURE_OPENAI_DEPLOYMENT_NAME= +A_AZURE_OPENAI_MODEL_NAME= +A_AZURE_OPENAI_INSTANCE_NAME= +A_AZURE_OPENAI_API_VERSION=2023-07-01-preview RPC_API_KEY= -MONGO_DB_URI= +MONGO_DB_URI= \ No newline at end of file diff --git a/apps/yggdrasil-core-engine/src/app/app.module.ts b/apps/yggdrasil-core-engine/src/app/app.module.ts index 4fed07f..0bc24dc 100644 --- a/apps/yggdrasil-core-engine/src/app/app.module.ts +++ b/apps/yggdrasil-core-engine/src/app/app.module.ts @@ -16,6 +16,8 @@ import { openAIConfig } from './config/open.ai.config'; import { NestWinstonModule } from '@asgard-hub/nest-winston'; import { ChatGPTModule } from './chatgpt/chatgpt.module'; import { mongoDBConfig } from './config/mongo.db.config'; +import { LLMAIController } from './controllers/llm-ai/llm-ai.controller'; +import { LLMAIModule } from './llm-ai/llm-ai.module'; @Module({ imports: [ @@ -43,8 +45,9 @@ import { mongoDBConfig } from './config/mongo.db.config'; inject: [ConfigService], }), ChatGPTModule, + LLMAIModule, ], - controllers: [AppController], + controllers: [AppController, LLMAIController], providers: [ConfigService, AppService], exports: [ConfigService], }) diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/chatgpt.module.ts b/apps/yggdrasil-core-engine/src/app/chatgpt/chatgpt.module.ts index 3ed7f1a..9104761 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/chatgpt.module.ts +++ b/apps/yggdrasil-core-engine/src/app/chatgpt/chatgpt.module.ts @@ -6,7 +6,7 @@ import { TXTChatGptService } from './service/txt-chat-gpt/txt-chat-gpt.service'; import { PDFChatGPTService } from './service/pdf-chat-gpt/pdf-chat-gpt.service'; import { ImageChatGptService } from './service/image-chat-gpt/image-chat-gpt.service'; import { GatewayService } from './service/gateway-service/gateway-service.service'; -import { ChatGPTController } from '../controllers/chatgpt.controller'; +import { ChatGPTController } from '../controllers/chatgpt/chatgpt.controller'; import { ServiceModule } from '../services/service.module'; import { DataSourceAdapterModule } from '../data-source-adapter/data-source-adapter.module'; import { AudioChatGPTService } from './service/audio-chat-gpt/audio-chat-gpt.service'; diff --git a/apps/yggdrasil-core-engine/src/app/controllers/chatgpt.controller.ts b/apps/yggdrasil-core-engine/src/app/controllers/chatgpt/chatgpt.controller.ts similarity index 78% rename from apps/yggdrasil-core-engine/src/app/controllers/chatgpt.controller.ts rename to apps/yggdrasil-core-engine/src/app/controllers/chatgpt/chatgpt.controller.ts index 4c07fba..666524e 100644 --- a/apps/yggdrasil-core-engine/src/app/controllers/chatgpt.controller.ts +++ b/apps/yggdrasil-core-engine/src/app/controllers/chatgpt/chatgpt.controller.ts @@ -1,31 +1,35 @@ import { Metadata } from '@grpc/grpc-js'; import { Controller, UseGuards } from '@nestjs/common'; import { GrpcMethod } from '@nestjs/microservices'; -import { AuthGuard } from '../auth/auth.guard'; -import { ChatGPTGateWayService } from '../services/chatgpt-gateway-service/chatgpt.service'; +import { AuthGuard } from '../../auth/auth.guard'; +import { ChatGPTGateWayService } from '../../services/chatgpt-gateway-service/chatgpt.service'; import { GeneralMessagesOptions, GPTResponseOptions, CompletionResponseOptions, YTSummaryOptions, URLDocSummaryOptions, -} from '../chatgpt/interface/chatgpt.service.interface'; +} from '../../chatgpt/interface/chatgpt.service.interface'; import { GatewayFeature, GatewayService, -} from '../chatgpt/service/gateway-service/gateway-service.service'; -import { DataSourceType } from '../data-source-adapter/adapter/interface/data-source-type.enum'; -import { ImageChatGptService } from '../chatgpt/service/image-chat-gpt/image-chat-gpt.service'; -import { TXTChatGptService } from '../chatgpt/service/txt-chat-gpt/txt-chat-gpt.service'; -import { URLChatGPTService } from '../chatgpt/service/url-chat-gpt/url-chat-gpt.service'; -import { PDFChatGPTService } from '../chatgpt/service/pdf-chat-gpt/pdf-chat-gpt.service'; -import { YTChatGPTService } from '../chatgpt/service/yt-chat-gpt/yt-chat-gpt.service'; +} from '../../chatgpt/service/gateway-service/gateway-service.service'; +import { DataSourceType } from '../../data-source-adapter/adapter/interface/data-source-type.enum'; +import { ImageChatGptService } from '../../chatgpt/service/image-chat-gpt/image-chat-gpt.service'; +import { TXTChatGptService } from '../../chatgpt/service/txt-chat-gpt/txt-chat-gpt.service'; +import { URLChatGPTService } from '../../chatgpt/service/url-chat-gpt/url-chat-gpt.service'; +import { PDFChatGPTService } from '../../chatgpt/service/pdf-chat-gpt/pdf-chat-gpt.service'; +import { YTChatGPTService } from '../../chatgpt/service/yt-chat-gpt/yt-chat-gpt.service'; import { AudioChatGPTService, AudioChatOptions, -} from '../chatgpt/service/audio-chat-gpt/audio-chat-gpt.service'; +} from '../../chatgpt/service/audio-chat-gpt/audio-chat-gpt.service'; import { ChatGPTChant } from '@asgard-hub/utils'; +/** + * @deprecated This controller is a v1 feature and will be removed in future versions. Please use the LLMAIController instead. + */ +@UseGuards(AuthGuard) @Controller() export class ChatGPTController { constructor( @@ -33,7 +37,6 @@ export class ChatGPTController { private readonly gatewayService: GatewayService ) {} - @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService') generalMessages(data: GeneralMessagesOptions) { const result = this.service.generalMessages( @@ -45,7 +48,6 @@ export class ChatGPTController { }; } - @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchGgtResponse') fetchGptResponse(data: GPTResponseOptions, metadata: Metadata) { const fromMetaData = (metadata.get('azure-service') ?? [])[0] ?? false; @@ -65,7 +67,6 @@ export class ChatGPTController { return result; } - @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchGgtResponseStream') fetchGptResponseStream(data: GPTResponseOptions, metadata: Metadata) { const fromMetaData = (metadata.get('azure-service') ?? [])[0] ?? false; @@ -85,7 +86,6 @@ export class ChatGPTController { return result; } - @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'GetCompletionResponse') async getCompletionResponse(data: CompletionResponseOptions) { const result = await this.service.getCompletionResponse( @@ -96,7 +96,6 @@ export class ChatGPTController { } // fetch Youtube Summary - @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchYoutubeSummary') async fetchYoutubeSummaryWithGPT(data: YTSummaryOptions) { const result = await this.gatewayService @@ -108,7 +107,6 @@ export class ChatGPTController { } // fetch Docs Summary - @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchUrlDocSummary') async fetchPDFSummaryWithGPT(data: URLDocSummaryOptions) { let result = []; @@ -144,7 +142,6 @@ export class ChatGPTController { } // fetch audio transcription - @UseGuards(AuthGuard) @GrpcMethod('ChatGPTService', 'FetchAudioTranscription') async fetchAudioTranscription(data: AudioChatOptions) { const result = await this.gatewayService diff --git a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts new file mode 100644 index 0000000..3f81d90 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LLMAIController } from './llm-ai.controller'; + +describe('LlmAiController', () => { + let controller: LLMAIController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [LLMAIController], + }).compile(); + + controller = module.get(LLMAIController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts new file mode 100644 index 0000000..1699029 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts @@ -0,0 +1,56 @@ +import { Controller, Inject, UseGuards } from '@nestjs/common'; +import { LangChainService } from '../../llm-ai/lang-chain/lang-chain.service'; +import { AuthGuard } from '../../auth/auth.guard'; +import { FunctionSelection } from '@asgard-hub/utils'; +import { TranslateToEnglishPrompt } from '../../llm-ai/prompt/translate-to-english.prompt'; +import { GrpcMethod } from '@nestjs/microservices'; +import { AsgardLoggerSupplement, AsgardLogger } from '@asgard-hub/nest-winston'; + +export interface ChatOptions { + userInput: string; + key?: FunctionSelection; +} + +@UseGuards(AuthGuard) +@Controller('llm-ai') +export class LLMAIController { + @Inject(AsgardLoggerSupplement.LOGGER_HELPER_SERVICE) + private readonly asgardLogger: AsgardLogger; + @Inject() + private readonly langChainService: LangChainService; + + @GrpcMethod('LLMAIService') + async chat(data: ChatOptions) { + const type = this.promptSelect(data.key); + let response = ''; + if (!type) { + response = await this.langChainService.getGeneralChatResponse( + data.userInput + ); + } else { + response = ( + await this.langChainService.getFunctionChainResponse( + data.userInput, + type + ) + ).message; + } + + this.asgardLogger.debug(response); + + return { + response, + }; + } + + promptSelect(key: FunctionSelection) { + switch (key) { + case FunctionSelection.generalChat: + return undefined; + case FunctionSelection.anyTranslateToEnglish: + return TranslateToEnglishPrompt; + default: + return undefined; + } + } +} diff --git a/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.spec.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts similarity index 100% rename from apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.spec.ts rename to apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts diff --git a/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.ts similarity index 50% rename from apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.ts rename to apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.ts index 36ed310..d05875b 100644 --- a/apps/yggdrasil-core-engine/src/app/services/lang-chain/lang-chain.service.ts +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.ts @@ -1,15 +1,12 @@ import { Inject, Injectable } from '@nestjs/common'; import { + BaseLangChainPrompt, NestLangchainOptionsSupplement, NestLangchainService, } from '@sd0x/nest-langchain'; -import { - TranslateToEnglishPrompt, - TranslateToEnglishPromptParams, - TranslateToEnglishPromptResponse, -} from '../../chatgpt/prompt/translate-to-english.prompt'; import { AsgardLogger, AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; -import { Timeout } from '@nestjs/schedule'; +import { ChatOpenAICallOptions } from 'langchain/chat_models/openai'; +import { ChainValues } from 'langchain/schema'; @Injectable() export class LangChainService { @@ -19,20 +16,27 @@ export class LangChainService { @Inject(AsgardLoggerSupplement.LOGGER_HELPER_SERVICE) private readonly asgardLogger: AsgardLogger; - @Timeout(1000) - async getFunctionChainResponse() { - const result = await this.nestLangchainService.getFunctionChainResponse< - TranslateToEnglishPromptResponse, - TranslateToEnglishPromptParams - >({ + async getFunctionChainResponse( + userInput: string, + langChainPromptType: { new (): BaseLangChainPrompt } + ) { + const result = await this.nestLangchainService.getFunctionChainResponse({ input: { - userInput: '這是一條測試訊息', + userInput, }, - langChainPromptType: TranslateToEnglishPrompt, + langChainPromptType, }); - this.asgardLogger.log(result.translationResult); + this.asgardLogger.debug(result); + + return result; + } + + async getGeneralChatResponse(userInput: string) { + const message = await this.nestLangchainService.getGeneralChatResponse( + userInput + ); - return result.translationResult; + return message.content; } } diff --git a/apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts new file mode 100644 index 0000000..3af0642 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts @@ -0,0 +1,50 @@ +import { Module } from '@nestjs/common'; +import { MongoModule } from '../mongo/mongo.module'; +import { ServiceModule } from '../services/service.module'; +import { DataSourceAdapterModule } from '../data-source-adapter/data-source-adapter.module'; +import { ConfigService } from '@nestjs/config'; +import { NestWinstonModule } from '@asgard-hub/nest-winston'; +import { IAppConfig, ConfigPath } from '../config/app.config'; +import { isDev, isStaging, isProd } from '../constants/common.constant'; +import { EventEmitterModule } from '@nestjs/event-emitter'; +import { LLMAIController } from '../controllers/llm-ai/llm-ai.controller'; +import { LangChainService } from './lang-chain/lang-chain.service'; +import { NestLangChainModule } from '@sd0x/nest-langchain'; +import { OpenAIProvider } from '../provider/open-ai/open-ai'; +import { ProviderModule } from '../provider/provider.module'; + +@Module({ + imports: [ + EventEmitterModule.forRoot(), + NestWinstonModule.registerAsync({ + useFactory: (configService: ConfigService) => ({ + runtime: { + isDev, + isStaging, + isProd, + }, + packageName: configService.get(ConfigPath.APP).packageName, + }), + inject: [ConfigService], + }), + ServiceModule, + NestLangChainModule.registerAsync({ + imports: [ProviderModule], + useFactory: (openAIProvider: OpenAIProvider) => ({ + runtime: { + isDev, + isStaging, + isProd, + }, + langChainAIChatOAuth: openAIProvider.fetchChatOpenAIInput(), + }), + inject: [OpenAIProvider], + }), + MongoModule, + DataSourceAdapterModule, + ], + providers: [LangChainService], + exports: [LangChainService], + controllers: [LLMAIController], +}) +export class LLMAIModule {} diff --git a/apps/yggdrasil-core-engine/src/app/chatgpt/prompt/translate-to-english.prompt.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/prompt/translate-to-english.prompt.ts similarity index 87% rename from apps/yggdrasil-core-engine/src/app/chatgpt/prompt/translate-to-english.prompt.ts rename to apps/yggdrasil-core-engine/src/app/llm-ai/prompt/translate-to-english.prompt.ts index 48b272d..64f3009 100644 --- a/apps/yggdrasil-core-engine/src/app/chatgpt/prompt/translate-to-english.prompt.ts +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/prompt/translate-to-english.prompt.ts @@ -15,7 +15,11 @@ export interface TranslateToEnglishPromptResponse { } export class TranslateToEnglishPrompt - implements BaseLangChainPrompt + implements + BaseLangChainPrompt< + TranslateToEnglishPromptParams, + TranslateToEnglishPromptResponse + > { private readonly inputVariables = ['userInput']; @@ -58,4 +62,8 @@ export class TranslateToEnglishPrompt return inputVariables; } + + parseOutputToString(output: TranslateToEnglishPromptResponse) { + return output.translationResult; + } } diff --git a/apps/yggdrasil-core-engine/src/app/services/service.module.ts b/apps/yggdrasil-core-engine/src/app/services/service.module.ts index d48e035..80aa0c4 100644 --- a/apps/yggdrasil-core-engine/src/app/services/service.module.ts +++ b/apps/yggdrasil-core-engine/src/app/services/service.module.ts @@ -12,12 +12,8 @@ import { NestWinstonModule } from '@asgard-hub/nest-winston'; import { IAppConfig, ConfigPath } from '../config/app.config'; import { isDev, isStaging, isProd } from '../constants/common.constant'; import { NestOpenAIClientModule } from '@sd0x/nest-openai-client'; -import { NestLangChainModule } from '@sd0x/nest-langchain'; import { IAzureOpenAIConfig } from '../config/azure.openai.config'; import { IOpenAIConfig } from '../config/open.ai.config'; -import { OpenAIProvider } from '../provider/open-ai/open-ai'; -import { ProviderModule } from '../provider/provider.module'; -import { LangChainService } from './lang-chain/lang-chain.service'; import { ScheduleModule } from '@nestjs/schedule'; @Global() @@ -44,18 +40,6 @@ import { ScheduleModule } from '@nestjs/schedule'; }), inject: [ConfigService], }), - NestLangChainModule.registerAsync({ - imports: [ProviderModule], - useFactory: (openAIProvider: OpenAIProvider) => ({ - runtime: { - isDev, - isStaging, - isProd, - }, - langChainAIChatOAuth: openAIProvider.fetchChatOpenAIInput(), - }), - inject: [OpenAIProvider], - }), NestWinstonModule.registerAsync({ useFactory: (configService: ConfigService) => ({ runtime: { @@ -77,7 +61,6 @@ import { ScheduleModule } from '@nestjs/schedule'; YoutubeRecordService, YoutubeDataService, YAudioTranscriptionService, - LangChainService, ], exports: [ ChatGPTGateWayService, diff --git a/apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto b/apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto new file mode 100644 index 0000000..824882d --- /dev/null +++ b/apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package llmai; + +service LLMAIService { + rpc Chat (ChatOptions) returns (ChatCompletionResponse); +} + +message ChatOptions { + string userInput = 1; + string key = 2; +} + +message ChatCompletionResponse { + string response = 1; +} + diff --git a/apps/yggdrasil-core-engine/src/main.ts b/apps/yggdrasil-core-engine/src/main.ts index e096db9..c9620b7 100644 --- a/apps/yggdrasil-core-engine/src/main.ts +++ b/apps/yggdrasil-core-engine/src/main.ts @@ -11,7 +11,10 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { join } from 'path'; const grpcHost = process.env.GRPC_HOST || 'localhost'; -const grpcPort = process.env.GRPC_PORT || 5000; +const grpcPort = { + chatgpt: 5000, + llmai: 5001, +}; async function bootstrap() { const app = await NestFactory.create(AppModule); @@ -28,19 +31,23 @@ async function bootstrap() { } async function setupMicroservice(app: NestApplication) { - const gRCPPackages = ['chatgpt']; + const gRCPPackages = ['chatgpt', 'llmai']; gRCPPackages.forEach((pkg) => { app.connectMicroservice({ transport: Transport.GRPC, options: { package: pkg, protoPath: join(__dirname, `assets/${pkg}/proto/${pkg}.proto`), - url: `${grpcHost}:${grpcPort}`, + url: `${grpcHost}:${grpcPort[pkg]}`, }, }); }); await app.startAllMicroservices(); - Logger.log(`🚀 gRPC server is running on: ${grpcHost}:${grpcPort}`); + Logger.log( + `🚀 gRPC server is running on: ${grpcHost}: ${gRCPPackages + .map((pkg) => `${pkg}:${grpcPort[pkg]}`) + .join(',')}` + ); } bootstrap(); diff --git a/apps/yggdrasil-discord-client/src/app/app.module.ts b/apps/yggdrasil-discord-client/src/app/app.module.ts index 5842758..e47a8ae 100644 --- a/apps/yggdrasil-discord-client/src/app/app.module.ts +++ b/apps/yggdrasil-discord-client/src/app/app.module.ts @@ -20,6 +20,7 @@ import { IRedisConfig, redisConfig } from './config/redis.config'; import { ICoreEngineConfig, coreEngineConfig, + coreEngineLLMAIConfig, } from './config/core.engine.config'; @Module({ imports: [ @@ -30,7 +31,13 @@ import { isGlobal: true, cache: true, // for local development - load: [appConfig, discordBotConfig, redisConfig, coreEngineConfig], + load: [ + appConfig, + discordBotConfig, + redisConfig, + coreEngineConfig, + coreEngineLLMAIConfig, + ], // if NODE_ENV is not development, ignore .env file ignoreEnvFile: !isDev, expandVariables: true, @@ -94,6 +101,26 @@ import { }, inject: [ConfigService], }, + { + name: 'LLMAI_PACKAGE', + useFactory: (configService: ConfigService) => { + const config = configService.get( + ConfigPath.CORE_ENGINE_LLM_AI + ); + return { + transport: Transport.GRPC, + options: { + loader: { + keepCase: true, + objects: true, + arrays: true, + }, + ...config, + }, + }; + }, + inject: [ConfigService], + }, ]), HttpModule, ], diff --git a/apps/yggdrasil-discord-client/src/app/config/app.config.ts b/apps/yggdrasil-discord-client/src/app/config/app.config.ts index bdc3e19..bed273a 100644 --- a/apps/yggdrasil-discord-client/src/app/config/app.config.ts +++ b/apps/yggdrasil-discord-client/src/app/config/app.config.ts @@ -6,6 +6,7 @@ export enum ConfigPath { DISCORD_BOT = 'discordBot', REDIS = 'redis', CORE_ENGINE = 'coreEngine', + CORE_ENGINE_LLM_AI = 'coreEngineLLMAI', } export interface IAppConfig { diff --git a/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts b/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts index 7f1f5bd..8da42b2 100644 --- a/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts +++ b/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts @@ -11,9 +11,7 @@ export interface ICoreEngineConfig { } export const coreEngineConfig = registerAs(ConfigPath.CORE_ENGINE, () => { - const protoPath = isDev - ? resolve(__dirname, '..', '..', 'assets', 'chatgpt.proto') - : resolve(__dirname, '.', 'assets', 'chatgpt.proto'); + const protoPath = getProtoPath('chatgpt.proto'); const env = { package: process.env.CORE_ENGINE_PACKAGE, @@ -24,3 +22,25 @@ export const coreEngineConfig = registerAs(ConfigPath.CORE_ENGINE, () => { return env; }); + +export const coreEngineLLMAIConfig = registerAs( + ConfigPath.CORE_ENGINE_LLM_AI, + () => { + const protoPath = getProtoPath('llmai.proto'); + + const env = { + package: process.env.CORE_ENGINE_LLM_AI_PACKAGE, + protoPath, + url: process.env.CORE_ENGINE_LLM_AI_URL, + apiKey: process.env.CORE_ENGINE_API_KEY, + }; + + return env; + } +); + +function getProtoPath(fileName: string) { + return isDev + ? resolve(__dirname, 'assets', fileName) + : resolve(__dirname, '.', 'assets', fileName); +} diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts index 752feb5..079451c 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts @@ -111,3 +111,19 @@ export interface ChatGPTService { metadata?: Metadata ): Observable; } + +export interface ChatOptions { + userInput: string; + key?: string; +} + +export interface ChatCompletionResponse { + response: string; +} + +export interface LLMAIService { + chat( + options: ChatOptions, + metadata?: Metadata + ): Observable; +} diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts index 939adb9..2d5acc5 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts @@ -21,7 +21,10 @@ import { ClientGrpc } from '@nestjs/microservices'; import { Metadata } from '@grpc/grpc-js'; import { splitString } from '../../utils/split-string'; import { delay } from '../../utils/delay'; -import { ChatGPTService } from '../../interface/chatgpt.service.interface'; +import { + ChatGPTService, + LLMAIService, +} from '../../interface/chatgpt.service.interface'; import { DiscordClientService } from '../discord-client/discord-client.service'; import { ChatGPTChant } from '../../interface/chatgpt-chant.enum'; import { DataSourceType } from '../../interface/data-source-type.enum'; @@ -31,6 +34,7 @@ import { AsgardLogger } from '@asgard-hub/nest-winston'; @Injectable() export class MessageService implements OnModuleInit { private chatGPTService: ChatGPTService; + private llmAIService: LLMAIService; private metadata = new Metadata(); constructor( @@ -39,6 +43,8 @@ export class MessageService implements OnModuleInit { private readonly options: DiscordBotModuleOptions, @Inject('CHATGPT_PACKAGE') private readonly grpcClient: ClientGrpc, + @Inject('LLMAI_PACKAGE') + private readonly llmaiGrpcClient: ClientGrpc, private readonly keywordService: SetupKeywordService, private readonly discordClientService: DiscordClientService ) {} @@ -46,6 +52,8 @@ export class MessageService implements OnModuleInit { async onModuleInit() { this.chatGPTService = this.grpcClient.getService('ChatGPTService'); + this.llmAIService = + this.llmaiGrpcClient.getService('LLMAIService'); this.metadata.set('authorization', this.options.config.rpcApiKey); this.metadata.set('azure-service', `${this.options.config.isAzureService}`); @@ -290,30 +298,18 @@ export class MessageService implements OnModuleInit { // show typing await (message.channel as TextChannel).sendTyping(); - // fetch all replied messages - let messageStack = await this.setupHistoryMessages(message); - - // if has ogg speech, convert to text - if (this.isOggSpeechRef(message)) { - messageStack = await this.setupOggSpeech(messageStack); - } - - this.asgardLogger.log(`setting up request...`); - const request = await this.setupGeneralHistoryMessages(messageStack); - request.forEach((r) => - this.asgardLogger.log(`${r.role}, ${r.name}: ${r.content}`) + const result = await lastValueFrom( + this.llmAIService.chat( + { + userInput: message.content, + }, + this.metadata + ) ); - this.asgardLogger.log(`setting up response...`); - const result = await this.responseUser(request, message.author.id); const response = result.response; - this.asgardLogger.log(`successfully get response`); - - this.asgardLogger.log(`prepare to send message...`); - await (message.channel as TextChannel).sendTyping(); - - await this.sendMessageReply(response, message, result.tokens); + await this.sendMessageReply(response, message); this.asgardLogger.log(`successfully send message: ${response}`); this.asgardLogger.log(`successfully send message`); } catch (e) { diff --git a/apps/yggdrasil-discord-client/src/assets/llmai.proto b/apps/yggdrasil-discord-client/src/assets/llmai.proto new file mode 100644 index 0000000..824882d --- /dev/null +++ b/apps/yggdrasil-discord-client/src/assets/llmai.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package llmai; + +service LLMAIService { + rpc Chat (ChatOptions) returns (ChatCompletionResponse); +} + +message ChatOptions { + string userInput = 1; + string key = 2; +} + +message ChatCompletionResponse { + string response = 1; +} + diff --git a/libs/nest-langchain/src/lib/interface/base-prompt.ts b/libs/nest-langchain/src/lib/interface/base-prompt.ts index 741dbc1..924aea0 100644 --- a/libs/nest-langchain/src/lib/interface/base-prompt.ts +++ b/libs/nest-langchain/src/lib/interface/base-prompt.ts @@ -3,9 +3,12 @@ import { ChatPromptTemplate } from 'langchain/prompts'; import { ChainValues } from 'langchain/schema'; import { z } from 'zod'; export interface BaseLangChainPrompt< - T extends ChainValues & ChatOpenAICallOptions + T extends ChainValues & ChatOpenAICallOptions, + U extends ChainValues & ChatOpenAICallOptions = ChainValues & + ChatOpenAICallOptions > { generatePrompt(): ChatPromptTemplate; getZodSchema(): z.AnyZodObject; generateInputVariables(params?: T): T; + parseOutputToString(output: U): string; } diff --git a/libs/nest-langchain/src/lib/interface/nest.langchain-params.ts b/libs/nest-langchain/src/lib/interface/nest.langchain-params.ts new file mode 100644 index 0000000..31735f1 --- /dev/null +++ b/libs/nest-langchain/src/lib/interface/nest.langchain-params.ts @@ -0,0 +1,22 @@ +import { ChatOpenAICallOptions } from 'langchain/chat_models/openai'; +import { ChainValues } from 'langchain/schema'; +import { Callbacks } from 'langchain/callbacks'; +import { BaseLangChainPrompt } from './base-prompt'; + +export class functionChainOption { + callbacks?: Callbacks; + tags?: string[]; + verbose?: boolean; +} + +export interface NestLangChainParams< + T extends ChainValues & ChatOpenAICallOptions +> { + input?: T; + langChainPromptType: { new (): BaseLangChainPrompt }; + options?: functionChainOption; +} + +export interface FunctionChainResponse { + output: T; +} diff --git a/libs/nest-langchain/src/lib/nest-langchain.service.ts b/libs/nest-langchain/src/lib/nest-langchain.service.ts index a681de2..6862be6 100644 --- a/libs/nest-langchain/src/lib/nest-langchain.service.ts +++ b/libs/nest-langchain/src/lib/nest-langchain.service.ts @@ -1,36 +1,14 @@ import { Inject, Injectable } from '@nestjs/common'; -import { - ChatOpenAI, - ChatOpenAICallOptions, -} from 'langchain/chat_models/openai'; +import { ChatOpenAICallOptions } from 'langchain/chat_models/openai'; import { NestLangChainAIChatOAuth } from './interface'; -import { ChainValues } from 'langchain/schema'; +import { ChainValues, HumanMessage } from 'langchain/schema'; import { LangChainProvider } from './provider/langchain/langchain.provider'; -import { Callbacks } from 'langchain/callbacks'; -import { BaseLangChainPrompt } from './interface/base-prompt'; import { NEST_LANGCHAIN_MODULE_OPTIONS } from './constants/nest.openai.client.constants'; - -export class functionChainOption { - callbacks?: Callbacks; - tags?: string[]; - verbose?: boolean; -} - -export interface NestLangChainParams { - input?: T; - langChainPromptType: { new (): BaseLangChainPrompt }; - options?: functionChainOption; -} - -export interface FunctionChainResponse { - output: T; -} - -function createInstance(type: { - new (): BaseLangChainPrompt; -}): BaseLangChainPrompt { - return new type(); -} +import { createInstance } from '../utils/utils'; +import { + NestLangChainParams, + FunctionChainResponse, +} from './interface/nest.langchain-params'; @Injectable() export class NestLangchainService { @@ -41,12 +19,17 @@ export class NestLangchainService { private readonly langchainProvider!: LangChainProvider; async getFunctionChainResponse< - T = ChainValues, + T extends ChainValues & ChatOpenAICallOptions = ChainValues & + ChatOpenAICallOptions, U extends ChainValues & ChatOpenAICallOptions = ChainValues & ChatOpenAICallOptions - >(params: NestLangChainParams): Promise { - // setup chatOpenAI - const llm = this.getChatOpenAI({ + >( + params: NestLangChainParams + ): Promise<{ + metaOutput: T; + message: string; + }> { + const llm = this.langchainProvider.getChatOpenAI({ ...this.nestLangChainAIChatOAuth, }); @@ -68,13 +51,18 @@ export class NestLangchainService { )) as FunctionChainResponse; return { - ...result.output, + metaOutput: { + ...result.output, + }, + message: langChainPrompt.parseOutputToString(result.output), }; } - getChatOpenAI(params: NestLangChainAIChatOAuth) { - return new ChatOpenAI({ - ...params, + async getGeneralChatResponse(userInput: string) { + const llm = this.langchainProvider.getChatOpenAI({ + ...this.nestLangChainAIChatOAuth, }); + + return await llm.call([new HumanMessage(userInput)]); } } diff --git a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts index 0b95181..501f265 100644 --- a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts +++ b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts @@ -6,6 +6,7 @@ import { import { ChatOpenAI } from 'langchain/chat_models/openai'; import { LLMChain } from 'langchain/dist'; import { z } from 'zod'; +import { NestLangChainAIChatOAuth } from '../../interface'; @Injectable() export class LangChainProvider { @@ -15,4 +16,10 @@ export class LangChainProvider { ): LLMChain { return createStructuredOutputChainFromZod(zodSchema, input); } + + getChatOpenAI(params: NestLangChainAIChatOAuth) { + return new ChatOpenAI({ + ...params, + }); + } } diff --git a/libs/nest-langchain/src/utils/utils.ts b/libs/nest-langchain/src/utils/utils.ts index 7e39be7..72523a9 100644 --- a/libs/nest-langchain/src/utils/utils.ts +++ b/libs/nest-langchain/src/utils/utils.ts @@ -1,3 +1,12 @@ +import { ChatOpenAICallOptions } from 'langchain/chat_models/openai'; +import { ChainValues } from 'langchain/schema'; import { uid } from 'uid'; +import { BaseLangChainPrompt } from '../lib/interface'; export const randomStringGenerator = () => uid(21); + +export function createInstance< + U extends ChainValues & ChatOpenAICallOptions +>(type: { new (): BaseLangChainPrompt }): BaseLangChainPrompt { + return new type(); +} diff --git a/libs/nest-winston/src/lib/nest-winston.module.ts b/libs/nest-winston/src/lib/nest-winston.module.ts index f213508..6646ac9 100644 --- a/libs/nest-winston/src/lib/nest-winston.module.ts +++ b/libs/nest-winston/src/lib/nest-winston.module.ts @@ -25,7 +25,6 @@ export class NestWinstonModule { static async registerAsync( options: NestWinstonModuleAsyncOptions ): Promise { - const createProviders = this.createAsyncProviders(options); return { module: NestWinstonModule, imports: [ @@ -57,7 +56,7 @@ export class NestWinstonModule { }), ], providers: [ - ...createProviders, + ...this.createAsyncProviders(options), { provide: NEST_WINSTON_MODULE_ID, useValue: randomStringGenerator(), diff --git a/libs/utils/src/index.ts b/libs/utils/src/index.ts index 5277703..84e4441 100644 --- a/libs/utils/src/index.ts +++ b/libs/utils/src/index.ts @@ -3,4 +3,5 @@ export * from './lib/character.text.splitter'; export * from './lib/delay'; export * from './lib/setup.request.message'; export * from './lib/chatgpt-chant.enum'; +export * from './lib/function-selection.enum'; export * from './lib/split.audio.file'; diff --git a/libs/utils/src/lib/chatgpt-chant.enum.ts b/libs/utils/src/lib/chatgpt-chant.enum.ts index 08eaa47..6a225dd 100644 --- a/libs/utils/src/lib/chatgpt-chant.enum.ts +++ b/libs/utils/src/lib/chatgpt-chant.enum.ts @@ -1,3 +1,6 @@ +/** + * @deprecated This controller is a v1 feature and will be removed in future versions. Please use the FunctionSelection instead. + */ export enum ChatGPTChant { general = 'general', translateToEnglish = 'translateToEnglish', diff --git a/libs/utils/src/lib/function-selection.enum.ts b/libs/utils/src/lib/function-selection.enum.ts new file mode 100644 index 0000000..2135e01 --- /dev/null +++ b/libs/utils/src/lib/function-selection.enum.ts @@ -0,0 +1,6 @@ +export enum FunctionSelection { + generalChat = 'generalChat', + anyTranslateToEnglish = 'anyTranslateToEnglish', + anyTranslateToChinese = 'anyTranslateToChinese', + anyTranslateToJapanese = 'anyTranslateToJapanese', +} diff --git a/package-lock.json b/package-lock.json index f865881..6bde48e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@nestjs/microservices": "^10.1.3", "@nestjs/mongoose": "^10.0.1", "@nestjs/platform-express": "10.1.3", - "@nestjs/schedule": "^3.0.2", + "@nestjs/schedule": "^3.0.3", "@sd0x/nest-openai-client": "^0.0.10", "@supercharge/promise-pool": "^2.4.0", "axios": "^1.4.0", @@ -55,7 +55,6 @@ "@nx/node": "16.7.2", "@nx/webpack": "16.7.2", "@nx/workspace": "16.7.2", - "@types/cron": "^2.4.0", "@types/jest": "^29.5.3", "@types/node": "~18.7.23", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -3232,11 +3231,11 @@ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, "node_modules/@nestjs/schedule": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.2.tgz", - "integrity": "sha512-INhpzkyquosLbVrXx4v+rfAnomwBTgKQvs7e9BZ2LSZdWQOqCQD2PmvWDiu8c4wdJIH6wcWQh98w5KxIcKuVBA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.3.tgz", + "integrity": "sha512-xsMA4dmP3LcW3rt2iMPfm88bDbCj/hLuDsLrKmJQlbnxyCYtBwLtmu/4cSfZELLM7pTDT+E8QDAqGwhYyUUjxg==", "dependencies": { - "cron": "2.4.0", + "cron": "2.4.1", "uuid": "9.0.0" }, "peerDependencies": { @@ -4285,16 +4284,6 @@ "@types/node": "*" } }, - "node_modules/@types/cron": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/cron/-/cron-2.4.0.tgz", - "integrity": "sha512-5bBaAkqvSFBX8JMi/xCofNzG5E594TNsApMz68dLd/sQYz/HGQqgcxGHTRjOvD4G3Y+YF1Oo3S7QdCvKt1KAJQ==", - "deprecated": "This is a stub types definition. cron provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "cron": "*" - } - }, "node_modules/@types/eslint": { "version": "8.44.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", @@ -7140,9 +7129,9 @@ "dev": true }, "node_modules/cron": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.0.tgz", - "integrity": "sha512-Cx77ic1TyIAtUggr0oAhtS8MLzPBUqGNIvdDM7jE3oFIxfe8LXWI9q3iQN/H2CebAiMir53LQKWOhEKnzkJTAQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.1.tgz", + "integrity": "sha512-ty0hUSPuENwDtIShDFxUxWEIsqiu2vhoFtt6Vwrbg4lHGtJX2/cV2p0hH6/qaEM9Pj+i6mQoau48BO5wBpkP4w==", "dependencies": { "luxon": "^3.2.1" } @@ -12181,9 +12170,9 @@ } }, "node_modules/luxon": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.0.tgz", - "integrity": "sha512-7eDo4Pt7aGhoCheGFIuq4Xa2fJm4ZpmldpGhjTYBNUYNCN6TIEP6v7chwwwt3KRp7YR+rghbfvjyo3V5y9hgBw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.1.tgz", + "integrity": "sha512-2USspxOCXWGIKHwuQ9XElxPPYrDOJHDQ5DQ870CoD+CxJbBnRDIBCfhioUJJjct7BKOy80Ia8cVstIcIMb/0+Q==", "engines": { "node": ">=12" } diff --git a/package.json b/package.json index c0b5f30..7cc4b48 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@nestjs/microservices": "^10.1.3", "@nestjs/mongoose": "^10.0.1", "@nestjs/platform-express": "10.1.3", - "@nestjs/schedule": "^3.0.2", + "@nestjs/schedule": "^3.0.3", "@sd0x/nest-openai-client": "^0.0.10", "@supercharge/promise-pool": "^2.4.0", "axios": "^1.4.0", @@ -51,7 +51,6 @@ "@nx/node": "16.7.2", "@nx/webpack": "16.7.2", "@nx/workspace": "16.7.2", - "@types/cron": "^2.4.0", "@types/jest": "^29.5.3", "@types/node": "~18.7.23", "@typescript-eslint/eslint-plugin": "5.62.0", From a8514dcd05db8aa6709708f7909c6f302ed0e3a6 Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 26 Aug 2023 02:00:40 +0800 Subject: [PATCH 06/13] fix(test): recover test --- .../src/app/auth/auth.guard.ts | 10 ++++++++-- .../llm-ai/llm-ai.controller.spec.ts | 18 +++++++++++++++++- .../lang-chain/lang-chain.service.spec.ts | 14 +++++++++++++- .../services/message/message.service.spec.ts | 8 ++++++++ .../src/lib/nest-langchain.service.spec.ts | 13 ++++++++++++- .../langchain/langchain.provider.spec.ts | 7 +++---- 6 files changed, 61 insertions(+), 9 deletions(-) diff --git a/apps/yggdrasil-core-engine/src/app/auth/auth.guard.ts b/apps/yggdrasil-core-engine/src/app/auth/auth.guard.ts index 36ba377..f4a7361 100644 --- a/apps/yggdrasil-core-engine/src/app/auth/auth.guard.ts +++ b/apps/yggdrasil-core-engine/src/app/auth/auth.guard.ts @@ -1,12 +1,18 @@ -import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; +import { + CanActivate, + ExecutionContext, + Inject, + Injectable, +} from '@nestjs/common'; import { Observable } from 'rxjs'; -import { AsgardLogger } from '@asgard-hub/nest-winston'; +import { AsgardLogger, AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; import { ConfigService } from '@nestjs/config'; import { ConfigPath, IAppConfig } from '../config/app.config'; @Injectable() export class AuthGuard implements CanActivate { constructor( + @Inject(AsgardLoggerSupplement.LOGGER_HELPER_SERVICE) private readonly asgardLogger: AsgardLogger, private readonly configService: ConfigService ) {} diff --git a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts index 3f81d90..45897dc 100644 --- a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts +++ b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts @@ -1,13 +1,29 @@ import { Test, TestingModule } from '@nestjs/testing'; import { LLMAIController } from './llm-ai.controller'; +import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; +import { AuthGuard } from '../../auth/auth.guard'; +import { LangChainService } from '../../llm-ai/lang-chain/lang-chain.service'; describe('LlmAiController', () => { let controller: LLMAIController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ + providers: [ + { + provide: AsgardLoggerSupplement.LOGGER_HELPER_SERVICE, + useValue: {}, + }, + { + provide: LangChainService, + useValue: {}, + }, + ], controllers: [LLMAIController], - }).compile(); + }) + .overrideGuard(AuthGuard) + .useValue({}) + .compile(); controller = module.get(LLMAIController); }); diff --git a/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts index f2ba057..801c10a 100644 --- a/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts @@ -1,12 +1,24 @@ import { Test, TestingModule } from '@nestjs/testing'; import { LangChainService } from './lang-chain.service'; +import { NestLangchainOptionsSupplement } from '@sd0x/nest-langchain'; +import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; describe('LangChainService', () => { let service: LangChainService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [LangChainService], + providers: [ + { + provide: NestLangchainOptionsSupplement.NEST_LANGCHAIN_SERVICE, + useValue: {}, + }, + { + provide: AsgardLoggerSupplement.LOGGER_HELPER_SERVICE, + useValue: {}, + }, + LangChainService, + ], }).compile(); service = module.get(LangChainService); diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.spec.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.spec.ts index b0485b6..550cbe4 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.spec.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.spec.ts @@ -39,6 +39,14 @@ describe('MessageService', () => { }), }, }, + { + provide: 'LLMAI_PACKAGE', + useValue: { + getService: jest.fn().mockImplementation(() => { + return {}; + }), + }, + }, { provide: SetupKeywordService, useValue: {}, diff --git a/libs/nest-langchain/src/lib/nest-langchain.service.spec.ts b/libs/nest-langchain/src/lib/nest-langchain.service.spec.ts index ea9abf4..2dcb14a 100644 --- a/libs/nest-langchain/src/lib/nest-langchain.service.spec.ts +++ b/libs/nest-langchain/src/lib/nest-langchain.service.spec.ts @@ -1,12 +1,23 @@ import { Test } from '@nestjs/testing'; import { NestLangchainService } from './nest-langchain.service'; +import { LangChainProvider } from './provider/langchain/langchain.provider'; describe('NestLangchainService', () => { let service: NestLangchainService; beforeEach(async () => { const module = await Test.createTestingModule({ - providers: [NestLangchainService], + providers: [ + { + provide: 'NEST_LANGCHAIN_MODULE_OPTIONS', + useValue: {}, + }, + { + provide: LangChainProvider, + useValue: {}, + }, + NestLangchainService, + ], }).compile(); service = module.get(NestLangchainService); diff --git a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts index 66068c7..2ba287d 100644 --- a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts +++ b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts @@ -1,7 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { LangChainProvider } from './langchain.provider'; -import { HahowNestWinstonOptionsSupplement } from '@hahowise-ai/hahow-nest-winston'; -import { MockHahowNestLoggerService } from '../../mock/mock-hahow-nest-logger.service.spec'; +import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; describe('Langchain', () => { let provider: LangChainProvider; @@ -10,8 +9,8 @@ describe('Langchain', () => { const module: TestingModule = await Test.createTestingModule({ providers: [ { - provide: HahowNestWinstonOptionsSupplement.HAHOW_LOGGER_SERVICE, - useValue: new MockHahowNestLoggerService(), + provide: 'LOGGER_HELPER_SERVICE', + useValue: {}, }, LangChainProvider, ], From 8142edf70041167ad53a3b412c3dbe269436b3de Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 26 Aug 2023 02:03:21 +0800 Subject: [PATCH 07/13] fix(ci): fix ci run --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 238b568..660bfc0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,7 +2,7 @@ name: CI on: push: branches: - - '*' + - '**/*' jobs: main: runs-on: ubuntu-latest From 9a6381e4c6571b7b5082c1d9938ea541f7e69dd2 Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 26 Aug 2023 02:06:20 +0800 Subject: [PATCH 08/13] fix(ci): add package codecov --- .github/workflows/main.yml | 2 +- libs/nest-langchain/jest.config.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 660bfc0..371d923 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,7 +31,7 @@ jobs: uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} - file: ./coverage/apps/yggdrasil-core-engine/lcov.info,./coverage/apps/yggdrasil-discord-client/lcov.info,./coverage/libs/nest-openai-client/lcov.info,./coverage/libs/nest-winston/lcov.info,./coverage/libs/utils/lcov.info + file: ./coverage/apps/yggdrasil-core-engine/lcov.info,./coverage/apps/yggdrasil-discord-client/lcov.info,./coverage/libs/nest-openai-client/lcov.info,./coverage/libs/nest-winston/lcov.info,./coverage/libs/utils/lcov.info,./coverage/libs/nest-langchain/lcov.info push_to_gitlab: # if branch is develop, push to gitlab develop branch if: github.ref == 'refs/heads/develop' diff --git a/libs/nest-langchain/jest.config.ts b/libs/nest-langchain/jest.config.ts index 85f621a..1713806 100644 --- a/libs/nest-langchain/jest.config.ts +++ b/libs/nest-langchain/jest.config.ts @@ -8,4 +8,5 @@ export default { }, moduleFileExtensions: ['ts', 'js', 'html'], coverageDirectory: '../../coverage/libs/nest-langchain', + coverageReporters: ['lcov'], }; From c7e12abe083d12eddad524164f0fbc82dd7614e6 Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 26 Aug 2023 02:10:41 +0800 Subject: [PATCH 09/13] fix(lint): fix lint --- .../app/services/chatgpt-gateway-service/chatgpt.service.ts | 2 +- libs/nest-langchain/package.json | 6 +++++- .../src/lib/provider/langchain/langchain.provider.spec.ts | 1 - 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts b/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts index 70d1eb0..c5a6409 100644 --- a/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts +++ b/apps/yggdrasil-core-engine/src/app/services/chatgpt-gateway-service/chatgpt.service.ts @@ -1,4 +1,4 @@ -import { Inject, Injectable } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { ChatGPTChant } from '@asgard-hub/utils'; import { ChatCompletionRequestMessage, diff --git a/libs/nest-langchain/package.json b/libs/nest-langchain/package.json index 5c5227b..4294de9 100644 --- a/libs/nest-langchain/package.json +++ b/libs/nest-langchain/package.json @@ -2,7 +2,11 @@ "name": "@sd0x/nest-langchain", "version": "0.0.1", "dependencies": { - "tslib": "^2.3.0" + "tslib": "^2.3.0", + "langchain": "^0.0.129", + "@nestjs/common": "^10.1.3", + "zod": "^3.22.0", + "uid": "^2.0.2" }, "type": "commonjs", "main": "./src/index.js", diff --git a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts index 2ba287d..d902846 100644 --- a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts +++ b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.spec.ts @@ -1,6 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; import { LangChainProvider } from './langchain.provider'; -import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; describe('Langchain', () => { let provider: LangChainProvider; From 3b13b857162ee2cfa48062d7aab1d3f90c74679a Mon Sep 17 00:00:00 2001 From: sd0 Date: Sat, 26 Aug 2023 16:47:46 +0800 Subject: [PATCH 10/13] feat(llms): finish stream call --- .../llm-ai/llm-ai.controller.spec.ts | 13 ++-- .../controllers/llm-ai/llm-ai.controller.ts | 57 ++++++--------- .../src/app/llm-ai/llm-ai.module.ts | 7 +- .../langchain/langchain.service.spec.ts} | 2 +- .../langchain/langchain.service.ts} | 13 ++-- .../service/llmai/llmai.service.spec.ts | 30 ++++++++ .../app/llm-ai/service/llmai/llmai.service.ts | 72 +++++++++++++++++++ .../src/assets/llmai/proto/llmai.proto | 10 ++- .../src/app/config/core.engine.config.ts | 4 +- .../interface/chatgpt.service.interface.ts | 11 ++- .../services/message/message.service.ts | 34 +++++---- .../src/assets/llmai.proto | 10 ++- .../provider/langchain/langchain.provider.ts | 4 +- 13 files changed, 187 insertions(+), 80 deletions(-) rename apps/yggdrasil-core-engine/src/app/llm-ai/{lang-chain/lang-chain.service.spec.ts => service/langchain/langchain.service.spec.ts} (93%) rename apps/yggdrasil-core-engine/src/app/llm-ai/{lang-chain/lang-chain.service.ts => service/langchain/langchain.service.ts} (86%) create mode 100644 apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.spec.ts create mode 100644 apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.ts diff --git a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts index 45897dc..07e3c00 100644 --- a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts +++ b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.spec.ts @@ -1,8 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { LLMAIController } from './llm-ai.controller'; -import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; import { AuthGuard } from '../../auth/auth.guard'; -import { LangChainService } from '../../llm-ai/lang-chain/lang-chain.service'; +import { LLMAIService } from '../../llm-ai/service/llmai/llmai.service'; describe('LlmAiController', () => { let controller: LLMAIController; @@ -11,12 +10,10 @@ describe('LlmAiController', () => { const module: TestingModule = await Test.createTestingModule({ providers: [ { - provide: AsgardLoggerSupplement.LOGGER_HELPER_SERVICE, - useValue: {}, - }, - { - provide: LangChainService, - useValue: {}, + provide: LLMAIService, + useValue: { + chat: jest.fn(), + }, }, ], controllers: [LLMAIController], diff --git a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts index 1699029..caecd72 100644 --- a/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts +++ b/apps/yggdrasil-core-engine/src/app/controllers/llm-ai/llm-ai.controller.ts @@ -1,10 +1,12 @@ import { Controller, Inject, UseGuards } from '@nestjs/common'; -import { LangChainService } from '../../llm-ai/lang-chain/lang-chain.service'; import { AuthGuard } from '../../auth/auth.guard'; import { FunctionSelection } from '@asgard-hub/utils'; -import { TranslateToEnglishPrompt } from '../../llm-ai/prompt/translate-to-english.prompt'; -import { GrpcMethod } from '@nestjs/microservices'; -import { AsgardLoggerSupplement, AsgardLogger } from '@asgard-hub/nest-winston'; +import { GrpcMethod, GrpcStreamMethod } from '@nestjs/microservices'; +import { + GrpcResponse, + LLMAIService, +} from '../../llm-ai/service/llmai/llmai.service'; +import { Observable, Subject, switchMap } from 'rxjs'; export interface ChatOptions { userInput: string; @@ -14,43 +16,26 @@ export interface ChatOptions { @UseGuards(AuthGuard) @Controller('llm-ai') export class LLMAIController { - @Inject(AsgardLoggerSupplement.LOGGER_HELPER_SERVICE) - private readonly asgardLogger: AsgardLogger; @Inject() - private readonly langChainService: LangChainService; + private readonly llmAIService: LLMAIService; @GrpcMethod('LLMAIService') - async chat(data: ChatOptions) { - const type = this.promptSelect(data.key); - let response = ''; - if (!type) { - response = await this.langChainService.getGeneralChatResponse( - data.userInput - ); - } else { - response = ( - await this.langChainService.getFunctionChainResponse( - data.userInput, - type - ) - ).message; - } + chat(data: ChatOptions) { + return this.llmAIService.chat(data); + } - this.asgardLogger.debug(response); + @GrpcStreamMethod('LLMAIService', 'ChatStream') + chatStream(data: Observable) { + const subject = new Subject(); - return { - response, - }; - } + data + .pipe( + switchMap((data) => { + return this.llmAIService.chat(data, subject); + }) + ) + .subscribe(); - promptSelect(key: FunctionSelection) { - switch (key) { - case FunctionSelection.generalChat: - return undefined; - case FunctionSelection.anyTranslateToEnglish: - return TranslateToEnglishPrompt; - default: - return undefined; - } + return subject.asObservable(); } } diff --git a/apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts index 3af0642..70e53c7 100644 --- a/apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/llm-ai.module.ts @@ -8,10 +8,11 @@ import { IAppConfig, ConfigPath } from '../config/app.config'; import { isDev, isStaging, isProd } from '../constants/common.constant'; import { EventEmitterModule } from '@nestjs/event-emitter'; import { LLMAIController } from '../controllers/llm-ai/llm-ai.controller'; -import { LangChainService } from './lang-chain/lang-chain.service'; +import { LangChainService } from './service/langchain/langchain.service'; import { NestLangChainModule } from '@sd0x/nest-langchain'; import { OpenAIProvider } from '../provider/open-ai/open-ai'; import { ProviderModule } from '../provider/provider.module'; +import { LLMAIService } from './service/llmai/llmai.service'; @Module({ imports: [ @@ -43,8 +44,8 @@ import { ProviderModule } from '../provider/provider.module'; MongoModule, DataSourceAdapterModule, ], - providers: [LangChainService], - exports: [LangChainService], + providers: [LangChainService, LLMAIService], + exports: [LLMAIService], controllers: [LLMAIController], }) export class LLMAIModule {} diff --git a/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/service/langchain/langchain.service.spec.ts similarity index 93% rename from apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts rename to apps/yggdrasil-core-engine/src/app/llm-ai/service/langchain/langchain.service.spec.ts index 801c10a..3452051 100644 --- a/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.spec.ts +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/service/langchain/langchain.service.spec.ts @@ -1,5 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { LangChainService } from './lang-chain.service'; +import { LangChainService } from './langchain.service'; import { NestLangchainOptionsSupplement } from '@sd0x/nest-langchain'; import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; diff --git a/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/service/langchain/langchain.service.ts similarity index 86% rename from apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.ts rename to apps/yggdrasil-core-engine/src/app/llm-ai/service/langchain/langchain.service.ts index d05875b..60e3b75 100644 --- a/apps/yggdrasil-core-engine/src/app/llm-ai/lang-chain/lang-chain.service.ts +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/service/langchain/langchain.service.ts @@ -20,16 +20,12 @@ export class LangChainService { userInput: string, langChainPromptType: { new (): BaseLangChainPrompt } ) { - const result = await this.nestLangchainService.getFunctionChainResponse({ + return this.nestLangchainService.getFunctionChainResponse({ input: { userInput, }, langChainPromptType, }); - - this.asgardLogger.debug(result); - - return result; } async getGeneralChatResponse(userInput: string) { @@ -37,6 +33,11 @@ export class LangChainService { userInput ); - return message.content; + return { + metaOutput: { + ...message, + }, + response: message.content, + }; } } diff --git a/apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.spec.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.spec.ts new file mode 100644 index 0000000..d2bc4ae --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.spec.ts @@ -0,0 +1,30 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LLMAIService } from './llmai.service'; +import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; +import { LangChainService } from '../langchain/langchain.service'; + +describe('LlmaiService', () => { + let service: LLMAIService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + { + provide: AsgardLoggerSupplement.LOGGER_HELPER_SERVICE, + useValue: {}, + }, + { + provide: LangChainService, + useValue: {}, + }, + LLMAIService, + ], + }).compile(); + + service = module.get(LLMAIService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.ts b/apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.ts new file mode 100644 index 0000000..0b36492 --- /dev/null +++ b/apps/yggdrasil-core-engine/src/app/llm-ai/service/llmai/llmai.service.ts @@ -0,0 +1,72 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { FunctionSelection } from '@asgard-hub/utils'; +import { AsgardLogger, AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; +import { LangChainService } from '../langchain/langchain.service'; +import { ChatOptions } from '../../../controllers/llm-ai/llm-ai.controller'; +import { TranslateToEnglishPrompt } from '../../prompt/translate-to-english.prompt'; +import { Subject, of, switchMap } from 'rxjs'; +import { randomUUID } from 'crypto'; + +export interface GrpcResponse { + id: string; + timestamp: number; + uuid: string; + event: string; + data: string | T; +} + +@Injectable() +export class LLMAIService { + @Inject(AsgardLoggerSupplement.LOGGER_HELPER_SERVICE) + private readonly asgardLogger: AsgardLogger; + @Inject() + private readonly langChainService: LangChainService; + chat(data: ChatOptions, subject?: Subject) { + return of(this.promptSelect(data.key)).pipe( + switchMap((prompt) => { + subject?.next({ + id: 'prompt', + timestamp: Date.now(), + uuid: randomUUID(), + event: 'notification', + data: prompt?.name ?? FunctionSelection.generalChat, + }); + return of(prompt); + }), + switchMap(async (type) => { + if (!type) { + return await this.langChainService.getGeneralChatResponse( + data.userInput + ); + } else { + return await this.langChainService.getFunctionChainResponse( + data.userInput, + type + ); + } + }), + switchMap((response) => { + subject?.next({ + id: 'response', + timestamp: Date.now(), + uuid: randomUUID(), + event: 'message', + data: JSON.stringify(response), + }); + this.asgardLogger.debug(response); + return of(subject.complete()); + }) + ); + } + + private promptSelect(key: FunctionSelection) { + switch (key) { + case FunctionSelection.generalChat: + return undefined; + case FunctionSelection.anyTranslateToEnglish: + return TranslateToEnglishPrompt; + default: + return undefined; + } + } +} diff --git a/apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto b/apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto index 824882d..8cbb3bf 100644 --- a/apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto +++ b/apps/yggdrasil-core-engine/src/assets/llmai/proto/llmai.proto @@ -4,6 +4,7 @@ package llmai; service LLMAIService { rpc Chat (ChatOptions) returns (ChatCompletionResponse); + rpc ChatStream (stream ChatOptions) returns (stream ChatCompletionResponse); } message ChatOptions { @@ -12,6 +13,9 @@ message ChatOptions { } message ChatCompletionResponse { - string response = 1; -} - + string id = 1; + int32 timestamp = 2; + string uuid = 3; + string event = 4; + string data = 5; +} \ No newline at end of file diff --git a/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts b/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts index 8da42b2..68f5659 100644 --- a/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts +++ b/apps/yggdrasil-discord-client/src/app/config/core.engine.config.ts @@ -40,7 +40,7 @@ export const coreEngineLLMAIConfig = registerAs( ); function getProtoPath(fileName: string) { - return isDev - ? resolve(__dirname, 'assets', fileName) + return process.env['IS_DEBUG'] + ? resolve(__dirname, '..', '..', 'assets', fileName) : resolve(__dirname, '.', 'assets', fileName); } diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts index 079451c..2dfce2e 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/interface/chatgpt.service.interface.ts @@ -118,7 +118,11 @@ export interface ChatOptions { } export interface ChatCompletionResponse { - response: string; + id: string; + timestamp: number; + event: string; + uuid: string; + data: string; } export interface LLMAIService { @@ -126,4 +130,9 @@ export interface LLMAIService { options: ChatOptions, metadata?: Metadata ): Observable; + + chatStream( + options: Observable, + metadata?: Metadata + ): Observable; } diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts index 2d5acc5..d607484 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts @@ -8,7 +8,7 @@ import { ThreadChannel, } from 'discord.js'; import { List, Stack } from 'immutable'; -import { lastValueFrom } from 'rxjs'; +import { ReplaySubject, lastValueFrom, switchMap } from 'rxjs'; import { DISCORD_BOT_MODULE_OPTIONS, DiSCORD_SPLIT_MESSAGE_TARGET, @@ -23,6 +23,7 @@ import { splitString } from '../../utils/split-string'; import { delay } from '../../utils/delay'; import { ChatGPTService, + ChatOptions, LLMAIService, } from '../../interface/chatgpt.service.interface'; import { DiscordClientService } from '../discord-client/discord-client.service'; @@ -297,21 +298,24 @@ export class MessageService implements OnModuleInit { try { // show typing await (message.channel as TextChannel).sendTyping(); - - const result = await lastValueFrom( - this.llmAIService.chat( - { - userInput: message.content, - }, - this.metadata + const request$ = new ReplaySubject(); + request$.next({ + userInput: message.content, + }); + request$.complete(); + this.llmAIService + .chatStream(request$, this.metadata) + .pipe( + switchMap(async (result) => { + await this.sendMessageReply(result?.data, message); + + this.asgardLogger.log( + `successfully send message: ${result?.data}` + ); + this.asgardLogger.log(`successfully send message`); + }) ) - ); - - const response = result.response; - - await this.sendMessageReply(response, message); - this.asgardLogger.log(`successfully send message: ${response}`); - this.asgardLogger.log(`successfully send message`); + .subscribe(); } catch (e) { this.asgardLogger.error(e); await this.sendMessageReply( diff --git a/apps/yggdrasil-discord-client/src/assets/llmai.proto b/apps/yggdrasil-discord-client/src/assets/llmai.proto index 824882d..8cbb3bf 100644 --- a/apps/yggdrasil-discord-client/src/assets/llmai.proto +++ b/apps/yggdrasil-discord-client/src/assets/llmai.proto @@ -4,6 +4,7 @@ package llmai; service LLMAIService { rpc Chat (ChatOptions) returns (ChatCompletionResponse); + rpc ChatStream (stream ChatOptions) returns (stream ChatCompletionResponse); } message ChatOptions { @@ -12,6 +13,9 @@ message ChatOptions { } message ChatCompletionResponse { - string response = 1; -} - + string id = 1; + int32 timestamp = 2; + string uuid = 3; + string event = 4; + string data = 5; +} \ No newline at end of file diff --git a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts index 501f265..dfb0a6d 100644 --- a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts +++ b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts @@ -1,4 +1,4 @@ -import { Injectable, Scope } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { StructuredOutputChainInput, createStructuredOutputChainFromZod, @@ -13,7 +13,7 @@ export class LangChainProvider { createStructuredOutputChainFromZod( zodSchema: T, input: Omit - ): LLMChain { + ): LLMChain { return createStructuredOutputChainFromZod(zodSchema, input); } From 90fe7dc4a1e8ef7b7fa2436f29453e314813263d Mon Sep 17 00:00:00 2001 From: sd0 Date: Sun, 27 Aug 2023 12:10:53 +0800 Subject: [PATCH 11/13] =?UTF-8?q?feat(chat):=20=E8=AA=BF=E6=95=B4=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E8=88=87=E7=9B=A3=E8=81=BD=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/message.controller.ts | 8 + .../src/app/discord-bot/discord-bot.module.ts | 8 +- .../app/discord-bot/discord-bot.service.ts | 284 +++++++++++------- .../services/llmai/llmai.chat.service.spec.ts | 42 +++ .../services/llmai/llmai.chat.service.ts | 79 +++++ .../services/message/message.service.ts | 67 +++-- libs/nest-langchain/package.json | 2 +- package-lock.json | 82 ++++- package.json | 2 +- 9 files changed, 418 insertions(+), 156 deletions(-) create mode 100644 apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.spec.ts create mode 100644 apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.ts diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/controller/message.controller.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/controller/message.controller.ts index 4e94fb6..92458a8 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/controller/message.controller.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/controller/message.controller.ts @@ -7,11 +7,19 @@ import { DataSourceType } from '../interface/data-source-type.enum'; export class MessageController { constructor(private readonly messageService: MessageService) {} + /** + * @deprecated in v1, use `chatbot:discord:llm:ai:chat` instead + */ @EventPattern('chatbot:discord:chat') async handleChatCreatedEvent(data: any) { await this.messageService.createResponse(data); } + @EventPattern('chatbot:discord:llm:ai:chat') + async handleLLMAIChatCreatedEvent(data: any) { + await this.messageService.createResponse(data); + } + @EventPattern('chatbot:discord:chat:url:docs') async handleUrlDocsCreatedEvent(data: any) { if (data.type === DataSourceType.URL) { diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.module.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.module.ts index 26e3360..ffe3672 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.module.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.module.ts @@ -16,9 +16,15 @@ import { SetupKeywordService } from './services/setup-keyword/setup-keyword.serv import { MessageService } from './services/message/message.service'; import { DiscordClientService } from './services/discord-client/discord-client.service'; import { MessageController } from './controller/message.controller'; +import { LLMAIChatService } from './services/llmai/llmai.chat.service'; @Module({ - providers: [SetupKeywordService, MessageService, DiscordClientService], + providers: [ + SetupKeywordService, + MessageService, + DiscordClientService, + LLMAIChatService, + ], controllers: [MessageController], }) export class DiscordBotModule { diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts index 9524c35..45dff17 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts @@ -9,7 +9,18 @@ import { validateYoutubeUrl } from './utils/validate-youtube-url'; import { DataSourceType } from './interface/data-source-type.enum'; import { ClientProxy } from '@nestjs/microservices'; import { DiscordClientService } from './services/discord-client/discord-client.service'; -import { lastValueFrom } from 'rxjs'; +import { + Subject, + catchError, + finalize, + from, + lastValueFrom, + of, + switchMap, + take, + takeUntil, + toArray, +} from 'rxjs'; @Injectable() export class DiscordBotService implements OnApplicationBootstrap { @@ -61,127 +72,176 @@ export class DiscordBotService implements OnApplicationBootstrap { }; // message create listeners - private messageCreateListeners = async ( - message: Message - ): Promise => { - if (message.author.bot) return; - - const isNotNeedToResponse = this.isNotNeedToResponse(message); - if (isNotNeedToResponse) { - this.asgardLogger.log('not prod and not develop channel, so no response'); - return; - } - - const isDisableBotChannel = this.isDisableBotChannel(message); - if (isDisableBotChannel) { - this.asgardLogger.log('this channel is disable bot channel'); - return; - } - - const isNeedToResponse = this.isNeedToResponse(message); - this.asgardLogger.verbose(`isUserCreateMessage: ${isNeedToResponse}`); + private messageCreateListeners = (message: Message) => { + this.messageCreateListenerObservers(message).subscribe({ + error: (e) => { + this.asgardLogger.error(e); + }, + complete: () => { + this.asgardLogger.log(`${message?.author} create listener complete`); + }, + }); + }; - // if message is a reply - this.asgardLogger.log( - `message is a reply: ${message?.reference ? true : false}` + private messageCreateListenerObservers(message: Message) { + const stopSignal$ = new Subject(); + return from([ + this.checkIsBotMessage(message), + this.checkShouldReply(message), + this.checkIsDisableBotChannel(message), + ]).pipe( + take(3), + toArray(), + switchMap((mods) => { + if (mods.some((mod) => mod === true)) { + stopSignal$.next('STOP'); + } + return of(message); + }), + switchMap(async (message) => { + const isNeedToResponse = this.isNeedToResponse(message); + this.asgardLogger.verbose(`isUserCreateMessage: ${isNeedToResponse}`); + + // if message is a reply + this.asgardLogger.log( + `message have reference: ${message?.reference ? true : false}` + ); + if (await this.isReferenceAndNeedToResponse(message)) { + this.asgardLogger.verbose('is a reply message'); + return this.botClient.emit('chatbot:discord:chat', message); + } + + if (!isNeedToResponse) { + return this.asgardLogger.log( + 'not user create message, so no response' + ); + } + + // if message is a url + const messageContent = message.content + .replace(`<@${this.options.discordOptions.discordBotClientId}>`, '') + .trim(); + + //validate youtube url + const isYtRequest = validateYoutubeUrl(messageContent); + if (isYtRequest) { + this.asgardLogger.log(`message is a youtube url: ${isYtRequest}`); + if ( + !this.options.discordOptions?.alphaWhitelistedUserIds?.includes( + message.author.id + ) + ) { + return this.botClient.emit('chatbot:discord:chat:reply', { + text: '🎁 目前只有白名單的人才能使用此功能,請聯絡管理員開通', + message, + }); + } + + return this.botClient.emit( + 'chatbot:discord:chat:url:youtube', + message + ); + } + + if (this.hasPDFAttachment(message)) { + return this.botClient.emit('chatbot:discord:chat:url:docs', { + message, + type: DataSourceType.PDF, + }); + } + + if (this.hasTXTAttachment(message)) { + return this.botClient.emit('chatbot:discord:chat:url:docs', { + message, + type: DataSourceType.TXT, + }); + } + + if (this.hasImageAttachment(message)) { + return this.botClient.emit('chatbot:discord:chat:url:docs', { + message, + type: DataSourceType.TXT, + }); + } + + if (messageContent.startsWith('url')) { + return this.botClient.emit('chatbot:discord:chat:url:docs', { + message, + type: DataSourceType.URL, + }); + } + + if (this.hasAudioWithMP3OrWAVAttachment(message)) { + return this.botClient.emit( + 'chatbot:discord:chat:audio:transcription', + message + ); + } + + if (this.hasAudioAttachment(message)) { + const transcriptionMessage = await lastValueFrom( + this.botClient.send( + 'chatbot:discord:chat:audio:transcription', + message + ) + ); + + if (!this.isPermanentChannel(message)) { + return this.asgardLogger.log( + 'not in permanent channel, so no response' + ); + } + + message.content = transcriptionMessage?.content; + } + + if (this.isEmptyMessage(message)) { + return this.asgardLogger.log('message is empty, so no response'); + } + + return this.botClient.emit('chatbot:discord:llm:ai:chat', message); + }), + takeUntil(stopSignal$), + catchError((e) => { + this.asgardLogger.error(e?.message, e?.stack, e); + return of(e); + }), + finalize(() => { + this.asgardLogger.debug('message create listener finalize'); + }) ); - if (await this.isReferenceAndNeedToResponse(message)) { - this.asgardLogger.verbose('is a reply message'); - this.botClient.emit('chatbot:discord:chat', message); - return; - } - - if (!isNeedToResponse) { - this.asgardLogger.log('not user create message, so no response'); - return; - } + } - // if message is a url - const messageContent = message.content - .replace(`<@${this.options.discordOptions.discordBotClientId}>`, '') - .trim(); - - //validate youtube url - const isYtRequest = validateYoutubeUrl(messageContent); - if (isYtRequest) { - this.asgardLogger.log(`message is a youtube url: ${isYtRequest}`); - if ( - !this.options.discordOptions?.alphaWhitelistedUserIds?.includes( - message.author.id - ) - ) { - this.botClient.emit('chatbot:discord:chat:reply', { - text: '🎁 目前只有白名單的人才能使用此功能,請聯絡管理員開通', - message, - }); - return; + private checkIsDisableBotChannel(message: Message): boolean { + return (() => { + const isDisableBotChannel = this.isDisableBotChannel(message); + if (isDisableBotChannel) { + this.asgardLogger.log('this channel is disable bot channel'); } - this.botClient.emit('chatbot:discord:chat:url:youtube', message); - return; - } - - if (this.hasPDFAttachment(message)) { - this.botClient.emit('chatbot:discord:chat:url:docs', { - message, - type: DataSourceType.PDF, - }); - return; - } - - if (this.hasTXTAttachment(message)) { - this.botClient.emit('chatbot:discord:chat:url:docs', { - message, - type: DataSourceType.TXT, - }); - - return; - } - - if (this.hasImageAttachment(message)) { - this.botClient.emit('chatbot:discord:chat:url:docs', { - message, - type: DataSourceType.TXT, - }); - - return; - } - - if (messageContent.startsWith('url')) { - this.botClient.emit('chatbot:discord:chat:url:docs', { - message, - type: DataSourceType.URL, - }); - - return; - } - - if (this.hasAudioWithMP3OrWAVAttachment(message)) { - this.botClient.emit('chatbot:discord:chat:audio:transcription', message); - return; - } + return isDisableBotChannel; + })(); + } - if (this.hasAudioAttachment(message)) { - const transcriptionMessage = await lastValueFrom( - this.botClient.send('chatbot:discord:chat:audio:transcription', message) - ); + private checkShouldReply(message: Message): boolean { + return (() => { + const isNotNeedToResponse = this.isNotNeedToResponse(message); - if (!this.isPermanentChannel(message)) { - this.asgardLogger.log('not in permanent channel, so no response'); - return; + if (isNotNeedToResponse) { + this.asgardLogger.log( + 'not prod and not develop channel, so no response' + ); } - message.content = transcriptionMessage?.content; - } - - if (this.isEmptyMessage(message)) { - this.asgardLogger.log('message is empty, so no response'); - return; - } + return isNotNeedToResponse; + })(); + } - this.botClient.emit('chatbot:discord:chat', message); - return; - }; + private checkIsBotMessage(message: Message): boolean { + return (() => { + if (message.author.bot) return true; + })(); + } private isNeedToResponse(message: Message) { const atBot = `<@${this.options.discordOptions.discordBotClientId}>`; diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.spec.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.spec.ts new file mode 100644 index 0000000..b5c31b1 --- /dev/null +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.spec.ts @@ -0,0 +1,42 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LLMAIChatService } from './llmai.chat.service'; +import { AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; +import { MessageService } from '../message/message.service'; + +describe('LLMAIChatService', () => { + let service: LLMAIChatService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + { + provide: AsgardLoggerSupplement.LOGGER_HELPER_SERVICE, + useValue: {}, + }, + { + provide: 'LLMAI_PACKAGE', + useValue: { + getService: jest.fn().mockImplementation(() => { + return {}; + }), + }, + }, + { + provide: 'DISCORD_BOT_MODULE_OPTIONS', + useValue: {}, + }, + { + provide: MessageService, + useValue: {}, + }, + LLMAIChatService, + ], + }).compile(); + + service = module.get(LLMAIChatService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.ts new file mode 100644 index 0000000..a4ea909 --- /dev/null +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/services/llmai/llmai.chat.service.ts @@ -0,0 +1,79 @@ +import { Metadata } from '@grpc/grpc-js'; +import { Inject, Injectable } from '@nestjs/common'; +import { ClientGrpc } from '@nestjs/microservices'; +import { Message, TextChannel } from 'discord.js'; +import { ReplaySubject, switchMap, catchError } from 'rxjs'; +import { AsgardLogger, AsgardLoggerSupplement } from '@asgard-hub/nest-winston'; +import { DISCORD_BOT_MODULE_OPTIONS } from '../../constants/discord-bot.constants'; +import { + ChatOptions, + LLMAIService, +} from '../../interface/chatgpt.service.interface'; +import { DiscordBotModuleOptions } from '../../interface/discord-bot-module'; +import { MessageService } from '../message/message.service'; + +@Injectable() +export class LLMAIChatService { + private llmAIService: LLMAIService; + private metadata = new Metadata(); + + @Inject(AsgardLoggerSupplement.LOGGER_HELPER_SERVICE) + private readonly asgardLogger: AsgardLogger; + @Inject(DISCORD_BOT_MODULE_OPTIONS) + private readonly options: DiscordBotModuleOptions; + @Inject('LLMAI_PACKAGE') + private readonly llmaiGrpcClient: ClientGrpc; + @Inject() + private readonly messageService: MessageService; + + async onModuleInit() { + this.llmAIService = + this.llmaiGrpcClient.getService('LLMAIService'); + + this.metadata.set('authorization', this.options.config.rpcApiKey); + this.metadata.set('azure-service', `${this.options.config.isAzureService}`); + } + + async createResponse(message: Message) { + message = await this.messageService.getRefreshedMessage(message); + + // show typing + await (message.channel as TextChannel).sendTyping(); + const request$ = new ReplaySubject(); + request$.next({ + userInput: message.content, + }); + request$.complete(); + + const subscription = this.llmAIService + .chatStream(request$, this.metadata) + .pipe( + switchMap(async (result) => { + const isMessage = result.event === 'message'; + + const response = isMessage + ? JSON.parse(result.data).response + : result.data; + + isMessage && + (await this.messageService.sendMessageReply(response, message)); + + this.asgardLogger.log(`successfully send message: ${response}`); + }), + catchError(async (e) => { + this.asgardLogger.error(e); + await this.messageService.sendMessageReply( + `很遺憾,目前暫時無法服務您。請稍後再試, Message: ${e?.message}`, + message + ); + return; + }) + ) + .subscribe({ + complete: () => { + this.asgardLogger.log(`complete subscription`); + subscription.unsubscribe(); + }, + }); + } +} diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts index d607484..4827b9a 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/services/message/message.service.ts @@ -8,7 +8,7 @@ import { ThreadChannel, } from 'discord.js'; import { List, Stack } from 'immutable'; -import { ReplaySubject, lastValueFrom, switchMap } from 'rxjs'; +import { ReplaySubject, catchError, lastValueFrom, of, switchMap } from 'rxjs'; import { DISCORD_BOT_MODULE_OPTIONS, DiSCORD_SPLIT_MESSAGE_TARGET, @@ -295,37 +295,46 @@ export class MessageService implements OnModuleInit { async createResponse(message: Message) { message = await this.getRefreshedMessage(message); - try { - // show typing - await (message.channel as TextChannel).sendTyping(); - const request$ = new ReplaySubject(); - request$.next({ - userInput: message.content, + // show typing + await (message.channel as TextChannel).sendTyping(); + const request$ = new ReplaySubject(); + request$.next({ + userInput: message.content, + }); + request$.complete(); + + const subscription = this.llmAIService + .chatStream(request$, this.metadata) + .pipe( + switchMap(async (result) => { + const isMessage = result.event === 'message'; + + const response = isMessage + ? JSON.parse(result.data).response + : result.data; + + isMessage && (await this.sendMessageReply(response, message)); + + this.asgardLogger.log(`successfully send message: ${response}`); + }), + catchError(async (e) => { + this.asgardLogger.error(e); + await this.sendMessageReply( + `很遺憾,目前暫時無法服務您。請稍後再試, Message: ${e?.message}`, + message + ); + return; + }) + ) + .subscribe({ + complete: () => { + this.asgardLogger.log(`complete subscription`); + subscription.unsubscribe(); + }, }); - request$.complete(); - this.llmAIService - .chatStream(request$, this.metadata) - .pipe( - switchMap(async (result) => { - await this.sendMessageReply(result?.data, message); - - this.asgardLogger.log( - `successfully send message: ${result?.data}` - ); - this.asgardLogger.log(`successfully send message`); - }) - ) - .subscribe(); - } catch (e) { - this.asgardLogger.error(e); - await this.sendMessageReply( - `很遺憾,目前暫時無法服務您。請稍後再試, Message: ${e?.message}`, - message - ); - } } - private async getRefreshedMessage(message: Message) { + async getRefreshedMessage(message: Message) { const client = this.discordClientService.dClient; const refreshedChannel: TextChannel = (await client.channels.fetch( message.channelId, diff --git a/libs/nest-langchain/package.json b/libs/nest-langchain/package.json index 4294de9..f29509a 100644 --- a/libs/nest-langchain/package.json +++ b/libs/nest-langchain/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "dependencies": { "tslib": "^2.3.0", - "langchain": "^0.0.129", + "langchain": "^0.0.135", "@nestjs/common": "^10.1.3", "zod": "^3.22.0", "uid": "^2.0.2" diff --git a/package-lock.json b/package-lock.json index 6bde48e..1e181f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "fluent-ffmpeg": "^2.1.2", "form-data": "^4.0.0", "ioredis": "^5.3.2", - "langchain": "^0.0.129", + "langchain": "^0.0.135", "mongoose": "^7.2.3", "nest-winston": "^1.9.2", "nodejieba": "^2.6.0", @@ -3012,6 +3012,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.4.tgz", "integrity": "sha512-MCgZyANpJ6msfvVMi6+A0UAsvZj//4OHREYUB9f2087uXHVoU+H+SWhuihvb1beKpM323bReQPRio0WNk2+V6g==", + "optional": true, "peer": true, "engines": { "node": ">=14.0.0" @@ -5468,7 +5469,8 @@ "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "devOptional": true }, "node_modules/abbrev": { "version": "1.1.1", @@ -7402,6 +7404,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "optional": true, "peer": true, "dependencies": { "rrweb-cssom": "^0.6.0" @@ -7434,6 +7437,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "optional": true, "peer": true, "dependencies": { "abab": "^2.0.6", @@ -7478,6 +7482,7 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "optional": true, "peer": true }, "node_modules/decompress-response": { @@ -7753,6 +7758,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "optional": true, "peer": true, "dependencies": { "webidl-conversions": "^7.0.0" @@ -9717,6 +9723,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "optional": true, "peer": true, "dependencies": { "whatwg-encoding": "^2.0.0" @@ -10234,6 +10241,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "optional": true, "peer": true }, "node_modules/is-promise": { @@ -11164,6 +11172,7 @@ "version": "22.1.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "optional": true, "peer": true, "dependencies": { "abab": "^2.0.6", @@ -11206,6 +11215,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "optional": true, "peer": true, "dependencies": { "entities": "^4.4.0" @@ -11468,9 +11478,9 @@ "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "node_modules/langchain": { - "version": "0.0.129", - "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.0.129.tgz", - "integrity": "sha512-KHJANXuwaq4CJ23HbLfp4c23S75UsI4Mh5yXIZT5bdsivLN4YmMphIudPMf27Y+5gZbiJzjlZFeM116M0RQ52Q==", + "version": "0.0.135", + "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.0.135.tgz", + "integrity": "sha512-H/WdGi6o4BkkD6dU6KlC0U5TAOA22yiuf+kS6AmN16QPSTU25JtcZZK3kYx+0luoJE1iCsxrec09D7Fgy3hEUQ==", "dependencies": { "@anthropic-ai/sdk": "^0.5.7", "ansi-styles": "^5.0.0", @@ -11482,7 +11492,7 @@ "js-tiktoken": "^1.0.7", "js-yaml": "^4.1.0", "jsonpointer": "^5.0.1", - "langsmith": "~0.0.16", + "langsmith": "~0.0.26", "ml-distance": "^4.0.0", "object-hash": "^3.0.0", "openai": "^3.3.0", @@ -11524,6 +11534,8 @@ "@planetscale/database": "^1.8.0", "@qdrant/js-client-rest": "^1.2.0", "@raycast/api": "^1.55.2", + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", "@supabase/postgrest-js": "^1.1.1", "@supabase/supabase-js": "^2.10.0", "@tensorflow-models/universal-sentence-encoder": "*", @@ -11531,6 +11543,7 @@ "@tensorflow/tfjs-core": "*", "@tigrisdata/vector": "^1.1.0", "@upstash/redis": "^1.20.6", + "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.25.1", "@zilliz/milvus2-sdk-node": ">=2.2.7", "apify-client": "^2.7.1", @@ -11548,6 +11561,7 @@ "ignore": "^5.2.0", "ioredis": "^5.3.2", "jsdom": "*", + "langchainhub": "~0.0.3", "mammoth": "*", "mongodb": "^5.2.0", "mysql2": "^3.3.3", @@ -11567,7 +11581,9 @@ "typesense": "^1.5.3", "usearch": "^1.1.1", "vectordb": "^0.1.4", - "weaviate-ts-client": "^1.4.0" + "weaviate-ts-client": "^1.4.0", + "youtube-transcript": "^1.0.6", + "youtubei.js": "^5.8.0" }, "peerDependenciesMeta": { "@aws-crypto/sha256-js": { @@ -11627,6 +11643,9 @@ "@huggingface/inference": { "optional": true }, + "@mozilla/readability": { + "optional": true + }, "@notionhq/client": { "optional": true }, @@ -11645,6 +11664,12 @@ "@raycast/api": { "optional": true }, + "@smithy/eventstream-codec": { + "optional": true + }, + "@smithy/util-utf8": { + "optional": true + }, "@supabase/postgrest-js": { "optional": true }, @@ -11666,6 +11691,9 @@ "@upstash/redis": { "optional": true }, + "@writerai/writer-sdk": { + "optional": true + }, "@xata.io/client": { "optional": true }, @@ -11714,6 +11742,12 @@ "ioredis": { "optional": true }, + "jsdom": { + "optional": true + }, + "langchainhub": { + "optional": true + }, "mammoth": { "optional": true }, @@ -11773,6 +11807,12 @@ }, "weaviate-ts-client": { "optional": true + }, + "youtube-transcript": { + "optional": true + }, + "youtubei.js": { + "optional": true } } }, @@ -11823,9 +11863,9 @@ } }, "node_modules/langsmith": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.0.24.tgz", - "integrity": "sha512-wp04/ZPUZThVIJ817i4eqpyi2t/SWYeXBRbSr2I9S49AdSoou27X7ZGjmGyKL7U+bQRA7LrPgmcalhq0PUivWQ==", + "version": "0.0.26", + "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.0.26.tgz", + "integrity": "sha512-TecBjdgYGMxNaWp2L2X0OVgu8lge2WeQ5UpDXluwF3x+kH/WHFVSuR1RCuP+k2628GSVFvXxVIyXvzrHYxrZSw==", "dependencies": { "@types/uuid": "^9.0.1", "commander": "^10.0.1", @@ -13048,6 +13088,7 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "optional": true, "peer": true }, "node_modules/nx": { @@ -14635,7 +14676,8 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "devOptional": true }, "node_modules/punycode": { "version": "2.3.0", @@ -14679,6 +14721,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "optional": true, "peer": true }, "node_modules/queue-microtask": { @@ -15002,7 +15045,8 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "devOptional": true }, "node_modules/requizzle": { "version": "0.2.4", @@ -15120,6 +15164,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "optional": true, "peer": true }, "node_modules/run-parallel": { @@ -15262,6 +15307,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "optional": true, "peer": true, "dependencies": { "xmlchars": "^2.2.0" @@ -16154,6 +16200,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "optional": true, "peer": true }, "node_modules/tapable": { @@ -16485,6 +16532,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "optional": true, "peer": true, "dependencies": { "psl": "^1.1.33", @@ -16500,6 +16548,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "optional": true, "peer": true, "engines": { "node": ">= 4.0.0" @@ -16509,6 +16558,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "optional": true, "peer": true, "dependencies": { "punycode": "^2.3.0" @@ -16938,6 +16988,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "optional": true, "peer": true, "dependencies": { "querystringify": "^2.1.1", @@ -17247,6 +17298,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "optional": true, "peer": true, "dependencies": { "xml-name-validator": "^4.0.0" @@ -17564,6 +17616,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "optional": true, "peer": true, "dependencies": { "iconv-lite": "0.6.3" @@ -17576,6 +17629,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -17588,6 +17642,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "optional": true, "peer": true, "engines": { "node": ">=12" @@ -17597,6 +17652,7 @@ "version": "12.0.1", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "optional": true, "peer": true, "dependencies": { "tr46": "^4.1.1", @@ -17734,6 +17790,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "optional": true, "peer": true, "engines": { "node": ">=12" @@ -17743,6 +17800,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "optional": true, "peer": true }, "node_modules/xmlcreate": { diff --git a/package.json b/package.json index 7cc4b48..2493b29 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "fluent-ffmpeg": "^2.1.2", "form-data": "^4.0.0", "ioredis": "^5.3.2", - "langchain": "^0.0.129", + "langchain": "^0.0.135", "mongoose": "^7.2.3", "nest-winston": "^1.9.2", "nodejieba": "^2.6.0", From 84243bbb7bd6fc4202e6c4b085cab22703c40401 Mon Sep 17 00:00:00 2001 From: sd0 Date: Sun, 24 Sep 2023 14:46:55 +0800 Subject: [PATCH 12/13] fix(rx): fix from to forkJoin --- apps/yggdrasil-core-engine/src/app/app.controller.ts | 2 +- .../src/app/discord-bot/discord-bot.service.ts | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/yggdrasil-core-engine/src/app/app.controller.ts b/apps/yggdrasil-core-engine/src/app/app.controller.ts index 82248fa..0f2acec 100644 --- a/apps/yggdrasil-core-engine/src/app/app.controller.ts +++ b/apps/yggdrasil-core-engine/src/app/app.controller.ts @@ -1,4 +1,4 @@ -import { Controller } from '@nestjs/common'; +import { Controller, Get } from '@nestjs/common'; @Controller() export class AppController { diff --git a/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts b/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts index 45dff17..49fd03d 100644 --- a/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts +++ b/apps/yggdrasil-discord-client/src/app/discord-bot/discord-bot.service.ts @@ -13,6 +13,7 @@ import { Subject, catchError, finalize, + forkJoin, from, lastValueFrom, of, @@ -85,13 +86,11 @@ export class DiscordBotService implements OnApplicationBootstrap { private messageCreateListenerObservers(message: Message) { const stopSignal$ = new Subject(); - return from([ - this.checkIsBotMessage(message), - this.checkShouldReply(message), - this.checkIsDisableBotChannel(message), + return forkJoin([ + of(this.checkIsBotMessage(message)), + of(this.checkShouldReply(message)), + of(this.checkIsDisableBotChannel(message)), ]).pipe( - take(3), - toArray(), switchMap((mods) => { if (mods.some((mod) => mod === true)) { stopSignal$.next('STOP'); From a0ba1a9cbbf8eee50f63814ecb17af2b141333a1 Mon Sep 17 00:00:00 2001 From: SD0 Date: Sat, 28 Oct 2023 18:57:35 +0800 Subject: [PATCH 13/13] fix(env): add docker env --- docker-compose.yml | 53 +- .../provider/langchain/langchain.provider.ts | 9 +- migrations.json | 45 +- package-lock.json | 2889 +++++++++-------- package.json | 70 +- scripts/db-start.sh | 7 + scripts/rs-init.sh | 27 + 7 files changed, 1600 insertions(+), 1500 deletions(-) create mode 100755 scripts/db-start.sh create mode 100755 scripts/rs-init.sh diff --git a/docker-compose.yml b/docker-compose.yml index 2cab0c3..432650c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,17 +1,50 @@ -version: '3.5' +version: '3.8' services: - mongodb: - image: mongo:6.0 - ports: ['27017:27017'] + mongo1: + container_name: mongo1 + image: mongo:7.0 volumes: - - './docker-data/mongodb-data:/data/db' + - ./docker-data/mongodb-data/data1:/data/db + - ./scripts/rs-init.sh:/scripts/rs-init.sh + networks: + - mongors-network-asgard + ports: + - 27017:27017 + links: + - mongo2 + - mongo3 + restart: always + entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "dbrs" ] + mongo2: + container_name: mongo2 + image: mongo:7.0 + volumes: + - ./docker-data/mongodb-data/data2:/data/db + networks: + - mongors-network-asgard + ports: + - 27022:27017 + restart: always + entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "dbrs" ] + mongo3: + container_name: mongo3 + image: mongo:7.0 + volumes: + - ./docker-data/mongodb-data/data3:/data/db + networks: + - mongors-network-asgard + ports: + - 27023:27017 + restart: always + entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "dbrs" ] redis: - image: redis:4 + image: redis:7 ports: ['6379:6379'] + networks: + - mongors-network-asgard volumes: - ./docker-data/redis-data:/data -volumes: - mongodb-data: - redis-data: - +networks: + mongors-network-asgard: + driver: bridge \ No newline at end of file diff --git a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts index dfb0a6d..0a8ebb7 100644 --- a/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts +++ b/libs/nest-langchain/src/lib/provider/langchain/langchain.provider.ts @@ -4,16 +4,21 @@ import { createStructuredOutputChainFromZod, } from 'langchain/chains/openai_functions'; import { ChatOpenAI } from 'langchain/chat_models/openai'; -import { LLMChain } from 'langchain/dist'; +import { LLMChain } from 'langchain/chains'; import { z } from 'zod'; import { NestLangChainAIChatOAuth } from '../../interface'; +import { BaseFunctionCallOptions } from 'langchain/base_language'; +import { BaseChatModel } from 'langchain/chat_models/base'; @Injectable() export class LangChainProvider { createStructuredOutputChainFromZod( zodSchema: T, input: Omit - ): LLMChain { + ): LLMChain< + T, + BaseChatModel | ChatOpenAI + > { return createStructuredOutputChainFromZod(zodSchema, input); } diff --git a/migrations.json b/migrations.json index d0d6fc0..e9a2ab6 100644 --- a/migrations.json +++ b/migrations.json @@ -2,43 +2,26 @@ "migrations": [ { "cli": "nx", - "version": "16.6.0-beta.6", - "description": "Prefix outputs with {workspaceRoot}/{projectRoot} if needed", - "implementation": "./src/migrations/update-15-0-0/prefix-outputs", + "version": "16.8.0-beta.3", + "description": "Escape $ in env variables", + "implementation": "./src/migrations/update-16-8-0/escape-dollar-sign-env-variables", "package": "nx", - "name": "16.6.0-prefix-outputs" + "name": "16.8.0-escape-dollar-sign-env" }, { - "cli": "nx", - "version": "16.6.0-beta.0", - "description": "Explicitly set 'updateBuildableProjectDepsInPackageJson' to 'true' in targets that rely on that value as the default.", - "factory": "./src/migrations/update-16-6-0/explicitly-set-projects-to-update-buildable-deps", - "package": "@nx/js", - "name": "explicitly-set-projects-to-update-buildable-deps" - }, - { - "cli": "nx", - "version": "16.4.0-beta.8", - "description": "Replace @nx/node:node with @nx/js:node for all project targets", - "implementation": "./src/migrations/update-16-4-0/replace-node-executor", - "package": "@nx/node", - "name": "update-16-4-0-replace-node-executor" + "version": "16.8.0", + "description": "update-16-8-0-add-ignored-files", + "implementation": "./src/migrations/update-16-8-0-add-ignored-files/update-16-8-0-add-ignored-files", + "package": "@nx/linter", + "name": "update-16-8-0-add-ignored-files" }, { "cli": "nx", - "version": "16.4.0-beta.16", - "description": "Update TsConfig target to es2021 and CacheModule if being used. Read more at https://docs.nestjs.com/migration-guide", - "implementation": "./src/migrations/update-16-4-0-cache-manager/nestjs-10-updates", - "package": "@nx/nest", - "name": "update-16-4-0-support-nestjs-10" - }, - { - "cli": "nx", - "version": "16.5.0-beta.2", - "description": "Add test-setup.ts to ignored files in production input", - "implementation": "./src/migrations/update-16-5-0/add-test-setup-to-inputs-ignore", - "package": "@nx/jest", - "name": "add-test-setup-to-inputs-ignore" + "version": "16.8.2-beta.0", + "description": "Remove invalid options (strict, noInterop) for ES6 type modules.", + "factory": "./src/migrations/update-16-8-2/update-swcrc", + "package": "@nx/js", + "name": "16-8-2-update-swcrc" } ] } diff --git a/package-lock.json b/package-lock.json index 1e181f7..8377c6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,65 +10,65 @@ "license": "MIT", "dependencies": { "@google-cloud/error-reporting": "^3.0.5", - "@google-cloud/vision": "^3.1.4", - "@grpc/grpc-js": "^1.9.0", - "@grpc/proto-loader": "^0.7.8", + "@google-cloud/vision": "^4.0.2", + "@grpc/grpc-js": "^1.9.8", + "@grpc/proto-loader": "^0.7.10", "@nestjs/axios": "^3.0.0", - "@nestjs/common": "10.1.3", - "@nestjs/config": "^3.0.0", - "@nestjs/core": "10.1.3", + "@nestjs/common": "10.2.7", + "@nestjs/config": "^3.1.1", + "@nestjs/core": "10.2.7", "@nestjs/event-emitter": "^2.0.2", - "@nestjs/microservices": "^10.1.3", + "@nestjs/microservices": "^10.2.7", "@nestjs/mongoose": "^10.0.1", - "@nestjs/platform-express": "10.1.3", - "@nestjs/schedule": "^3.0.3", - "@sd0x/nest-openai-client": "^0.0.10", + "@nestjs/platform-express": "10.2.7", + "@nestjs/schedule": "^3.0.4", "@supercharge/promise-pool": "^2.4.0", - "axios": "^1.4.0", + "axios": "^1.6.0", "cheerio": "^1.0.0-rc.12", - "discord.js": "^14.12.1", + "discord.js": "^14.13.0", "fluent-ffmpeg": "^2.1.2", "form-data": "^4.0.0", "ioredis": "^5.3.2", - "langchain": "^0.0.135", - "mongoose": "^7.2.3", - "nest-winston": "^1.9.2", + "langchain": "^0.0.174", + "mongoose": "^7.6.3", + "nest-winston": "^1.9.4", "nodejieba": "^2.6.0", "openai": "^3.3.0", "pdf-parse": "^1.1.1", - "redis": "^4.6.7", + "redis": "^4.6.10", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", "tslib": "^2.3.0", "uid": "^2.0.2", - "winston": "^3.10.0", - "youtube-dl-exec": "^2.4.7" + "winston": "^3.11.0", + "youtube-dl-exec": "^2.4.16", + "zod": "^3.22.4" }, "devDependencies": { "@nestjs/schematics": "10.0.2", - "@nestjs/testing": "10.1.3", - "@nx/eslint-plugin": "16.7.2", - "@nx/jest": "16.7.2", - "@nx/js": "16.7.2", - "@nx/linter": "16.7.2", - "@nx/nest": "16.7.2", - "@nx/node": "16.7.2", - "@nx/webpack": "16.7.2", - "@nx/workspace": "16.7.2", + "@nestjs/testing": "10.2.7", + "@nx/eslint-plugin": "16.9.1", + "@nx/jest": "16.9.1", + "@nx/js": "16.9.1", + "@nx/linter": "16.9.1", + "@nx/nest": "16.9.1", + "@nx/node": "16.9.1", + "@nx/webpack": "16.9.1", + "@nx/workspace": "16.9.1", "@types/jest": "^29.5.3", "@types/node": "~18.7.23", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", - "eslint": "8.46.0", + "eslint": "8.52.0", "eslint-config-prettier": "8.1.0", - "jest": "^29.5.0", - "jest-environment-node": "^29.5.0", - "nx": "16.7.2", - "prettier": "^2.6.2", - "ts-jest": "^29.1.0", + "jest": "^29.7.0", + "jest-environment-node": "^29.7.0", + "nx": "16.9.1", + "prettier": "^2.8.8", + "ts-jest": "^29.1.1", "ts-node": "10.9.1", - "typescript": "5.1.6", - "verdaccio": "^5.0.4" + "typescript": "5.2.2", + "verdaccio": "^5.27.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -144,9 +144,9 @@ } }, "node_modules/@anthropic-ai/sdk": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.5.10.tgz", - "integrity": "sha512-P8xrIuTUO/6wDzcjQRUROXp4WSqtngbXaE4GpEu0PhEmnq/1Q8vbF1s0o7W07EV3j8zzRoyJxAKovUJtNXH7ew==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.6.8.tgz", + "integrity": "sha512-z4gDFrBf+W2wOVvwA3CA+5bfKOxQhPeXQo7+ITWj3r3XPulIMEasVT0KrD41G+anr5Yc3d2PKvXKB6b1LSon5w==", "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", @@ -155,13 +155,17 @@ "digest-fetch": "^1.3.0", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" } }, "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { - "version": "18.17.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.6.tgz", - "integrity": "sha512-fGmT/P7z7ecA6bv/ia5DlaWCH4YeZvAQMNpUhrJjtAhOhZfoxS1VLUgU2pdk63efSjQaOJWdXMuAJsws+8I6dg==" + "version": "18.18.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.7.tgz", + "integrity": "sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ==", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@babel/code-frame": { "version": "7.22.10", @@ -751,6 +755,7 @@ "version": "7.22.10", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -2417,9 +2422,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", + "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2473,24 +2478,32 @@ } }, "node_modules/@google-cloud/vision": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@google-cloud/vision/-/vision-3.1.4.tgz", - "integrity": "sha512-mho94LjIFiFjdLRxSjw+AI8tj3xGSmdCbPVNTjdg+a0sp2YRizAy8WhtfF7bTmVqPwG9ItVbFLgQvKQBXmiyXQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/vision/-/vision-4.0.2.tgz", + "integrity": "sha512-VhYcxDXmkbQjCtAfPiQcW8bB4a+H5lFks2vDG4WQabKWa3VveyOmmbqHpNlH6JVD/sdYHz3h8koCcyHxE13oEA==", "dependencies": { - "@google-cloud/promisify": "^3.0.0", - "google-gax": "^3.5.8", + "@google-cloud/promisify": "^4.0.0", + "google-gax": "^4.0.3", "is": "^3.3.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/vision/node_modules/@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "engines": { + "node": ">=14" } }, "node_modules/@grpc/grpc-js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.0.tgz", - "integrity": "sha512-H8+iZh+kCE6VR/Krj6W28Y/ZlxoZ1fOzsNt77nrdE3knkbSelW1Uus192xOFCxHyeszLj8i4APQkSIXjAoOxXg==", + "version": "1.9.8", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.8.tgz", + "integrity": "sha512-FFPzDS333Vw8hvf+1FaEsaCYVPBdNdUCw7zArTiF7+6gOzln967b4GBCBekKGqoKEgna8d3Ayxv8t+IvazXG3g==", "dependencies": { - "@grpc/proto-loader": "^0.7.0", + "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" }, "engines": { @@ -2498,13 +2511,12 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.8.tgz", - "integrity": "sha512-GU12e2c8dmdXb7XUlOgYWZ2o2i+z9/VeACkxTA/zzAe2IjclC5PnVL0lpgjhrqfpDYHzM8B1TF6pqWegMYAzlA==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", "dependencies": { - "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", + "long": "^5.0.0", "protobufjs": "^7.2.4", "yargs": "^17.7.2" }, @@ -2515,41 +2527,13 @@ "node": ">=6" } }, - "node_modules/@grpc/proto-loader/node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@grpc/proto-loader/node_modules/protobufjs/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -2571,9 +2555,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@ioredis/commands": { @@ -2607,16 +2591,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", - "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -2624,37 +2608,37 @@ } }, "node_modules/@jest/core": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", - "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@jest/console": "^29.6.2", - "@jest/reporters": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-resolve-dependencies": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "jest-watcher": "^29.6.2", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -2671,88 +2655,88 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", - "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.2" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "expect": "^29.6.2", - "jest-snapshot": "^29.6.2" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", - "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", - "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", - "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.2" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", - "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", @@ -2761,13 +2745,13 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -2785,10 +2769,59 @@ } } }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -2798,9 +2831,9 @@ } }, "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", @@ -2812,13 +2845,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", - "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "@jest/console": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -2827,14 +2860,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", - "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.2", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -2842,22 +2875,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", - "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -2868,12 +2901,12 @@ } }, "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -2942,17 +2975,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jsdoc/salty": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", - "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -3008,6 +3030,15 @@ "semver": "bin/semver.js" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, "node_modules/@mozilla/readability": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.4.tgz", @@ -3030,12 +3061,12 @@ } }, "node_modules/@nestjs/common": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.1.3.tgz", - "integrity": "sha512-xSyXBwgcmiFwQqek1Urw/AL3pRPq9bp/tpgfTxmnJg3gP6XNUbx1fDr0de50irXgZYzFKfVFo9ptC3b2du5YKA==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.2.7.tgz", + "integrity": "sha512-cUtCRXiUstDmh4bSBhVbq4cI439Gngp4LgLGLBmd5dqFQodfXKnSD441ldYfFiLz4rbUsnoMJz/8ZjuIEI+B7A==", "dependencies": { "iterare": "1.2.1", - "tslib": "2.6.1", + "tslib": "2.6.2", "uid": "2.0.2" }, "funding": { @@ -3057,17 +3088,12 @@ } } }, - "node_modules/@nestjs/common/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" - }, "node_modules/@nestjs/config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.0.0.tgz", - "integrity": "sha512-fzASk1Uv6AjdE6uA1na8zpqRCXAhRpcfgpCVv3SAKlgJ3VR3bEjcI4G17WHLgLBsmPzI1ofdkSI451WLD1F1Rw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.1.1.tgz", + "integrity": "sha512-qu5QlNiJdqQtOsnB6lx4JCXPQ96jkKUsOGd+JXfXwqJqZcOSAq6heNFg0opW4pq4J/VZoNwoo87TNnx9wthnqQ==", "dependencies": { - "dotenv": "16.1.4", + "dotenv": "16.3.1", "dotenv-expand": "10.0.0", "lodash": "4.17.21", "uuid": "9.0.0" @@ -3078,16 +3104,16 @@ } }, "node_modules/@nestjs/core": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.1.3.tgz", - "integrity": "sha512-VzK54TuacC3Vmq3b5xTyMVTlDNJeKbjpKfV9fNqm4TbIBm8ZPo3FC0osJAbAK4XwbVvv2Flq1yA3CutasupVjw==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.2.7.tgz", + "integrity": "sha512-5GSu53QUUcwX17sNmlJPa1I0wIeAZOKbedyVuQx0ZAwWVa9g0wJBbsNP+R4EJ+j5Dkdzt/8xkiZvnKt8RFRR8g==", "hasInstallScript": true, "dependencies": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", "path-to-regexp": "3.2.0", - "tslib": "2.6.1", + "tslib": "2.6.2", "uid": "2.0.2" }, "funding": { @@ -3114,11 +3140,6 @@ } } }, - "node_modules/@nestjs/core/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" - }, "node_modules/@nestjs/event-emitter": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@nestjs/event-emitter/-/event-emitter-2.0.2.tgz", @@ -3133,12 +3154,12 @@ } }, "node_modules/@nestjs/microservices": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.1.3.tgz", - "integrity": "sha512-IBKefw+DR6v2SaXjPJ8tRT+gQTJUSGN83gxuaA32uCQNW2rK+CyVapgX3fDeM/zJsLfBkdveSMX+R74w5wuk+Q==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.2.7.tgz", + "integrity": "sha512-ggpng1yRuugPufn+OKeHV6Dcw3TWI7lmOvXkyYRwatVHQMvb3MlPpbzsA5PfUlg5DsjPGEWRbkIWN7OFb8OTyw==", "dependencies": { "iterare": "1.2.1", - "tslib": "2.6.1" + "tslib": "2.6.2" }, "funding": { "type": "opencollective", @@ -3189,11 +3210,6 @@ } } }, - "node_modules/@nestjs/microservices/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" - }, "node_modules/@nestjs/mongoose": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-10.0.1.tgz", @@ -3207,15 +3223,15 @@ } }, "node_modules/@nestjs/platform-express": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.1.3.tgz", - "integrity": "sha512-RSf7ooCrxiWJlWl3CLfpaYmAf3U0tRsN7pJakujWdvzVJU2EzVZTLcy1MtnSg/HBm9/Rvg98VI5QI6oOhOpt+A==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.2.7.tgz", + "integrity": "sha512-p+kp6aJtkgAdVpUrCVmM6MKtOvjsbt7QofBiZMidjYesZkMeG5gZ1D2SK8XzvQ8VXHJfFgEdY2xcKGB+wJLOYQ==", "dependencies": { "body-parser": "1.20.2", "cors": "2.8.5", "express": "4.18.2", "multer": "1.4.4-lts.1", - "tslib": "2.6.1" + "tslib": "2.6.2" }, "funding": { "type": "opencollective", @@ -3226,18 +3242,13 @@ "@nestjs/core": "^10.0.0" } }, - "node_modules/@nestjs/platform-express/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" - }, "node_modules/@nestjs/schedule": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.3.tgz", - "integrity": "sha512-xsMA4dmP3LcW3rt2iMPfm88bDbCj/hLuDsLrKmJQlbnxyCYtBwLtmu/4cSfZELLM7pTDT+E8QDAqGwhYyUUjxg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-3.0.4.tgz", + "integrity": "sha512-uFJpuZsXfpvgx2y7/KrIZW9e1L68TLiwRodZ6+Gc8xqQiHSUzAVn+9F4YMxWFlHITZvvkjWziUFgRNCitDcTZQ==", "dependencies": { - "cron": "2.4.1", - "uuid": "9.0.0" + "cron": "2.4.3", + "uuid": "9.0.1" }, "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", @@ -3245,6 +3256,18 @@ "reflect-metadata": "^0.1.12" } }, + "node_modules/@nestjs/schedule/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@nestjs/schematics": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.0.2.tgz", @@ -3262,12 +3285,12 @@ } }, "node_modules/@nestjs/testing": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.1.3.tgz", - "integrity": "sha512-zMrO9xLPYnKtC6q1diWubuMshIp0v2aGHa58jcIfZaAlJlU/6RKsgCOiFQ42aFzxUEBRWF0LBF0aiwt04LKMyQ==", + "version": "10.2.7", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.2.7.tgz", + "integrity": "sha512-d2SIqiJIf/7NSILeNNWSdRvTTpHSouGgisGHwf5PVDC7z4/yXZw/wPO9eJhegnxFlqk6n2LW4QBTmMzbqjAfHA==", "dev": true, "dependencies": { - "tslib": "2.6.1" + "tslib": "2.6.2" }, "funding": { "type": "opencollective", @@ -3288,12 +3311,6 @@ } } }, - "node_modules/@nestjs/testing/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3330,75 +3347,75 @@ } }, "node_modules/@nrwl/devkit": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.7.2.tgz", - "integrity": "sha512-xJIQFtmPoLFWX5gKl6QOGMzXjn+TZPkTMv5pQ12y2StpuGa3T2n8m7TnHPHGAk43ayiPDcDD97cZ75Fue+mK/w==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.9.1.tgz", + "integrity": "sha512-+iR7tg+LOrGWAGmGv0hr45hYUOeKjK/Jm6WV3Ldmx6I7LaaYM5Fu6Ev2KXL669QMzLJpg3kqgKQsneWbFT3MAw==", "dev": true, "dependencies": { - "@nx/devkit": "16.7.2" + "@nx/devkit": "16.9.1" } }, "node_modules/@nrwl/eslint-plugin-nx": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-16.7.2.tgz", - "integrity": "sha512-NS6TZ08Q0uY6YdNXZRwgwTzlNN3sedfGfibSrbUrPZIxnpBUvI9h+1SNkWNwMu9cGpq6ZrAoSaXUyXGWvC7YFw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-16.9.1.tgz", + "integrity": "sha512-G1bHWYgZuuXz51leJgleFltiyVzXpE5jKcApnSMnzbnP0HzeJO9QHruCX+t7bST3SXDV1uVXgovLyqfffCkNNA==", "dev": true, "dependencies": { - "@nx/eslint-plugin": "16.7.2" + "@nx/eslint-plugin": "16.9.1" } }, "node_modules/@nrwl/jest": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-16.7.2.tgz", - "integrity": "sha512-SXqANeAi4UNEPj3xg+o1x6kK8sXZiOk4+VhTtE8vftD/TdhgNVUiyG0DvHXvpLCWNhfFftJHhbUB2sg9vma9jg==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-16.9.1.tgz", + "integrity": "sha512-tJPVlvUdwU/+otJDAytKBnHMy8NHrlBiab2KL1C+X6CUv01oFaphlRliR8gVjN13cvDgbNmdfxsaSHrSxlx8qQ==", "dev": true, "dependencies": { - "@nx/jest": "16.7.2" + "@nx/jest": "16.9.1" } }, "node_modules/@nrwl/js": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-16.7.2.tgz", - "integrity": "sha512-RflIReJoMmBhvBuSKzWLNJvqhz0uDy3Alg7QylGct0uzrTFqOH9fn35W9gYYN3EE8WQXpBlcQk3t+5xs9oHGXg==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-16.9.1.tgz", + "integrity": "sha512-v4EZ5nCmqsSHm5iKDwK2fv8Yg+i2UwGlt3wcbULmuFTAD/F1/VM68yWK2hBQSPCENhua1BAQ2T+VXBtGmZShaQ==", "dev": true, "dependencies": { - "@nx/js": "16.7.2" + "@nx/js": "16.9.1" } }, "node_modules/@nrwl/linter": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/linter/-/linter-16.7.2.tgz", - "integrity": "sha512-tY5Vi9I9mjwkeVBD96hkcNAwDxs2gxcWxwIs5bnAoGw4GM93toHnbe2vB72m89NwH4bYxD1UkDAqvYnOfEZ5/Q==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/linter/-/linter-16.9.1.tgz", + "integrity": "sha512-T8HIKMTYdlW8b/HK2k8ZOFn4MH6LUDC5TfGhbvPL4lM/zbbYPa0YfyqYBan7QoBG0WRqVvgZLIVk7Ho211Uyow==", "dev": true, "dependencies": { - "@nx/linter": "16.7.2" + "@nx/linter": "16.9.1" } }, "node_modules/@nrwl/nest": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/nest/-/nest-16.7.2.tgz", - "integrity": "sha512-kKwuWYbSnzCSr0V2wCDLt/Ij3OJpwGhohAK0U/EghCwCpkeTy4B1pL7WscR+cB8UVrBq7Vz/DQhOGOloLjyBww==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/nest/-/nest-16.9.1.tgz", + "integrity": "sha512-vcJRicE2cCh4wfqUsIZpLBAktJnw7/c35qVuoIkCe6bP2HYejZi+w5lmdOsj0IXmkiFdXgWKX4mvpmMMpBelPA==", "dev": true, "dependencies": { - "@nx/nest": "16.7.2" + "@nx/nest": "16.9.1" } }, "node_modules/@nrwl/node": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/node/-/node-16.7.2.tgz", - "integrity": "sha512-HPhtGAxiM/N/JihRacHMVH4+MGp1eTPLw/T3RBtf5VyuBI/aRW0gF1nCqJxizSs+Vy9FD2XE+fUoca9FZIrxxg==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/node/-/node-16.9.1.tgz", + "integrity": "sha512-kI/bqr1WqUAYFoDSaP7hSdzSB8E52WwpVJlM+EyZWv+dg426ziUzvbQCQpcpQv1FGKsb2q78ccxumzjac0yPQQ==", "dev": true, "dependencies": { - "@nx/node": "16.7.2" + "@nx/node": "16.9.1" } }, "node_modules/@nrwl/tao": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.7.2.tgz", - "integrity": "sha512-4Wc3ic5VtZL3t4qqCMJlEad/wWuFxNUX78U5ohEStN3UFFJIjwJJpKZYZDtxhaOLWUdXbk6CI3KfSIpWgwPdbQ==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.9.1.tgz", + "integrity": "sha512-KsRBRAE5mSP83ZjO9cPW6ZQZWOtkMfCBih/WE9qpaiHn+hCydtYStyAO2QSic4tHVV+8VpPUQWYnpf5rhkNzWg==", "dev": true, "dependencies": { - "nx": "16.7.2", + "nx": "16.9.1", "tslib": "^2.3.0" }, "bin": { @@ -3406,21 +3423,21 @@ } }, "node_modules/@nrwl/webpack": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/webpack/-/webpack-16.7.2.tgz", - "integrity": "sha512-M4JCakc+piRt4eYEuC3s/Pu+J2z7l7Mr63K3FfeZJMLsX7sI87xWifm4Jf4sJvaRNzQHzrykb3xluWMQ/B22Ag==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/webpack/-/webpack-16.9.1.tgz", + "integrity": "sha512-vSwzNRF2SddNIZC+JOiiKqvIj3QaYxUYKos93KsmU03SZ18MNz1X8BHkJ3egRDe7IEbvEFBphG8FxKHiAADjNQ==", "dev": true, "dependencies": { - "@nx/webpack": "16.7.2" + "@nx/webpack": "16.9.1" } }, "node_modules/@nrwl/workspace": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-16.7.2.tgz", - "integrity": "sha512-PTYFfSG64DBJPII/AiUQXP9uuPRfllVBMKKLwvMgVp9siClvgmyctlf5XONlbWfYNJ5jRI7/To8FF52EuQ95Zg==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-16.9.1.tgz", + "integrity": "sha512-jtQmsC1dmM/aUXFHw261tYu7tMqOHw4Sb3NWH4hXoasOn862L4kwkTYWn/MdQ4JTbv9uTf4+cRohP2F6aOj+jA==", "dev": true, "dependencies": { - "@nx/workspace": "16.7.2" + "@nx/workspace": "16.9.1" } }, "node_modules/@nuxtjs/opencollective": { @@ -3441,12 +3458,12 @@ } }, "node_modules/@nx/devkit": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.7.2.tgz", - "integrity": "sha512-Gf6FwxhVUH7h3u6Vp/62sDAqgiPR0WvU/etw/DQmJvOqauM9Nj43r0mBCmgh29yZZEgW1zMIMCTOtUYqFFl1ew==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.9.1.tgz", + "integrity": "sha512-jQMLX8pUKsOIk0tLFzJms5awPxKfJEi0uxY7+IUfRNHcnDkOFiv6gf1QqJ3pobmgwBdbC6Nv/dhDP3JT2wA1gA==", "dev": true, "dependencies": { - "@nrwl/devkit": "16.7.2", + "@nrwl/devkit": "16.9.1", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -3459,14 +3476,14 @@ } }, "node_modules/@nx/eslint-plugin": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-16.7.2.tgz", - "integrity": "sha512-EEElrgkTmjkkyrl0tOBoN0nMZynOagAEiri7wOznUeBffqcR0QJt1CeUald3O8DJt49P7ywRSsceW3ZircSpiw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-16.9.1.tgz", + "integrity": "sha512-pBZYZRyeM+rxDW3mBXFz4fjXEb43sVLWHcjgMOlSkYQz79NY0YK0sntBxBCVIUNQF/rES8ZEzhfr3a+3fWgptA==", "dev": true, "dependencies": { - "@nrwl/eslint-plugin-nx": "16.7.2", - "@nx/devkit": "16.7.2", - "@nx/js": "16.7.2", + "@nrwl/eslint-plugin-nx": "16.9.1", + "@nx/devkit": "16.9.1", + "@nx/js": "16.9.1", "@typescript-eslint/type-utils": "^5.60.1", "@typescript-eslint/utils": "^5.60.1", "chalk": "^4.1.0", @@ -3486,19 +3503,18 @@ } }, "node_modules/@nx/jest": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-16.7.2.tgz", - "integrity": "sha512-PoUxUPha2zWA3DOatjXxoCvqk+XySSGJV8XM+7oWdlVXWpWB60XAfs8f9Tl4krUk1v+JlB+9svwds8KLRoj++w==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-16.9.1.tgz", + "integrity": "sha512-Dl4ERKn18ZKWnFRokr6OYVRvTz4xzw5Cb2UNvtupycQJQm0jr3Dn/znpAT/fPvruMLcxUMFLbvDITnpZJx2V3w==", "dev": true, "dependencies": { "@jest/reporters": "^29.4.1", "@jest/test-result": "^29.4.1", - "@nrwl/jest": "16.7.2", - "@nx/devkit": "16.7.2", - "@nx/js": "16.7.2", + "@nrwl/jest": "16.9.1", + "@nx/devkit": "16.9.1", + "@nx/js": "16.9.1", "@phenomnomnominal/tsquery": "~5.0.1", "chalk": "^4.1.0", - "dotenv": "~16.3.1", "identity-obj-proxy": "3.0.0", "jest-config": "^29.4.1", "jest-resolve": "^29.4.1", @@ -3507,22 +3523,10 @@ "tslib": "^2.3.0" } }, - "node_modules/@nx/jest/node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, "node_modules/@nx/js": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-16.7.2.tgz", - "integrity": "sha512-6mkOfZlI+RpqkF8Lwte+ZmC2Lx46cHcDUjvdYkoIud40C2uf7eaqnMKh4zw3M25mdzm51BAf22LV31b8q3mBmg==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-16.9.1.tgz", + "integrity": "sha512-gUs1GoFtQ4OkJhgQmOkgY9bEZd3aWZwi1OsZHiDxQ7NQzNzP438ZibiZua/YCrzd0lmdwU9YPHfG9tXyoAZKuA==", "dev": true, "dependencies": { "@babel/core": "^7.22.9", @@ -3532,20 +3536,24 @@ "@babel/preset-env": "^7.22.9", "@babel/preset-typescript": "^7.22.5", "@babel/runtime": "^7.22.6", - "@nrwl/js": "16.7.2", - "@nx/devkit": "16.7.2", - "@nx/workspace": "16.7.2", + "@nrwl/js": "16.9.1", + "@nx/devkit": "16.9.1", + "@nx/workspace": "16.9.1", "@phenomnomnominal/tsquery": "~5.0.1", "babel-plugin-const-enum": "^1.0.1", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-typescript-metadata": "^0.3.1", "chalk": "^4.1.0", + "columnify": "^1.6.0", "detect-port": "^1.5.1", "fast-glob": "3.2.7", "fs-extra": "^11.1.0", "ignore": "^5.0.4", "js-tokens": "^4.0.0", "minimatch": "3.0.5", + "npm-package-arg": "11.0.1", + "npm-run-path": "^4.0.1", + "ora": "5.3.0", "semver": "7.5.3", "source-map-support": "0.5.19", "ts-node": "10.9.1", @@ -3561,18 +3569,41 @@ } } }, + "node_modules/@nx/js/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@nx/linter": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-16.7.2.tgz", - "integrity": "sha512-rmgE7y0nUupG1iamdTH5S4SVp/+0VC/VvvXnB50mJgVn1XwtvgvmLMb90oFAy1azjxtrboK4y1tI1UC4eSytSw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-16.9.1.tgz", + "integrity": "sha512-UZ7cMNIt4Zu/LHRPwsfUkX+cgxbv9bpzn3f9+mf4a88nA80QdPnBaroZajHzyUK+8fsHWnzlwLMBE5iqrAfbNQ==", "dev": true, "dependencies": { - "@nrwl/linter": "16.7.2", - "@nx/devkit": "16.7.2", - "@nx/js": "16.7.2", + "@nrwl/linter": "16.9.1", + "@nx/devkit": "16.9.1", + "@nx/js": "16.9.1", "@phenomnomnominal/tsquery": "~5.0.1", "tmp": "~0.2.1", - "tslib": "^2.3.0" + "tslib": "^2.3.0", + "typescript": "~5.1.3" }, "peerDependencies": { "eslint": "^8.0.0" @@ -3583,18 +3614,31 @@ } } }, + "node_modules/@nx/linter/node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@nx/nest": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-16.7.2.tgz", - "integrity": "sha512-PDRNdmOQt1Njv4EzBnvGFNjPvZR+27bwSIKMwUSh2HfNQLkhommmb4w6WOOV5QY4FN0NATc3JhJJilARzWubKw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nest/-/nest-16.9.1.tgz", + "integrity": "sha512-IzGLHuK2zLm+72bzX1qMtmcBepRIXjq1BfZgekyZIj40lIGmO9BhiG76a+Llv64F6qgd3q3SKJoVwZ9LrHKQKg==", "dev": true, "dependencies": { "@nestjs/schematics": "^9.1.0", - "@nrwl/nest": "16.7.2", - "@nx/devkit": "16.7.2", - "@nx/js": "16.7.2", - "@nx/linter": "16.7.2", - "@nx/node": "16.7.2", + "@nrwl/nest": "16.9.1", + "@nx/devkit": "16.9.1", + "@nx/js": "16.9.1", + "@nx/linter": "16.9.1", + "@nx/node": "16.9.1", "@phenomnomnominal/tsquery": "~5.0.1", "enquirer": "~2.3.6", "semver": "7.5.3", @@ -3661,24 +3705,24 @@ } }, "node_modules/@nx/node": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/node/-/node-16.7.2.tgz", - "integrity": "sha512-BQ+dOGOXoc3/qlttJxsk/5Ty/EqjyjgiC95icV67o2bpfEnC+A7EzobsxiG23ZNGrkvxd8SxStv6VrbtH1Ox1g==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/node/-/node-16.9.1.tgz", + "integrity": "sha512-Yu2N7offz8MCrs7I2oc/y/F0SF55mwg9MdawYNG898S4Ylc9yaTWJZ/skiykx5dHJKf5PncNB8ylSuAaO8BuVw==", "dev": true, "dependencies": { - "@nrwl/node": "16.7.2", - "@nx/devkit": "16.7.2", - "@nx/jest": "16.7.2", - "@nx/js": "16.7.2", - "@nx/linter": "16.7.2", - "@nx/workspace": "16.7.2", + "@nrwl/node": "16.9.1", + "@nx/devkit": "16.9.1", + "@nx/jest": "16.9.1", + "@nx/js": "16.9.1", + "@nx/linter": "16.9.1", + "@nx/workspace": "16.9.1", "tslib": "^2.3.0" } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.7.2.tgz", - "integrity": "sha512-dkTHAzOTbqRHUQtnw7knEJq4ll6hew11u+9B0fThs9gC/X0iPK0eDXD4TqbIKEbcWAsxpuGiWPzGoNPo7Gwl9A==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.9.1.tgz", + "integrity": "sha512-JWGrPxxt3XjgIYzvnaNAeNmK24wyF6yEE1bV+wnnKzd7yavVps3c2TOVE/AT4sgvdVj3xFzztyixYGV58tCYrg==", "cpu": [ "arm64" ], @@ -3692,9 +3736,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.7.2.tgz", - "integrity": "sha512-EKhjX7DCRIA5U8yAxIgGXeIFaq1dhgLJy8OAG4n1Ud8c21px+bBSrcZvv0ww5VoEulhggQ+c6fW1cjKtGgLknQ==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.9.1.tgz", + "integrity": "sha512-b1Hw1AmKrR+Kp361WTiKC1RFoQwERyW9R/9XJGNIdgtr+V2wa775eCEdxB9r9mwCqyEmM9iVadpRHPaFSAfQfQ==", "cpu": [ "x64" ], @@ -3708,9 +3752,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.7.2.tgz", - "integrity": "sha512-3QhXZq0wxvi4lg1MJqwq72F7PE/d0Hcl3uwheenYQtwUvAFAmijC/Z4AVPSqbKJ+QaoqASnXRim9z3EIfeD+DQ==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.9.1.tgz", + "integrity": "sha512-jscl/Xu86tLQYbC8b1wy9FjEgGyuLpYnvP9d+34AHDi6CbCNSodbv93xFDlfYcLOeOD/mJXqR1Ru/1MF86OB5A==", "cpu": [ "x64" ], @@ -3724,9 +3768,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.7.2.tgz", - "integrity": "sha512-7bny8NvE9iyfwRfq9/mOZjzMNWthT70Ce1N9suB2zdbgbLUEDPQQhBNbg969yT6/LbWMWuWZXeIbz/Fwndf9zA==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.9.1.tgz", + "integrity": "sha512-NMAyxjYv9y4LwzU76htcPWfdmRoN/ZziTNKT3jaMbn38x4e7DoXYs9GGh267z45yWHscQWoV0v+X39LmB819aQ==", "cpu": [ "arm" ], @@ -3740,9 +3784,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.7.2.tgz", - "integrity": "sha512-+UdeFB1HY/3GU2+mflydFWpztghFRQiVzJV6MTcjtOzE3jfgXzz9TP580pDxozTvNSRPlblH07X+iB8DhVcB9w==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.9.1.tgz", + "integrity": "sha512-A5UbK5rFhqzs3kMiEKA+xr3LAJsQBA97VDyMH6WPraSl+XRIt4EePx0MyEqo1pnEgeuoOCvR1tjDot5E7ldInw==", "cpu": [ "arm64" ], @@ -3756,9 +3800,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.7.2.tgz", - "integrity": "sha512-YfkWu+4GKXageuYiH5a77gIDAXnit5SIyfI+RWe/j04uFy171KnUt167DC417fv/fTGxeXY1tzOu112Y+x5ixw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.9.1.tgz", + "integrity": "sha512-eIn5PnKH7Y/u1LuanAM0wPNdcb9Z7seDjQzQ0hFMCCvV75Z8A02ztbiueLGaEsDLx35MPBdBmuyo4hsmvmLgpg==", "cpu": [ "arm64" ], @@ -3772,9 +3816,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.7.2.tgz", - "integrity": "sha512-/TtSa2rHR+1gNuALR1yafl4fzBK2/GAhosf+skn00OgwsJ0c8ie9tuuftlMo+2n3LcXY/IaPDaD7t6fln4qsQg==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.9.1.tgz", + "integrity": "sha512-MMvhoS1pZjyIjwfeZNH2dDZuVF2xxURLTXC4UmmpY/wOWCuXhvD7QUv5A5QShxfaVXmXceo/fGLK+/Qm5e2+7g==", "cpu": [ "x64" ], @@ -3788,9 +3832,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.7.2.tgz", - "integrity": "sha512-VC638hxdWSA8VTDU9rAXjr60mmMP3ZyCUbSkJ+8ydEe83StMDY3PAXS5Hw3n/ouxDfCF9r1kWIGFe4g+emvfBw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.9.1.tgz", + "integrity": "sha512-ca0d00YCHo0+OIT80MZdtseJj9wTlWMucmdm0OCXLf/l+Dma4MO4LR09WMH2VIpjoz4Gj7+xP0QtKtH4fWFD8Q==", "cpu": [ "x64" ], @@ -3804,9 +3848,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.7.2.tgz", - "integrity": "sha512-sSUqgANLgQFFzKTvyMczh5D6xiqTQnB8daJTLX+QUCv5vO5+ZSwuVDyNfr6g/HV2+ak0M9/wVQUae11TgUIPYw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.9.1.tgz", + "integrity": "sha512-UIDAWH6/LfouFaXLJWyZKggzH/698lSrLkEE1fa9VrrGEOhumk7MPAVQc/XxgkWgPDDR1TJl0ij+J1bOREn73Q==", "cpu": [ "arm64" ], @@ -3820,9 +3864,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.7.2.tgz", - "integrity": "sha512-+n01cT9/P3o95x+FlRWYf9sFZ29ooxYD/WLcmxACeXN0V1bdbnZxKVSuJqrXZhmpHe7P+/+IRmniv9cdpkxz7g==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.9.1.tgz", + "integrity": "sha512-isnElU5RaQEGPAJhx6VNY0P/avD79s146kmZOn1Ff5fAjReqR7kRxSWXQOdIqc6nPH9Y0c9wNwEAuhBJoor+Mw==", "cpu": [ "x64" ], @@ -3836,26 +3880,23 @@ } }, "node_modules/@nx/webpack": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-16.7.2.tgz", - "integrity": "sha512-nZPgIISyUpPLTvPSfRMJo4IY2f3cABxJH4LKJ0U0+uV0fTvzMs9GO8JIQ8534m9b2KISjSbaPL6efJhGkn2VbQ==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-16.9.1.tgz", + "integrity": "sha512-kAXGuEHGAuA/7Cmd9YH5B7HplBPRAVvoQH5Y3tkNyNrK9wPDracwQC1OwtMAmhqe6GZNEqGYPr/G4KHoYOGcYA==", "dev": true, "dependencies": { "@babel/core": "^7.22.9", - "@nrwl/webpack": "16.7.2", - "@nx/devkit": "16.7.2", - "@nx/js": "16.7.2", + "@nrwl/webpack": "16.9.1", + "@nx/devkit": "16.9.1", + "@nx/js": "16.9.1", "autoprefixer": "^10.4.9", "babel-loader": "^9.1.2", "browserslist": "^4.21.4", "chalk": "^4.1.0", - "chokidar": "^3.5.1", "copy-webpack-plugin": "^10.2.4", "css-loader": "^6.4.0", "css-minimizer-webpack-plugin": "^5.0.0", - "dotenv": "~16.3.1", "fork-ts-checker-webpack-plugin": "7.2.13", - "ignore": "^5.0.4", "less": "4.1.3", "less-loader": "11.1.0", "license-webpack-plugin": "^4.0.2", @@ -3882,29 +3923,18 @@ "webpack-subresource-integrity": "^5.1.0" } }, - "node_modules/@nx/webpack/node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, "node_modules/@nx/workspace": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-16.7.2.tgz", - "integrity": "sha512-6bI2EBXxbMcUI/Gtin+M95l9kQdoov9UIB97j8pX/V/4K8Xvegn01+MF99De9/oApkQjNehmR2dpi4hPo0FFUw==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-16.9.1.tgz", + "integrity": "sha512-cLTcViSwHZ6M0+YuuKOFrvSaObQVZRAlxa/rvxyZD0xcQGXVY7lWZ1IzkVJueBtSoiBVfjXETXo3KX+qZcfB8A==", "dev": true, "dependencies": { - "@nrwl/workspace": "16.7.2", - "@nx/devkit": "16.7.2", + "@nrwl/workspace": "16.9.1", + "@nx/devkit": "16.9.1", "chalk": "^4.1.0", + "enquirer": "~2.3.6", "ignore": "^5.0.4", - "nx": "16.7.2", + "nx": "16.9.1", "rxjs": "^7.8.0", "tslib": "^2.3.0", "yargs-parser": "21.1.1" @@ -4003,9 +4033,9 @@ } }, "node_modules/@redis/client": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.8.tgz", - "integrity": "sha512-xzElwHIO6rBAqzPeVnCzgvrnBEcFL1P0w8P65VNLRkdVW8rOE58f52hdj0BDgmsdOm4f1EoXPZtH4Fh7M/qUpw==", + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.11.tgz", + "integrity": "sha512-cV7yHcOAtNQ5x/yQl7Yw1xf53kO0FNDTdDU6bFIMbW6ljB7U7ns0YRM+QIkpoqTAt6zK5k9Fq0QWlUbLcq9AvA==", "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", @@ -4029,25 +4059,25 @@ } }, "node_modules/@redis/json": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", - "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.6.tgz", + "integrity": "sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==", "peerDependencies": { "@redis/client": "^1.0.0" } }, "node_modules/@redis/search": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.3.tgz", - "integrity": "sha512-4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.5.tgz", + "integrity": "sha512-hPP8w7GfGsbtYEJdn4n7nXa6xt6hVZnnDktKW4ArMaFQ/m/aR7eFvsLQmG/mn1Upq99btPJk+F27IQ2dYpCoUg==", "peerDependencies": { "@redis/client": "^1.0.0" } }, "node_modules/@redis/time-series": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", - "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.5.tgz", + "integrity": "sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==", "peerDependencies": { "@redis/client": "^1.0.0" } @@ -4083,56 +4113,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@sd0x/nest-openai-client": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@sd0x/nest-openai-client/-/nest-openai-client-0.0.10.tgz", - "integrity": "sha512-hK7Mtg0zxzfD40iKxlEZww4zyblSrGMHxWiApXUIRo8zdoVv1aXtRau+RBWvgZTLyE3zA5oR2LCq8fBSlgBE0A==", - "dependencies": { - "@nestjs/common": "^9.4.2", - "axios": "^1.4.0", - "form-data": "^4.0.0", - "openai": "^3.3.0", - "tslib": "^2.0.0", - "uid": "^2.0.2" - } - }, - "node_modules/@sd0x/nest-openai-client/node_modules/@nestjs/common": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.4.3.tgz", - "integrity": "sha512-Gd6D4IaYj01o14Bwv81ukidn4w3bPHCblMUq+SmUmWLyosK+XQmInCS09SbDDZyL8jy86PngtBLTdhJ2bXSUig==", - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.5.3", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "cache-manager": "<=5", - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "cache-manager": { - "optional": true - }, - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@sd0x/nest-openai-client/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -4207,9 +4187,9 @@ "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", + "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -4220,18 +4200,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", + "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", + "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -4239,9 +4219,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", + "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -4266,6 +4246,11 @@ "@types/node": "*" } }, + "node_modules/@types/caseless": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.4.tgz", + "integrity": "sha512-2in/lrHRNmDvHPgyormtEralhPcN3An1gLjJzj2Bw145VBxkQ75JEXW6CTdMAwShiHQcYsl2d10IjQSdJSJz4g==" + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -4335,15 +4320,6 @@ "@types/send": "*" } }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", @@ -4408,15 +4384,10 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, "node_modules/@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", - "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", + "version": "4.14.200", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", + "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==", "dev": true }, "node_modules/@types/long": { @@ -4424,19 +4395,10 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + "node_modules/@types/luxon": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.3.tgz", + "integrity": "sha512-/BJF3NT0pRMuxrenr42emRUF67sXwcZCd+S1ksG/Fcf9O7C3kKCY4uJSbKBE4KDUIYr3WMsvfmWD8hRjXExBJQ==" }, "node_modules/@types/mime": { "version": "1.3.2", @@ -4444,36 +4406,18 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, "node_modules/@types/node": { "version": "18.7.23", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz", "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==" }, "node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-lX17GZVpJ/fuCjguZ5b3TjEbSENxmEk1B2z02yoXSK9WMEWRivhdSY73wWMn6bpcCDAOh6qAdktpKHIlkDk2lg==", "dependencies": { "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "form-data": "^4.0.0" } }, "node_modules/@types/parse-json": { @@ -4494,20 +4438,35 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "node_modules/@types/request": { + "version": "2.48.11", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.11.tgz", + "integrity": "sha512-HuihY1+Vss5RS9ZHzRyTGIzwPTdrJBkCm/mAeLRYrOQu/MGqyezKXWOK1VhCnR+SDbp9G2mRUP+OVEqCrzpcfA==", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "node_modules/@types/request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, - "node_modules/@types/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, "node_modules/@types/semver": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", @@ -4559,15 +4518,20 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/tough-cookie": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", + "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==" + }, "node_modules/@types/triple-beam": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" }, "node_modules/@types/uuid": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", - "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==" + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.6.tgz", + "integrity": "sha512-BT2Krtx4xaO6iwzwMFUYvWBWkV2pr37zD68Vmp1CDV196MzczBRxuEpD6Pr395HAgebC/co7hOphs53r8V7jew==" }, "node_modules/@types/webidl-conversions": { "version": "7.0.0", @@ -4794,6 +4758,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@verdaccio/commons-api": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/@verdaccio/commons-api/-/commons-api-10.2.0.tgz", @@ -4812,17 +4782,17 @@ } }, "node_modules/@verdaccio/config": { - "version": "6.0.0-6-next.74", - "resolved": "https://registry.npmjs.org/@verdaccio/config/-/config-6.0.0-6-next.74.tgz", - "integrity": "sha512-qpP3Hc6OCdUjJw17SQaEBPfTY/YFAGpWuiUizX5D9P46Xf/pEL99oViqA77xJPI0VZIlVue4kxcAO/zJ2oxNwA==", + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/config/-/config-7.0.0-next.3.tgz", + "integrity": "sha512-DWBd7THRNDTd1UKwipCYyppdJ5h9sB495FPi9Vaad+DQtN5tNYRx3+aMvuqlDRwHZrssPJeAp8wu8cjLNpMokQ==", "dev": true, "dependencies": { - "@verdaccio/core": "6.0.0-6-next.74", - "@verdaccio/utils": "6.0.0-6-next.42", + "@verdaccio/core": "7.0.0-next.3", + "@verdaccio/utils": "7.0.0-next.3", "debug": "4.3.4", "js-yaml": "4.1.0", "lodash": "4.17.21", - "minimatch": "3.1.2", + "minimatch": "7.4.6", "yup": "0.32.11" }, "engines": { @@ -4839,6 +4809,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/@verdaccio/config/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@verdaccio/config/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -4852,21 +4831,24 @@ } }, "node_modules/@verdaccio/config/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@verdaccio/core": { - "version": "6.0.0-6-next.74", - "resolved": "https://registry.npmjs.org/@verdaccio/core/-/core-6.0.0-6-next.74.tgz", - "integrity": "sha512-aXryZX2GyvWLvEn2pnxarTY6nOedrh9W7uGsXaW7uYOD7dq8lOQ4NH8Hhl/nw+Sswp3mE5JNl2P3nIoGyhOYiQ==", + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/core/-/core-7.0.0-next.3.tgz", + "integrity": "sha512-P6XniWZMPcXF/nYRqfyDZDzH5xUMQw9ZiJJ1l+H1SqfTNgxLhRhciOQG39lTvRb3aYnzRtWUjd3ink4IytXpjg==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -4969,12 +4951,12 @@ } }, "node_modules/@verdaccio/logger-7": { - "version": "6.0.0-6-next.19", - "resolved": "https://registry.npmjs.org/@verdaccio/logger-7/-/logger-7-6.0.0-6-next.19.tgz", - "integrity": "sha512-DQwmPPRWvrT4TMur4g4+c5dNr7WnoT6sXYpw0Yh6NgZpH2D6FMcaxpH1me0rklpfnnXZmV3/zs2MvLJaWmRl4w==", + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/logger-7/-/logger-7-7.0.0-next.3.tgz", + "integrity": "sha512-JURPnpBnai+1/hgblJ5ayJGHJo068X00QzdZ8u/iB8t6fZRZIVKwVMSBfgOquDUODuJypaueG1MP+twvcUco0Q==", "dev": true, "dependencies": { - "@verdaccio/logger-commons": "6.0.0-6-next.42", + "@verdaccio/logger-commons": "7.0.0-next.3", "pino": "7.11.0" }, "engines": { @@ -4986,13 +4968,13 @@ } }, "node_modules/@verdaccio/logger-commons": { - "version": "6.0.0-6-next.42", - "resolved": "https://registry.npmjs.org/@verdaccio/logger-commons/-/logger-commons-6.0.0-6-next.42.tgz", - "integrity": "sha512-ydp12CVXdYhkXPxJevGW38Qf9HJdOF/KWcDmCWo7pi9atfiMkUWoOuEC1nr+7Dx+S5dA7kDfTqFLdadAuyO93A==", + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/logger-commons/-/logger-commons-7.0.0-next.3.tgz", + "integrity": "sha512-j1+9OeGN7WCuo+QZve8fbJEH9ju8rW18H0/xC+OEx6hzmNrmREgc60S5H6OEdSs8mn6wfD4LcMuV8ZDx/JaLMQ==", "dev": true, "dependencies": { - "@verdaccio/core": "6.0.0-6-next.74", - "@verdaccio/logger-prettify": "6.0.0-6-next.10", + "@verdaccio/core": "7.0.0-next.3", + "@verdaccio/logger-prettify": "7.0.0-next.1", "colorette": "2.0.20", "debug": "4.3.4" }, @@ -5005,9 +4987,9 @@ } }, "node_modules/@verdaccio/logger-prettify": { - "version": "6.0.0-6-next.10", - "resolved": "https://registry.npmjs.org/@verdaccio/logger-prettify/-/logger-prettify-6.0.0-6-next.10.tgz", - "integrity": "sha512-G9woGojHXoRg3W4fE2ZlNy2c25f5faqLWHxVdnDFbgbH6dieG+GzlyNwiOcrRC4LEkh7dWcgwuNMx1NZFojqhg==", + "version": "7.0.0-next.1", + "resolved": "https://registry.npmjs.org/@verdaccio/logger-prettify/-/logger-prettify-7.0.0-next.1.tgz", + "integrity": "sha512-ZF71AS2k0OiSnKVT05+NUWARZ+yn0keGAlpkgNWU7SHiYeFS1ZDVpapi9PXR23gJ5U756fyPKaqvlRcYgEpsgA==", "dev": true, "dependencies": { "colorette": "2.0.20", @@ -5025,15 +5007,15 @@ } }, "node_modules/@verdaccio/middleware": { - "version": "6.0.0-6-next.53", - "resolved": "https://registry.npmjs.org/@verdaccio/middleware/-/middleware-6.0.0-6-next.53.tgz", - "integrity": "sha512-shzf8+ww161TGOQA+Ee+JsWLgji07kkxLJr+YQSj3d9glbq4OE64sw51cV3BwpBbIALWziLTmIbYLaZgaRkZYg==", + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/middleware/-/middleware-7.0.0-next.3.tgz", + "integrity": "sha512-7+K23DIakzewjVUiekU2n6gZVXdPZxStKZIh+wE3NGdfIP4tYOQQajJSoIycoLDAcax+ws6BpKRCt2/3DlU0bA==", "dev": true, "dependencies": { - "@verdaccio/config": "6.0.0-6-next.74", - "@verdaccio/core": "6.0.0-6-next.74", - "@verdaccio/url": "11.0.0-6-next.40", - "@verdaccio/utils": "6.0.0-6-next.42", + "@verdaccio/config": "7.0.0-next.3", + "@verdaccio/core": "7.0.0-next.3", + "@verdaccio/url": "12.0.0-next.3", + "@verdaccio/utils": "7.0.0-next.3", "debug": "4.3.4", "express": "4.18.2", "express-rate-limit": "5.5.1", @@ -5071,13 +5053,12 @@ } }, "node_modules/@verdaccio/search": { - "version": "6.0.0-6-next.2", - "resolved": "https://registry.npmjs.org/@verdaccio/search/-/search-6.0.0-6-next.2.tgz", - "integrity": "sha512-5Hkcxoj7crPn6Zth59I54af6KO5Ho7bzvCHCDbEwcmjewKcQJB4Kst4cEtpN/xA1ao0hqOSruEObl7/mqCq8hg==", + "version": "7.0.0-next.2", + "resolved": "https://registry.npmjs.org/@verdaccio/search/-/search-7.0.0-next.2.tgz", + "integrity": "sha512-NoGSpubKB+SB4gRMIoEl3E3NkoKE5f0DnANghB3SnMtVxpJGdwZgylosqDxt8swhQ80+16hYdAp6g44uhjVE6Q==", "dev": true, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=12" }, "funding": { "type": "opencollective", @@ -5085,13 +5066,13 @@ } }, "node_modules/@verdaccio/signature": { - "version": "6.0.0-6-next.2", - "resolved": "https://registry.npmjs.org/@verdaccio/signature/-/signature-6.0.0-6-next.2.tgz", - "integrity": "sha512-aFvMbxxHzJCpPmqSgVuQYvYN2RP11CoSEcTXikkyb1zF4Uf3cOy53zUZ1Y7iOKCRYTgWrmet9KP7+24e44GHxg==", + "version": "7.0.0-next.1", + "resolved": "https://registry.npmjs.org/@verdaccio/signature/-/signature-7.0.0-next.1.tgz", + "integrity": "sha512-uq6divC36rcwyBd6+JeTJXQ9K7d4Kuh7HNg6ZMU4ItSCYkLHJjVqNC2Kzo/SdkYNOd11xJuNlYU8NNuhpqpVuw==", "dev": true, "dependencies": { "debug": "4.3.4", - "jsonwebtoken": "9.0.0", + "jsonwebtoken": "9.0.2", "lodash": "4.17.21" }, "engines": { @@ -5102,43 +5083,6 @@ "url": "https://opencollective.com/verdaccio" } }, - "node_modules/@verdaccio/signature/node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/@verdaccio/signature/node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@verdaccio/signature/node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/@verdaccio/streams": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/@verdaccio/streams/-/streams-10.2.1.tgz", @@ -5154,14 +5098,14 @@ } }, "node_modules/@verdaccio/tarball": { - "version": "11.0.0-6-next.43", - "resolved": "https://registry.npmjs.org/@verdaccio/tarball/-/tarball-11.0.0-6-next.43.tgz", - "integrity": "sha512-/cojl1+EWLhfu5FJh/dLBtwwC+vI6dR0xldJvE7BHJ5P79DnBUbzAqtwoWwsOR2FkGkWoReXZjPR4QVrUivhLA==", + "version": "12.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/tarball/-/tarball-12.0.0-next.3.tgz", + "integrity": "sha512-pIZ24sVd5TmoKKrOcOvLqDU3rOjpjEpDCn3nsEk8UuWhWG121/3Hxr+9EirBjqWJ7Tnurz5mMl1jpgJNQOylKg==", "dev": true, "dependencies": { - "@verdaccio/core": "6.0.0-6-next.74", - "@verdaccio/url": "11.0.0-6-next.40", - "@verdaccio/utils": "6.0.0-6-next.42", + "@verdaccio/core": "7.0.0-next.3", + "@verdaccio/url": "12.0.0-next.3", + "@verdaccio/utils": "7.0.0-next.3", "debug": "4.3.4", "lodash": "4.17.21" }, @@ -5174,18 +5118,18 @@ } }, "node_modules/@verdaccio/ui-theme": { - "version": "6.0.0-6-next.74", - "resolved": "https://registry.npmjs.org/@verdaccio/ui-theme/-/ui-theme-6.0.0-6-next.74.tgz", - "integrity": "sha512-IoAl4bbLF9SFJsQvyEbJeubRs0O2WusOOgry6vsfp1w48+oarcnGkdOU/WZuIdlFhmPdhOJpYL0cFDUBRDvdOA==", + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/ui-theme/-/ui-theme-7.0.0-next.3.tgz", + "integrity": "sha512-mk132QldyfU1abdzLnV6OsYp46k6l4CtACyw0q3bgT8ytRp3fKF05/31vQObEayNWwhSDr/LvCz12s4e3BuVUA==", "dev": true }, "node_modules/@verdaccio/url": { - "version": "11.0.0-6-next.40", - "resolved": "https://registry.npmjs.org/@verdaccio/url/-/url-11.0.0-6-next.40.tgz", - "integrity": "sha512-TGP+96QEgvQMIx+0WsFmxpeV/YJlX+os85zrBipioZDUm/JmNK6i9wCfYjA5Uncn+NGRsI6bUJhi05Ymoh10cA==", + "version": "12.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/url/-/url-12.0.0-next.3.tgz", + "integrity": "sha512-iuGn4KU0sq7GBfefzMbOotWp3s/43VLSyGPf38AZ44cTErjsRH92q8UOx7E9CsVACPRiBfrhUfsKl8qTk/Qs9Q==", "dev": true, "dependencies": { - "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/core": "7.0.0-next.3", "debug": "4.3.4", "lodash": "4.17.21", "validator": "13.9.0" @@ -5198,15 +5142,24 @@ "url": "https://opencollective.com/verdaccio" } }, + "node_modules/@verdaccio/url/node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/@verdaccio/utils": { - "version": "6.0.0-6-next.42", - "resolved": "https://registry.npmjs.org/@verdaccio/utils/-/utils-6.0.0-6-next.42.tgz", - "integrity": "sha512-ckf1N0rlnWd07aQQx+K9/fvO1LtSVGAAls22Isdfb+dfBjUYalIha/EDIEr3mq7QTqm0zA6mLhP7m4Bv35FH6g==", + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@verdaccio/utils/-/utils-7.0.0-next.3.tgz", + "integrity": "sha512-yawwfOXVgR/woFbe4q30Zqyq95N0lPCry4L9YS7ytts7pPdB6FbDnOW9mFHbdKurkDQ563zxyuBWdBZGITG1kQ==", "dev": true, "dependencies": { - "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/core": "7.0.0-next.3", "lodash": "4.17.21", - "minimatch": "3.1.2", + "minimatch": "7.4.6", "semver": "7.5.4" }, "engines": { @@ -5217,6 +5170,15 @@ "url": "https://opencollective.com/verdaccio" } }, + "node_modules/@verdaccio/utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@verdaccio/utils/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5230,15 +5192,18 @@ } }, "node_modules/@verdaccio/utils/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@verdaccio/utils/node_modules/semver": { @@ -5504,6 +5469,7 @@ "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -5524,6 +5490,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -5848,9 +5815,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -5858,15 +5825,15 @@ } }, "node_modules/babel-jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", - "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "dependencies": { - "@jest/transform": "^29.6.2", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -5926,9 +5893,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -6032,12 +5999,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -6169,11 +6136,6 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -6308,9 +6270,9 @@ } }, "node_modules/bson": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", - "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", "engines": { "node": ">=14.20.1" } @@ -6349,6 +6311,15 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -6436,17 +6407,6 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6747,6 +6707,19 @@ "text-hex": "1.0.x" } }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -7121,7 +7094,28 @@ "yaml": "^1.7.2" }, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/create-require": { @@ -7131,11 +7125,12 @@ "dev": true }, "node_modules/cron": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.1.tgz", - "integrity": "sha512-ty0hUSPuENwDtIShDFxUxWEIsqiu2vhoFtt6Vwrbg4lHGtJX2/cV2p0hH6/qaEM9Pj+i6mQoau48BO5wBpkP4w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.3.tgz", + "integrity": "sha512-YBvExkQYF7w0PxyeFLRyr817YVDhGxaCi5/uRRMqa4aWD3IFKRd+uNbpW1VWMdqQy8PZ7CElc+accXJcauPKzQ==", "dependencies": { - "luxon": "^3.2.1" + "@types/luxon": "~3.3.0", + "luxon": "~3.3.0" } }, "node_modules/cross-spawn": { @@ -7502,7 +7497,8 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -7631,9 +7627,9 @@ } }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -7795,9 +7791,9 @@ } }, "node_modules/dotenv": { - "version": "16.1.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", - "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "engines": { "node": ">=12" }, @@ -8027,96 +8023,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.52.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -8124,7 +8044,7 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", + "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", @@ -8187,6 +8107,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -8360,6 +8281,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -8376,6 +8298,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -8430,6 +8353,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "engines": { "node": ">=4.0" } @@ -8438,6 +8362,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8509,17 +8434,16 @@ } }, "node_modules/expect": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", - "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.2", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -8676,7 +8600,8 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fast-redact": { "version": "3.3.0", @@ -9109,6 +9034,14 @@ "node": ">= 12.20" } }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -9457,44 +9390,153 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/google-gax": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", - "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.0.5.tgz", + "integrity": "sha512-yLoYtp4zE+8OQA74oBEbNkbzI6c95W01JSL7RqC8XERKpRvj3ytZp1dgnbA6G9aRsc8pZB25xWYBcCmrbYOEhA==", "dependencies": { - "@grpc/grpc-js": "~1.8.0", + "@grpc/grpc-js": "~1.9.6", "@grpc/proto-loader": "^0.7.0", "@types/long": "^4.0.0", - "@types/rimraf": "^3.0.2", "abort-controller": "^3.0.0", "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", + "google-auth-library": "^9.0.0", "node-fetch": "^2.6.1", "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.2.4", - "protobufjs-cli": "1.1.1", - "retry-request": "^5.0.0" + "proto3-json-serializer": "^2.0.0", + "protobufjs": "7.2.5", + "retry-request": "^7.0.0" }, - "bin": { - "compileProtos": "build/tools/compileProtos.js", - "minifyProtoJson": "build/tools/minify.js" + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/google-gax/node_modules/@grpc/grpc-js": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", - "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "node_modules/google-gax/node_modules/gaxios": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" }, "engines": { - "node": "^8.13.0 || >=10.10.0" + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/gcp-metadata": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.0.0.tgz", + "integrity": "sha512-Ozxyi23/1Ar51wjUT2RDklK+3HxqDr8TLBNK8rBBFQ7T85iIGnXnVusauj06QyqCXRFZig8LZC+TUddWbndlpQ==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/google-auth-library": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.2.0.tgz", + "integrity": "sha512-1oV3p0JhNEhVbj26eF3FAJcv9MXXQt4S0wcvKZaDbl4oHq5V3UJoSbsGZGQNcjoCdhW4kDSwOs11wLlHog3fgQ==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.0.0", + "gcp-metadata": "^6.0.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/gtoken": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", + "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/google-gax/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/google-gax/node_modules/retry-request": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.1.tgz", + "integrity": "sha512-ZI6vJp9rfB71mrZpw+n9p/B6HCsd7QJlSEQftZ+xfJzr3cQ9EPGKw1FF0BnViJ0fYREX6FhymBD2CARpmsFciQ==", + "dependencies": { + "@types/request": "^2.48.8", + "debug": "^4.1.1", + "extend": "^3.0.2", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/teeny-request": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", + "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.9", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/teeny-request/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/google-gax/node_modules/teeny-request/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, "node_modules/google-p12-pem": { @@ -9514,7 +9556,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -9542,13 +9585,13 @@ "dev": true }, "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "dependencies": { "minimist": "^1.2.5", - "neo-async": "^2.6.0", + "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, @@ -9677,6 +9720,27 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -10261,11 +10325,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -10449,15 +10508,15 @@ } }, "node_modules/jest": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", - "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.2" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -10475,12 +10534,13 @@ } }, "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { @@ -10488,28 +10548,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", - "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/expect": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.2", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^29.6.2", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -10568,22 +10628,21 @@ } }, "node_modules/jest-cli": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", - "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@jest/core": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -10602,31 +10661,31 @@ } }, "node_modules/jest-config": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", - "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.2", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.2", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.2", - "jest-environment-node": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-runner": "^29.6.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -10647,24 +10706,24 @@ } }, "node_modules/jest-diff": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", - "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -10674,62 +10733,62 @@ } }, "node_modules/jest-each": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", - "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.2", - "pretty-format": "^29.6.2" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", - "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.2", - "jest-util": "^29.6.2" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", - "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.2", - "jest-worker": "^29.6.2", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -10741,46 +10800,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", - "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", - "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.2" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", - "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.2", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -10789,14 +10848,14 @@ } }, "node_modules/jest-mock": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", - "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.2" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10820,26 +10879,26 @@ } }, "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", - "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.2", - "jest-validate": "^29.6.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -10849,13 +10908,13 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", - "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.2" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10871,30 +10930,30 @@ } }, "node_modules/jest-runner": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", - "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/console": "^29.6.2", - "@jest/environment": "^29.6.2", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.2", - "jest-haste-map": "^29.6.2", - "jest-leak-detector": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-resolve": "^29.6.2", - "jest-runtime": "^29.6.2", - "jest-util": "^29.6.2", - "jest-watcher": "^29.6.2", - "jest-worker": "^29.6.2", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -10922,31 +10981,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", - "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.2", - "@jest/fake-timers": "^29.6.2", - "@jest/globals": "^29.6.2", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-mock": "^29.6.2", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.2", - "jest-snapshot": "^29.6.2", - "jest-util": "^29.6.2", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -10955,9 +11014,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", - "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -10965,20 +11024,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.2", - "@jest/transform": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.2", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.2", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.2", - "jest-message-util": "^29.6.2", - "jest-util": "^29.6.2", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.2", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -10986,12 +11045,12 @@ } }, "node_modules/jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -11003,17 +11062,17 @@ } }, "node_modules/jest-validate": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", - "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.2" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11032,18 +11091,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", - "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.2", - "@jest/types": "^29.6.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.2", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -11051,13 +11110,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.2", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -11107,67 +11166,12 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "node_modules/jsdoc": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", - "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jsdoc/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jsdom": { "version": "22.1.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", @@ -11356,15 +11360,21 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dev": true, "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", @@ -11392,6 +11402,39 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -11446,14 +11489,6 @@ "node": ">= 0.6" } }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -11478,11 +11513,11 @@ "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "node_modules/langchain": { - "version": "0.0.135", - "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.0.135.tgz", - "integrity": "sha512-H/WdGi6o4BkkD6dU6KlC0U5TAOA22yiuf+kS6AmN16QPSTU25JtcZZK3kYx+0luoJE1iCsxrec09D7Fgy3hEUQ==", + "version": "0.0.174", + "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.0.174.tgz", + "integrity": "sha512-nj2t7w/eKfbYGctZrBqOWQpPoeuIRVOSaiITufZ2Q8j+bX2BiZpPQso85n+7UtR8iKS1RwyivkJ6WHbYcdMfDw==", "dependencies": { - "@anthropic-ai/sdk": "^0.5.7", + "@anthropic-ai/sdk": "^0.6.2", "ansi-styles": "^5.0.0", "binary-extensions": "^2.2.0", "camelcase": "6", @@ -11492,16 +11527,17 @@ "js-tiktoken": "^1.0.7", "js-yaml": "^4.1.0", "jsonpointer": "^5.0.1", - "langsmith": "~0.0.26", + "langchainhub": "~0.0.6", + "langsmith": "~0.0.31", "ml-distance": "^4.0.0", "object-hash": "^3.0.0", - "openai": "^3.3.0", + "openai": "~4.4.0", "openapi-types": "^12.1.3", "p-queue": "^6.6.2", "p-retry": "4", "uuid": "^9.0.0", "yaml": "^2.2.1", - "zod": "^3.21.4", + "zod": "^3.22.3", "zod-to-json-schema": "^3.20.4" }, "engines": { @@ -11509,6 +11545,7 @@ }, "peerDependencies": { "@aws-crypto/sha256-js": "^5.0.0", + "@aws-sdk/client-bedrock-runtime": "^3.422.0", "@aws-sdk/client-dynamodb": "^3.310.0", "@aws-sdk/client-kendra": "^3.352.0", "@aws-sdk/client-lambda": "^3.310.0", @@ -11516,72 +11553,90 @@ "@aws-sdk/client-sagemaker-runtime": "^3.310.0", "@aws-sdk/client-sfn": "^3.310.0", "@aws-sdk/credential-provider-node": "^3.388.0", - "@aws-sdk/protocol-http": "^3.374.0", - "@aws-sdk/signature-v4": "^3.374.0", "@azure/storage-blob": "^12.15.0", "@clickhouse/client": "^0.0.14", + "@cloudflare/ai": "^1.0.12", "@elastic/elasticsearch": "^8.4.0", "@getmetal/metal-sdk": "*", - "@getzep/zep-js": "^0.6.3", - "@gomomento/sdk": "^1.23.0", + "@getzep/zep-js": "^0.8.0", + "@gomomento/sdk": "^1.44.1", + "@gomomento/sdk-core": "^1.44.1", + "@gomomento/sdk-web": "^1.44.1", "@google-ai/generativelanguage": "^0.2.1", "@google-cloud/storage": "^6.10.1", "@huggingface/inference": "^1.5.1", "@mozilla/readability": "*", - "@notionhq/client": "^2.2.5", + "@notionhq/client": "^2.2.10", "@opensearch-project/opensearch": "*", - "@pinecone-database/pinecone": "*", + "@pinecone-database/pinecone": "^1.1.0", "@planetscale/database": "^1.8.0", "@qdrant/js-client-rest": "^1.2.0", "@raycast/api": "^1.55.2", "@smithy/eventstream-codec": "^2.0.5", + "@smithy/protocol-http": "^3.0.6", + "@smithy/signature-v4": "^2.0.10", "@smithy/util-utf8": "^2.0.0", "@supabase/postgrest-js": "^1.1.1", "@supabase/supabase-js": "^2.10.0", "@tensorflow-models/universal-sentence-encoder": "*", "@tensorflow/tfjs-converter": "*", "@tensorflow/tfjs-core": "*", - "@tigrisdata/vector": "^1.1.0", "@upstash/redis": "^1.20.6", + "@vercel/kv": "^0.2.3", + "@vercel/postgres": "^0.5.0", "@writerai/writer-sdk": "^0.40.2", "@xata.io/client": "^0.25.1", + "@xenova/transformers": "^2.5.4", "@zilliz/milvus2-sdk-node": ">=2.2.7", "apify-client": "^2.7.1", + "assemblyai": "^2.0.2", "axios": "*", + "cassandra-driver": "^4.7.2", "cheerio": "^1.0.0-rc.12", - "chromadb": "^1.5.3", - "cohere-ai": "^5.0.2", + "chromadb": "*", + "closevector-common": "0.1.0-alpha.1", + "closevector-node": "0.1.0-alpha.10", + "closevector-web": "0.1.0-alpha.16", + "cohere-ai": ">=6.0.0", "d3-dsv": "^2.0.0", "epub2": "^3.0.1", - "faiss-node": "^0.3.0", + "faiss-node": "^0.5.1", + "fast-xml-parser": "^4.2.7", "firebase-admin": "^11.9.0", "google-auth-library": "^8.9.0", + "googleapis": "^126.0.1", "hnswlib-node": "^1.4.2", "html-to-text": "^9.0.5", "ignore": "^5.2.0", "ioredis": "^5.3.2", "jsdom": "*", - "langchainhub": "~0.0.3", + "llmonitor": "^0.5.8", + "lodash": "^4.17.21", "mammoth": "*", "mongodb": "^5.2.0", "mysql2": "^3.3.3", + "neo4j-driver": "*", + "node-llama-cpp": "*", "notion-to-md": "^3.1.0", "pdf-parse": "1.1.1", "peggy": "^3.0.2", "pg": "^8.11.0", "pg-copy-streams": "^6.0.5", - "pickleparser": "^0.1.0", + "pickleparser": "^0.2.1", "playwright": "^1.32.1", + "portkey-ai": "^0.1.11", "puppeteer": "^19.7.2", "redis": "^4.6.4", - "replicate": "^0.12.3", + "replicate": "^0.18.0", "sonix-speech-recognition": "^2.1.1", "srt-parser-2": "^1.2.2", "typeorm": "^0.3.12", "typesense": "^1.5.3", "usearch": "^1.1.1", "vectordb": "^0.1.4", + "voy-search": "0.6.2", "weaviate-ts-client": "^1.4.0", + "web-auth-library": "^1.0.3", "youtube-transcript": "^1.0.6", "youtubei.js": "^5.8.0" }, @@ -11589,6 +11644,9 @@ "@aws-crypto/sha256-js": { "optional": true }, + "@aws-sdk/client-bedrock-runtime": { + "optional": true + }, "@aws-sdk/client-dynamodb": { "optional": true }, @@ -11610,16 +11668,13 @@ "@aws-sdk/credential-provider-node": { "optional": true }, - "@aws-sdk/protocol-http": { - "optional": true - }, - "@aws-sdk/signature-v4": { + "@azure/storage-blob": { "optional": true }, - "@azure/storage-blob": { + "@clickhouse/client": { "optional": true }, - "@clickhouse/client": { + "@cloudflare/ai": { "optional": true }, "@elastic/elasticsearch": { @@ -11634,6 +11689,12 @@ "@gomomento/sdk": { "optional": true }, + "@gomomento/sdk-core": { + "optional": true + }, + "@gomomento/sdk-web": { + "optional": true + }, "@google-ai/generativelanguage": { "optional": true }, @@ -11667,6 +11728,12 @@ "@smithy/eventstream-codec": { "optional": true }, + "@smithy/protocol-http": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, "@smithy/util-utf8": { "optional": true }, @@ -11685,10 +11752,13 @@ "@tensorflow/tfjs-core": { "optional": true }, - "@tigrisdata/vector": { + "@upstash/redis": { "optional": true }, - "@upstash/redis": { + "@vercel/kv": { + "optional": true + }, + "@vercel/postgres": { "optional": true }, "@writerai/writer-sdk": { @@ -11697,21 +11767,39 @@ "@xata.io/client": { "optional": true }, + "@xenova/transformers": { + "optional": true + }, "@zilliz/milvus2-sdk-node": { "optional": true }, "apify-client": { "optional": true }, + "assemblyai": { + "optional": true + }, "axios": { "optional": true }, + "cassandra-driver": { + "optional": true + }, "cheerio": { "optional": true }, "chromadb": { "optional": true }, + "closevector-common": { + "optional": true + }, + "closevector-node": { + "optional": true + }, + "closevector-web": { + "optional": true + }, "cohere-ai": { "optional": true }, @@ -11724,12 +11812,18 @@ "faiss-node": { "optional": true }, + "fast-xml-parser": { + "optional": true + }, "firebase-admin": { "optional": true }, "google-auth-library": { "optional": true }, + "googleapis": { + "optional": true + }, "hnswlib-node": { "optional": true }, @@ -11745,7 +11839,10 @@ "jsdom": { "optional": true }, - "langchainhub": { + "llmonitor": { + "optional": true + }, + "lodash": { "optional": true }, "mammoth": { @@ -11757,6 +11854,12 @@ "mysql2": { "optional": true }, + "neo4j-driver": { + "optional": true + }, + "node-llama-cpp": { + "optional": true + }, "notion-to-md": { "optional": true }, @@ -11778,6 +11881,9 @@ "playwright": { "optional": true }, + "portkey-ai": { + "optional": true + }, "puppeteer": { "optional": true }, @@ -11805,9 +11911,15 @@ "vectordb": { "optional": true }, + "voy-search": { + "optional": true + }, "weaviate-ts-client": { "optional": true }, + "web-auth-library": { + "optional": true + }, "youtube-transcript": { "optional": true }, @@ -11816,6 +11928,14 @@ } } }, + "node_modules/langchain/node_modules/@types/node": { + "version": "18.18.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.7.tgz", + "integrity": "sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/langchain/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -11854,6 +11974,24 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/langchain/node_modules/openai": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.4.0.tgz", + "integrity": "sha512-JN0t628Kh95T0IrXl0HdBqnlJg+4Vq0Bnh55tio+dfCnyzHvMLiWyCM9m726MAJD2YkDU4/8RQB6rNbEq9ct2w==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + } + }, "node_modules/langchain/node_modules/yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", @@ -11862,10 +12000,15 @@ "node": ">= 14" } }, + "node_modules/langchainhub": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/langchainhub/-/langchainhub-0.0.6.tgz", + "integrity": "sha512-SW6105T+YP1cTe0yMf//7kyshCgvCTyFBMTgH2H3s9rTAR4e+78DA/BBrUL/Mt4Q5eMWui7iGuAYb3pgGsdQ9w==" + }, "node_modules/langsmith": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.0.26.tgz", - "integrity": "sha512-TecBjdgYGMxNaWp2L2X0OVgu8lge2WeQ5UpDXluwF3x+kH/WHFVSuR1RCuP+k2628GSVFvXxVIyXvzrHYxrZSw==", + "version": "0.0.45", + "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.0.45.tgz", + "integrity": "sha512-G+Iwt6fQaSooTZZ4ailFvKyRAaFDeARtRCFOH+SR6dOLX5BU8W1W1yDnKvm+mHbE2hriz1tUR4ssJc5+nRtG3Q==", "dependencies": { "@types/uuid": "^9.0.1", "commander": "^10.0.1", @@ -12034,14 +12177,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -12113,11 +12248,47 @@ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -12130,6 +12301,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", @@ -12171,9 +12348,9 @@ } }, "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/lowdb": { "version": "1.0.0", @@ -12210,9 +12387,9 @@ } }, "node_modules/luxon": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.1.tgz", - "integrity": "sha512-2USspxOCXWGIKHwuQ9XElxPPYrDOJHDQ5DQ870CoD+CxJbBnRDIBCfhioUJJjct7BKOy80Ia8cVstIcIMb/0+Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz", + "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==", "engines": { "node": ">=12" } @@ -12264,54 +12441,6 @@ "tmpl": "1.0.5" } }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -12328,11 +12457,6 @@ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -12581,11 +12705,11 @@ } }, "node_modules/mongodb": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz", - "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.0.tgz", + "integrity": "sha512-g+GCMHN1CoRUA+wb1Agv0TI4YTSiWr42B5ulkiAfLLHitGK1R+PkSAf3Lr5rPZwi/3F04LiaZEW0Kxro9Fi2TA==", "dependencies": { - "bson": "^5.4.0", + "bson": "^5.5.0", "mongodb-connection-string-url": "^2.6.0", "socks": "^2.7.1" }, @@ -12593,12 +12717,12 @@ "node": ">=14.20.1" }, "optionalDependencies": { - "saslprep": "^1.0.3" + "@mongodb-js/saslprep": "^1.1.0" }, "peerDependencies": { - "@aws-sdk/credential-providers": "^3.201.0", - "@mongodb-js/zstd": "^1.1.0", - "kerberos": "^2.0.1", + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", "mongodb-client-encryption": ">=2.3.0 <3", "snappy": "^7.2.2" }, @@ -12653,13 +12777,13 @@ } }, "node_modules/mongoose": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.3.tgz", - "integrity": "sha512-eok0lW6mZJHK2vVSWyJb9tUfPMUuRF3h7YC4pU2K2/YSZBlNDUwvKsHgftMOANbokP2Ry+4ylvzAdW4KjkRFjw==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.3.tgz", + "integrity": "sha512-moYP2qWCOdWRDeBxqB/zYwQmQnTBsF5DoolX5uPyI218BkiA1ujGY27P0NTd4oWIX+LLkZPw0LDzlc/7oh1plg==", "dependencies": { - "bson": "^5.4.0", + "bson": "^5.5.0", "kareem": "2.5.1", - "mongodb": "5.7.0", + "mongodb": "5.9.0", "mpath": "0.9.0", "mquery": "5.0.0", "ms": "2.1.3", @@ -12875,9 +12999,9 @@ "dev": true }, "node_modules/nest-winston": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/nest-winston/-/nest-winston-1.9.3.tgz", - "integrity": "sha512-BLDGvbKCeliQNNrNjFRKSbO9hu/a39YL3y+4aU0eTGHh5TgzNMqx5ZscbecKR0fM3/KumMznZdEWmAJBINHl6Q==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/nest-winston/-/nest-winston-1.9.4.tgz", + "integrity": "sha512-ilEmHuuYSAI6aMNR120fLBl42EdY13QI9WRggHdEizt9M7qZlmXJwpbemVWKW/tqRmULjSx/otKNQ3GMQbfoUQ==", "dependencies": { "fast-safe-stringify": "^2.1.1" }, @@ -12967,9 +13091,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", "dev": true, "bin": { "node-gyp-build": "bin.js", @@ -13040,6 +13164,21 @@ "node": ">=0.10.0" } }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -13092,13 +13231,13 @@ "peer": true }, "node_modules/nx": { - "version": "16.7.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.7.2.tgz", - "integrity": "sha512-T7cRC97qJ4H9fg498ZGwFQaTzJdLQaRp6DFUwzFo1B9qzR56A2tA3HBvT/huo85THaDX+/pcgLyeixJKEE5RPg==", + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.9.1.tgz", + "integrity": "sha512-h6jp0fXzEsBO3pwCNS2JbfzJZRgE2DnIo7Sj1/1oBo82o44jNqsPo3nMTj95qhcveJ0qBiKIh+Xw/fghXiRiSQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "16.7.2", + "@nrwl/tao": "16.9.1", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", @@ -13109,13 +13248,14 @@ "cli-spinners": "2.6.1", "cliui": "^7.0.2", "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", "enquirer": "~2.3.6", - "fast-glob": "3.2.7", "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", "glob": "7.1.4", "ignore": "^5.0.4", + "jest-diff": "^29.4.1", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", @@ -13138,20 +13278,20 @@ "nx": "bin/nx.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "16.7.2", - "@nx/nx-darwin-x64": "16.7.2", - "@nx/nx-freebsd-x64": "16.7.2", - "@nx/nx-linux-arm-gnueabihf": "16.7.2", - "@nx/nx-linux-arm64-gnu": "16.7.2", - "@nx/nx-linux-arm64-musl": "16.7.2", - "@nx/nx-linux-x64-gnu": "16.7.2", - "@nx/nx-linux-x64-musl": "16.7.2", - "@nx/nx-win32-arm64-msvc": "16.7.2", - "@nx/nx-win32-x64-msvc": "16.7.2" + "@nx/nx-darwin-arm64": "16.9.1", + "@nx/nx-darwin-x64": "16.9.1", + "@nx/nx-freebsd-x64": "16.9.1", + "@nx/nx-linux-arm-gnueabihf": "16.9.1", + "@nx/nx-linux-arm64-gnu": "16.9.1", + "@nx/nx-linux-arm64-musl": "16.9.1", + "@nx/nx-linux-x64-gnu": "16.9.1", + "@nx/nx-linux-x64-musl": "16.9.1", + "@nx/nx-win32-arm64-msvc": "16.9.1", + "@nx/nx-win32-x64-msvc": "16.9.1" }, "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" + "@swc-node/register": "^1.6.7", + "@swc/core": "^1.3.85" }, "peerDependenciesMeta": { "@swc-node/register": { @@ -13168,18 +13308,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/nx/node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, "node_modules/nx/node_modules/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -14474,12 +14602,12 @@ } }, "node_modules/pretty-format": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", - "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -14499,6 +14627,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -14533,26 +14670,26 @@ } }, "node_modules/property-expr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz", - "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", "dev": true }, "node_modules/proto3-json-serializer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", - "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.0.tgz", + "integrity": "sha512-FB/YaNrpiPkyQNSNPilpn8qn0KdEfkgmJ9JP93PQyF/U4bAiXY5BiUdDhiDO4S48uSQ6AesklgVlrKiqZPzegw==", "dependencies": { "protobufjs": "^7.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } }, "node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", "hasInstallScript": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", @@ -14572,83 +14709,6 @@ "node": ">=12.0.0" } }, - "node_modules/protobufjs-cli": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", - "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^4.0.0", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": "^7.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/protobufjs-cli/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/protobufjs-cli/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/protobufjs/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -14688,9 +14748,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, "funding": [ { @@ -14831,16 +14891,16 @@ } }, "node_modules/redis": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.7.tgz", - "integrity": "sha512-KrkuNJNpCwRm5vFJh0tteMxW8SaUzkm5fBH7eL5hd/D0fAkzvapxbfGPP/r+4JAXdQuX7nebsBkBqA2RHB7Usw==", + "version": "4.6.10", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.10.tgz", + "integrity": "sha512-mmbyhuKgDiJ5TWUhiKhBssz+mjsuSI/lSZNPI9QvZOYzWvYGejtb+W3RlDDf8LD6Bdl5/mZeG8O1feUGhXTxEg==", "dependencies": { "@redis/bloom": "1.2.0", - "@redis/client": "1.5.8", + "@redis/client": "1.5.11", "@redis/graph": "1.1.0", - "@redis/json": "1.0.4", - "@redis/search": "1.1.3", - "@redis/time-series": "1.0.4" + "@redis/json": "1.0.6", + "@redis/search": "1.1.5", + "@redis/time-series": "1.0.5" } }, "node_modules/redis-errors": { @@ -15048,14 +15108,6 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "devOptional": true }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dependencies": { - "lodash": "^4.17.21" - } - }, "node_modules/resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", @@ -15230,18 +15282,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/sass": { "version": "1.66.1", "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", @@ -16020,6 +16060,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -16480,6 +16521,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "dependencies": { "rimraf": "^3.0.0" }, @@ -16838,9 +16880,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -16850,15 +16892,12 @@ "node": ">=14.17" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" }, @@ -16877,10 +16916,10 @@ "node": ">=8" } }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -17048,10 +17087,22 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { "node": ">= 0.10" @@ -17066,23 +17117,23 @@ } }, "node_modules/verdaccio": { - "version": "5.26.1", - "resolved": "https://registry.npmjs.org/verdaccio/-/verdaccio-5.26.1.tgz", - "integrity": "sha512-rpP1O6w3UomhEXQHr0EGMxpTPUsBgkR8VoK2eNS3aFC8xFgaeoeHF/GABd4bSyKMa22JyHjqeEFH46U9plMX+A==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/verdaccio/-/verdaccio-5.27.0.tgz", + "integrity": "sha512-S0XCNgy+s8O3+Prm1uYMYR58WbvsnhUgAm6qk64suZs0YyBrTh/YJSRLYgsjAIiIpO/c2gnvNaDwz2EcX/C7nQ==", "dev": true, "dependencies": { - "@verdaccio/config": "6.0.0-6-next.74", - "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/config": "7.0.0-next.3", + "@verdaccio/core": "7.0.0-next.3", "@verdaccio/local-storage": "10.3.3", - "@verdaccio/logger-7": "6.0.0-6-next.19", - "@verdaccio/middleware": "6.0.0-6-next.53", - "@verdaccio/search": "6.0.0-6-next.2", - "@verdaccio/signature": "6.0.0-6-next.2", + "@verdaccio/logger-7": "7.0.0-next.3", + "@verdaccio/middleware": "7.0.0-next.3", + "@verdaccio/search": "7.0.0-next.2", + "@verdaccio/signature": "7.0.0-next.1", "@verdaccio/streams": "10.2.1", - "@verdaccio/tarball": "11.0.0-6-next.43", - "@verdaccio/ui-theme": "6.0.0-6-next.74", - "@verdaccio/url": "11.0.0-6-next.40", - "@verdaccio/utils": "6.0.0-6-next.42", + "@verdaccio/tarball": "12.0.0-next.3", + "@verdaccio/ui-theme": "7.0.0-next.3", + "@verdaccio/url": "12.0.0-next.3", + "@verdaccio/utils": "7.0.0-next.3", "async": "3.2.4", "clipanion": "3.2.1", "compression": "1.7.4", @@ -17093,10 +17144,10 @@ "express": "4.18.2", "express-rate-limit": "5.5.1", "fast-safe-stringify": "2.1.1", - "handlebars": "4.7.7", + "handlebars": "4.7.8", "js-yaml": "4.1.0", "JSONStream": "1.3.5", - "jsonwebtoken": "9.0.1", + "jsonwebtoken": "9.0.2", "kleur": "4.1.5", "lodash": "4.17.21", "lru-cache": "7.18.3", @@ -17106,9 +17157,9 @@ "pkginfo": "0.4.1", "request": "2.88.2", "semver": "7.5.4", - "validator": "13.9.0", - "verdaccio-audit": "11.0.0-6-next.37", - "verdaccio-htpasswd": "11.0.0-6-next.44" + "validator": "13.11.0", + "verdaccio-audit": "12.0.0-next.3", + "verdaccio-htpasswd": "12.0.0-next.3" }, "bin": { "verdaccio": "bin/verdaccio" @@ -17122,13 +17173,13 @@ } }, "node_modules/verdaccio-audit": { - "version": "11.0.0-6-next.37", - "resolved": "https://registry.npmjs.org/verdaccio-audit/-/verdaccio-audit-11.0.0-6-next.37.tgz", - "integrity": "sha512-hzQq90HmKwy327PueS58V720MRDycSCmo7DNgOy+h8dvITG6XAQ6bSsiTgQScjmwImdp3tkl3bqu9kXh33bPxA==", + "version": "12.0.0-next.3", + "resolved": "https://registry.npmjs.org/verdaccio-audit/-/verdaccio-audit-12.0.0-next.3.tgz", + "integrity": "sha512-LdiCh0fG3u7lsVGxIWZFxZ7ZStsc8u+129T3Rt3wgYOnEn4+NsYGuZJZzoXTBJ+F1ymCjOg77+kpDFHECHxsYA==", "dev": true, "dependencies": { - "@verdaccio/config": "6.0.0-6-next.74", - "@verdaccio/core": "6.0.0-6-next.74", + "@verdaccio/config": "7.0.0-next.3", + "@verdaccio/core": "7.0.0-next.3", "express": "4.18.2", "https-proxy-agent": "5.0.1", "node-fetch": "cjs" @@ -17142,13 +17193,13 @@ } }, "node_modules/verdaccio-htpasswd": { - "version": "11.0.0-6-next.44", - "resolved": "https://registry.npmjs.org/verdaccio-htpasswd/-/verdaccio-htpasswd-11.0.0-6-next.44.tgz", - "integrity": "sha512-ZKCpZ5KhcHXjAlYkCI6CM6O8KO/Pr/x5C89zqjRR7OMaPyOAu0psIJjvhTycn1efZub4pT6Tlj7rCRlmvIbR0w==", + "version": "12.0.0-next.3", + "resolved": "https://registry.npmjs.org/verdaccio-htpasswd/-/verdaccio-htpasswd-12.0.0-next.3.tgz", + "integrity": "sha512-/jdfaGQy0ry2gcQiUB6JsKr2esPZtj5ITuYar+NaFIfIOHrUk+NRdmPNHr1XQyofCzwEyENlgtdZMs1K+yeI4w==", "dev": true, "dependencies": { - "@verdaccio/core": "6.0.0-6-next.74", - "@verdaccio/file-locking": "11.0.0-6-next.7", + "@verdaccio/core": "7.0.0-next.3", + "@verdaccio/file-locking": "12.0.0-next.1", "apache-md5": "1.1.8", "bcryptjs": "2.4.3", "core-js": "3.30.2", @@ -17157,8 +17208,7 @@ "unix-crypt-td-js": "1.1.4" }, "engines": { - "node": ">=14", - "npm": ">=6" + "node": ">=12" }, "funding": { "type": "opencollective", @@ -17166,9 +17216,9 @@ } }, "node_modules/verdaccio-htpasswd/node_modules/@verdaccio/file-locking": { - "version": "11.0.0-6-next.7", - "resolved": "https://registry.npmjs.org/@verdaccio/file-locking/-/file-locking-11.0.0-6-next.7.tgz", - "integrity": "sha512-S0GNoe2oBOgB7fKJN2vZqnl5qDEvdnTfKAfa47InXweJROeul6kjlE2/NlbNbK3zZID01VR1HFrFehMQO0Jyfw==", + "version": "12.0.0-next.1", + "resolved": "https://registry.npmjs.org/@verdaccio/file-locking/-/file-locking-12.0.0-next.1.tgz", + "integrity": "sha512-Zb5G2HEhVRB0jCq4z7QA4dqTdRv/2kIsw2Nkm3j2HqC1OeJRxas3MJAF/OxzbAb1IN32lbg1zycMSk6NcbQkgQ==", "dev": true, "dependencies": { "lockfile": "1.0.4" @@ -17348,11 +17398,11 @@ } }, "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "engines": { - "node": ">= 14" + "node": ">= 8" } }, "node_modules/webidl-conversions": { @@ -17685,11 +17735,11 @@ } }, "node_modules/winston": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", - "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", "dependencies": { - "@colors/colors": "1.5.0", + "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", @@ -17718,12 +17768,12 @@ "node": ">= 6.4.0" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "engines": { - "node": ">=0.10.0" + "node": ">=0.1.90" } }, "node_modules/wordwrap": { @@ -17803,11 +17853,6 @@ "optional": true, "peer": true }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -17899,14 +17944,14 @@ } }, "node_modules/youtube-dl-exec": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-2.4.7.tgz", - "integrity": "sha512-sJ3zV0hlEhznnYkucbRvE5xi5fQ/se+po0LzYd9/TxvNOYD5oBSH/YJ8OPdhgleKdlM4uIPsXOYs6Q5gb2iO8w==", + "version": "2.4.16", + "resolved": "https://registry.npmjs.org/youtube-dl-exec/-/youtube-dl-exec-2.4.16.tgz", + "integrity": "sha512-+ZQe3DbxUUyz4h7TIg1GfNu569VqBeqNUpvCEy19KRBBYgh9Lrxkjwu0LFciy1GOsuW20zDT1Qe2FnNky0QdRQ==", "hasInstallScript": true, "dependencies": { "bin-version-check": "~5.1.0", "dargs": "~7.0.0", - "execa": "~5.1.0", + "execa": "~5.1.1", "is-unix": "~2.0.1", "simple-get": "~4.0.1" }, @@ -17933,9 +17978,9 @@ } }, "node_modules/zod": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", - "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 2493b29..8bee035 100644 --- a/package.json +++ b/package.json @@ -6,65 +6,65 @@ "private": true, "dependencies": { "@google-cloud/error-reporting": "^3.0.5", - "@google-cloud/vision": "^3.1.4", - "@grpc/grpc-js": "^1.9.0", - "@grpc/proto-loader": "^0.7.8", + "@google-cloud/vision": "^4.0.2", + "@grpc/grpc-js": "^1.9.8", + "@grpc/proto-loader": "^0.7.10", "@nestjs/axios": "^3.0.0", - "@nestjs/common": "10.1.3", - "@nestjs/config": "^3.0.0", - "@nestjs/core": "10.1.3", + "@nestjs/common": "10.2.7", + "@nestjs/config": "^3.1.1", + "@nestjs/core": "10.2.7", "@nestjs/event-emitter": "^2.0.2", - "@nestjs/microservices": "^10.1.3", + "@nestjs/microservices": "^10.2.7", "@nestjs/mongoose": "^10.0.1", - "@nestjs/platform-express": "10.1.3", - "@nestjs/schedule": "^3.0.3", - "@sd0x/nest-openai-client": "^0.0.10", + "@nestjs/platform-express": "10.2.7", + "@nestjs/schedule": "^3.0.4", "@supercharge/promise-pool": "^2.4.0", - "axios": "^1.4.0", + "axios": "^1.6.0", "cheerio": "^1.0.0-rc.12", - "discord.js": "^14.12.1", + "discord.js": "^14.13.0", "fluent-ffmpeg": "^2.1.2", "form-data": "^4.0.0", "ioredis": "^5.3.2", - "langchain": "^0.0.135", - "mongoose": "^7.2.3", - "nest-winston": "^1.9.2", + "langchain": "^0.0.174", + "mongoose": "^7.6.3", + "nest-winston": "^1.9.4", "nodejieba": "^2.6.0", "openai": "^3.3.0", "pdf-parse": "^1.1.1", - "redis": "^4.6.7", + "redis": "^4.6.10", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", "tslib": "^2.3.0", "uid": "^2.0.2", - "winston": "^3.10.0", - "youtube-dl-exec": "^2.4.7" + "winston": "^3.11.0", + "youtube-dl-exec": "^2.4.16", + "zod": "^3.22.4" }, "devDependencies": { "@nestjs/schematics": "10.0.2", - "@nestjs/testing": "10.1.3", - "@nx/eslint-plugin": "16.7.2", - "@nx/jest": "16.7.2", - "@nx/js": "16.7.2", - "@nx/linter": "16.7.2", - "@nx/nest": "16.7.2", - "@nx/node": "16.7.2", - "@nx/webpack": "16.7.2", - "@nx/workspace": "16.7.2", + "@nestjs/testing": "10.2.7", + "@nx/eslint-plugin": "16.9.1", + "@nx/jest": "16.9.1", + "@nx/js": "16.9.1", + "@nx/linter": "16.9.1", + "@nx/nest": "16.9.1", + "@nx/node": "16.9.1", + "@nx/webpack": "16.9.1", + "@nx/workspace": "16.9.1", "@types/jest": "^29.5.3", "@types/node": "~18.7.23", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", - "eslint": "8.46.0", + "eslint": "8.52.0", "eslint-config-prettier": "8.1.0", - "jest": "^29.5.0", - "jest-environment-node": "^29.5.0", - "nx": "16.7.2", - "prettier": "^2.6.2", - "ts-jest": "^29.1.0", + "jest": "^29.7.0", + "jest-environment-node": "^29.7.0", + "nx": "16.9.1", + "prettier": "^2.8.8", + "ts-jest": "^29.1.1", "ts-node": "10.9.1", - "typescript": "5.1.6", - "verdaccio": "^5.0.4" + "typescript": "5.2.2", + "verdaccio": "^5.27.0" }, "nx": { "includedScripts": [] diff --git a/scripts/db-start.sh b/scripts/db-start.sh new file mode 100755 index 0000000..11edbec --- /dev/null +++ b/scripts/db-start.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +docker-compose up -d + +sleep 5 + +docker exec mongo1 /scripts/rs-init.sh \ No newline at end of file diff --git a/scripts/rs-init.sh b/scripts/rs-init.sh new file mode 100755 index 0000000..cf03f29 --- /dev/null +++ b/scripts/rs-init.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +mongosh <