diff --git a/.gitignore b/.gitignore index f5c6219c..7e3c534e 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,6 @@ models/ */**/database.sqlite ./backend/src/database.sqlite -.codefox \ No newline at end of file +.codefox + +.env \ No newline at end of file diff --git a/backend/.env b/backend/.env deleted file mode 100644 index bec5018a..00000000 --- a/backend/.env +++ /dev/null @@ -1,5 +0,0 @@ -PORT=8080 -JWT_SECRET="JACKSONCHENNAHEULALLENPENGYU" -JWT_REFRESH_SECRET="JACKSONCHENNAHEULALLENPENGYUREFRESH" -SALT_ROUNDS=123 -NODE_ENV="DEV" \ No newline at end of file diff --git a/backend/.env.development b/backend/.env.development deleted file mode 100644 index d375f0f8..00000000 --- a/backend/.env.development +++ /dev/null @@ -1,5 +0,0 @@ -PORT=8080 -JWT_SECRET="JACKSONCHENNAHEULALLENPENGYU" -JWT_REFRESH="JACKSONCHENNAHEULALLENPENGYUREFRESH" -SALT_ROUNDS=123 -OPENAI_BASE_URI="http://localhost:3001" diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 00000000..7f8afe80 --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,23 @@ +# Server Configuration +PORT=8080 + +# DEV PROD OR TEST +NODE_ENV="DEV" +# JWT Configuration +JWT_SECRET="your_jwt_secret_here" +JWT_REFRESH="your_jwt_refresh_secret_here" +SALT_ROUNDS=10 + +# OpenAI Configuration +OPENAI_BASE_URI="http://localhost:3001" + +# S3/Cloudflare R2 Configuration (Optional) +# If not provided, local file storage will be used +S3_ACCESS_KEY_ID="your_s3_access_key_id" # Must be 32 characters for Cloudflare R2 +S3_SECRET_ACCESS_KEY="your_s3_secret_access_key" +S3_REGION="auto" # Use 'auto' for Cloudflare R2 +S3_BUCKET_NAME="your_bucket_name" +S3_ENDPOINT="https://.r2.cloudflarestorage.com" # Cloudflare R2 endpoint +S3_ACCOUNT_ID="your_cloudflare_account_id" # Your Cloudflare account ID +S3_PUBLIC_URL="https://pub-xxx.r2.dev" # Your R2 public bucket URL + diff --git a/backend/.gitignore b/backend/.gitignore index c493aef4..3ff469a1 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -55,4 +55,5 @@ log-*/ # Backend -/backend/package-lock.json \ No newline at end of file +/backend/package-lock.json +.env \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index a74cf3ff..d084f34d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -28,6 +28,7 @@ }, "dependencies": { "@apollo/server": "^4.11.0", + "@aws-sdk/client-s3": "^3.758.0", "@huggingface/hub": "latest", "@huggingface/transformers": "latest", "@nestjs/apollo": "^12.2.0", @@ -45,6 +46,7 @@ "@types/toposort": "^2.0.7", "axios": "^1.7.7", "bcrypt": "^5.1.1", + "class-transformer": "^0.5.1", "class-validator": "^0.14.1", "dotenv": "^16.4.7", "eslint-plugin-unused-imports": "^4.1.4", @@ -53,6 +55,7 @@ "gpt-3-encoder": "^1.1.4", "graphql": "^16.9.0", "graphql-subscriptions": "^2.0.0", + "graphql-upload-minimal": "^1.6.1", "graphql-ws": "^5.16.0", "lodash": "^4.17.21", "markdown-to-txt": "^2.0.1", diff --git a/backend/src/config/config.module.ts b/backend/src/config/config.module.ts new file mode 100644 index 00000000..37864ce0 --- /dev/null +++ b/backend/src/config/config.module.ts @@ -0,0 +1,34 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule as NestConfigModule } from '@nestjs/config'; +import { AppConfigService } from './config.service'; +import { EnvironmentVariables } from './env.validation'; +import { plainToInstance } from 'class-transformer'; +import { validateSync } from 'class-validator'; + +const validate = (config: Record) => { + const validatedConfig = plainToInstance(EnvironmentVariables, config, { + enableImplicitConversion: true, + }); + + const errors = validateSync(validatedConfig, { + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new Error(errors.toString()); + } + + return validatedConfig; +}; + +@Module({ + imports: [ + NestConfigModule.forRoot({ + validate, + isGlobal: true, + }), + ], + providers: [AppConfigService], + exports: [AppConfigService], +}) +export class AppConfigModule {} diff --git a/backend/src/config/config.service.ts b/backend/src/config/config.service.ts new file mode 100644 index 00000000..686450f0 --- /dev/null +++ b/backend/src/config/config.service.ts @@ -0,0 +1,71 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService as NestConfigService } from '@nestjs/config'; +import { EnvironmentVariables } from './env.validation'; + +@Injectable() +export class AppConfigService { + constructor(private configService: NestConfigService) {} + + /** + * Get server port from environment + */ + get port(): number { + return this.configService.get('PORT'); + } + + /** + * Get JWT secret key for token generation + */ + get jwtSecret(): string { + return this.configService.get('JWT_SECRET'); + } + + /** + * Get JWT refresh token secret + */ + get jwtRefresh(): string { + return this.configService.get('JWT_REFRESH'); + } + + /** + * Get password hashing salt rounds + */ + get saltRounds(): number { + return this.configService.get('SALT_ROUNDS'); + } + + /** + * Get OpenAI API base URI + */ + get openaiBaseUri(): string { + return this.configService.get('OPENAI_BASE_URI'); + } + + /** + * Get S3/Cloudflare R2 configuration object + */ + get s3Config() { + return { + accessKeyId: this.configService.get('S3_ACCESS_KEY_ID'), + secretAccessKey: this.configService.get('S3_SECRET_ACCESS_KEY'), + region: this.configService.get('S3_REGION'), + bucketName: this.configService.get('S3_BUCKET_NAME'), + endpoint: this.configService.get('S3_ENDPOINT'), + accountId: this.configService.get('S3_ACCOUNT_ID'), + publicUrl: this.configService.get('S3_PUBLIC_URL'), + }; + } + + /** + * Check if S3 storage is properly configured + */ + get hasS3Configured(): boolean { + const config = this.s3Config; + return !!( + config.accessKeyId && + config.secretAccessKey && + config.region && + (config.endpoint || config.accountId) + ); + } +} diff --git a/backend/src/config/env.validation.ts b/backend/src/config/env.validation.ts new file mode 100644 index 00000000..0e81f5f3 --- /dev/null +++ b/backend/src/config/env.validation.ts @@ -0,0 +1,51 @@ +import { IsOptional, IsString, IsNumber, IsIn } from 'class-validator'; + +export class EnvironmentVariables { + @IsNumber() + PORT: number; + + @IsString() + @IsIn(['DEV', 'PROD', 'TEST']) + NODE_ENV: string; + + @IsString() + JWT_SECRET: string; + + @IsString() + JWT_REFRESH: string; + + @IsNumber() + SALT_ROUNDS: number; + + @IsString() + OPENAI_BASE_URI: string; + + // S3/Cloudflare R2 Configuration - all optional + @IsOptional() + @IsString() + S3_ACCESS_KEY_ID?: string; + + @IsOptional() + @IsString() + S3_SECRET_ACCESS_KEY?: string; + + @IsOptional() + @IsString() + S3_REGION?: string; + + @IsOptional() + @IsString() + S3_BUCKET_NAME?: string; + + @IsOptional() + @IsString() + S3_ENDPOINT?: string; + + @IsOptional() + @IsString() + S3_ACCOUNT_ID?: string; + + @IsOptional() + @IsString() + S3_PUBLIC_URL?: string; +} diff --git a/backend/src/guard/project.guard.ts b/backend/src/guard/project.guard.ts index a6dac748..9d3ee0d5 100644 --- a/backend/src/guard/project.guard.ts +++ b/backend/src/guard/project.guard.ts @@ -10,6 +10,9 @@ import { JwtService } from '@nestjs/jwt'; import { ProjectService } from '../project/project.service'; +/** + * This guard checks if the user is authorized to access a project. + */ @Injectable() export class ProjectGuard implements CanActivate { private readonly logger = new Logger('ProjectGuard'); diff --git a/backend/src/main.ts b/backend/src/main.ts index f36dff02..b084baaa 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -3,6 +3,7 @@ import { AppModule } from './app.module'; import 'reflect-metadata'; import * as dotenv from 'dotenv'; import { Logger } from '@nestjs/common'; +import { graphqlUploadExpress } from 'graphql-upload-minimal'; async function bootstrap() { const logger = new Logger('Bootstrap'); @@ -18,10 +19,16 @@ async function bootstrap() { 'Authorization', 'Access-Control-Allow-Origin', 'Access-Control-Allow-Credentials', + 'Apollo-Require-Preflight', 'x-refresh-token', ], }); + app.use( + '/graphql', + graphqlUploadExpress({ maxFileSize: 50000000, maxFiles: 10 }), + ); + console.log('process.env.PORT:', process.env.PORT); const server = await app.listen(process.env.PORT ?? 8080); logger.log(`Application is running on port ${process.env.PORT ?? 8080}`); diff --git a/backend/src/project/dto/project.input.ts b/backend/src/project/dto/project.input.ts index 26c05551..f6715316 100644 --- a/backend/src/project/dto/project.input.ts +++ b/backend/src/project/dto/project.input.ts @@ -2,6 +2,7 @@ import { InputType, Field, ID, ObjectType } from '@nestjs/graphql'; import { IsNotEmpty, IsString, IsUUID, IsOptional } from 'class-validator'; import { Project } from '../project.model'; +import { FileUpload, GraphQLUpload } from 'graphql-upload-minimal'; /** * @deprecated We don't need project upsert @@ -118,3 +119,14 @@ export class FetchPublicProjectsInputs { @Field() size: number; } + +@InputType() +export class UpdateProjectPhotoInput { + @IsString() + @Field(() => ID) + projectId: string; + + @IsOptional() + @Field(() => GraphQLUpload) + file: FileUpload; +} diff --git a/backend/src/project/project.module.ts b/backend/src/project/project.module.ts index c0be9389..9145f7d2 100644 --- a/backend/src/project/project.module.ts +++ b/backend/src/project/project.module.ts @@ -9,11 +9,15 @@ import { ProjectGuard } from '../guard/project.guard'; import { ChatService } from 'src/chat/chat.service'; import { User } from 'src/user/user.model'; import { Chat } from 'src/chat/chat.model'; +import { AppConfigModule } from 'src/config/config.module'; +import { UploadModule } from 'src/upload/upload.module'; @Module({ imports: [ TypeOrmModule.forFeature([Project, Chat, User, ProjectPackages]), - AuthModule, // Import AuthModule to provide JwtService to the ProjectGuard + AuthModule, + AppConfigModule, + UploadModule, ], providers: [ChatService, ProjectService, ProjectsResolver, ProjectGuard], exports: [ProjectService, ProjectGuard], diff --git a/backend/src/project/project.resolver.ts b/backend/src/project/project.resolver.ts index 69686ee5..ea1ccd34 100644 --- a/backend/src/project/project.resolver.ts +++ b/backend/src/project/project.resolver.ts @@ -15,6 +15,7 @@ import { CreateProjectInput, FetchPublicProjectsInputs, IsValidProjectInput, + UpdateProjectPhotoInput, } from './dto/project.input'; import { Logger, UseGuards } from '@nestjs/common'; import { ProjectGuard } from '../guard/project.guard'; @@ -87,22 +88,33 @@ export class ProjectsResolver { return this.projectService.subscribeToProject(userId, projectId); } + @UseGuards(ProjectGuard) @Mutation(() => Project) - async updateProjectPhotoUrl( + async updateProjectPhoto( @GetUserIdFromToken() userId: string, - @Args('projectId', { type: () => ID }) projectId: string, - @Args('photoUrl') photoUrl: string, + @Args('input') input: UpdateProjectPhotoInput, ): Promise { - this.logger.log( - `User ${userId} updating photo URL for project ${projectId}`, - ); + const { projectId, file } = input; + this.logger.log(`User ${userId} uploading photo for project ${projectId}`); + + // Extract the file data + const { createReadStream, mimetype } = await file; + + // Buffer the file content + const chunks = []; + for await (const chunk of createReadStream()) { + chunks.push(chunk); + } + const buffer = Buffer.concat(chunks); + + // Call the service with the extracted buffer and mimetype return this.projectService.updateProjectPhotoUrl( userId, projectId, - photoUrl, + buffer, + mimetype, ); } - @Mutation(() => Project) async updateProjectPublicStatus( @GetUserIdFromToken() userId: string, diff --git a/backend/src/project/project.service.ts b/backend/src/project/project.service.ts index 61d92f51..5a057bbe 100644 --- a/backend/src/project/project.service.ts +++ b/backend/src/project/project.service.ts @@ -26,16 +26,17 @@ import { BuilderContext } from 'src/build-system/context'; import { ChatService } from 'src/chat/chat.service'; import { Chat } from 'src/chat/chat.model'; import { v4 as uuidv4 } from 'uuid'; +import { UploadService } from 'src/upload/upload.service'; import { PROJECT_DAILY_LIMIT, ProjectRateLimitException, } from './project-limits'; - @Injectable() export class ProjectService { private readonly model: OpenAIModelProvider = OpenAIModelProvider.getInstance(); private readonly logger = new Logger('ProjectService'); + constructor( @InjectRepository(Project) private projectsRepository: Repository, @@ -44,6 +45,7 @@ export class ProjectService { @InjectRepository(ProjectPackages) private projectPackagesRepository: Repository, private chatService: ChatService, + private uploadService: UploadService, ) {} async getProjectsByUser(userId: string): Promise { @@ -468,17 +470,35 @@ export class ProjectService { async updateProjectPhotoUrl( userId: string, projectId: string, - photoUrl: string, + file: Buffer, + mimeType: string, ): Promise { const project = await this.getProjectById(projectId); // Check ownership permission this.checkProjectOwnership(project, userId); - // Update photo URL - project.photoUrl = photoUrl; + try { + // Use the upload service to handle the file upload + const subdirectory = `projects/${projectId}/images`; + const uploadResult = await this.uploadService.upload( + file, + mimeType, + subdirectory, + ); - return this.projectsRepository.save(project); + // Update the project with the new URL + project.photoUrl = uploadResult.url; + + this.logger.debug( + `Updated photo URL for project ${projectId} to ${uploadResult.url}`, + ); + + return this.projectsRepository.save(project); + } catch (error) { + this.logger.error('Error uploading image:', error); + throw new InternalServerErrorException('Failed to upload image:', error); + } } /** diff --git a/backend/src/upload/upload.module.ts b/backend/src/upload/upload.module.ts new file mode 100644 index 00000000..555013bd --- /dev/null +++ b/backend/src/upload/upload.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { UploadService } from './upload.service'; +import { AppConfigModule } from '../config/config.module'; + +@Module({ + imports: [AppConfigModule], + providers: [UploadService], + exports: [UploadService], +}) +export class UploadModule {} diff --git a/backend/src/upload/upload.service.ts b/backend/src/upload/upload.service.ts new file mode 100644 index 00000000..b78e89b7 --- /dev/null +++ b/backend/src/upload/upload.service.ts @@ -0,0 +1,193 @@ +import { Injectable } from '@nestjs/common'; +import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'; +import { v4 as uuidv4 } from 'uuid'; +import path from 'path'; +import { existsSync, mkdirSync, createWriteStream } from 'fs-extra'; +import { finished } from 'stream/promises'; +import { getRootDir } from 'codefox-common'; +import { FileUpload } from 'graphql-upload-minimal'; +import * as fs from 'fs'; +import { AppConfigService } from 'src/config/config.service'; +export interface UploadResult { + url: string; + key: string; +} + +@Injectable() +export class UploadService { + private s3Client: S3Client | null = null; + private readonly mediaDir: string; + + constructor(private configService: AppConfigService) { + // Initialize S3 client if configurations are available + if (this.configService.hasS3Configured) { + const s3Config = this.configService.s3Config; + this.s3Client = new S3Client({ + region: s3Config.region, + endpoint: this.getEndpoint(), + credentials: { + accessKeyId: s3Config.accessKeyId, + secretAccessKey: s3Config.secretAccessKey, + }, + }); + } + + // Initialize media directory for local storage + this.mediaDir = path.join(getRootDir(), 'media'); + if (!existsSync(this.mediaDir)) { + mkdirSync(this.mediaDir, { recursive: true }); + } + } + + /** + * Get the S3 endpoint URL based on configuration + * Constructs the endpoint from account ID if not explicitly provided + * @returns The S3 endpoint URL string + */ + private getEndpoint(): string { + const s3Config = this.configService.s3Config; + + // Use explicit endpoint if provided + if (s3Config.endpoint) { + return s3Config.endpoint; + } + + // Construct endpoint from account ID for Cloudflare R2 + if (s3Config.accountId) { + return `https://${s3Config.accountId}.r2.cloudflarestorage.com`; + } + + // Fallback to default Cloudflare endpoint (should not reach here if hasS3Configured is properly checked) + return 'https://r2.cloudflarestorage.com'; + } + + /** + * Upload a file to either S3/Cloudflare R2 or local storage based on configuration + * @param file File to upload (can be a GraphQL FileUpload or a Buffer) + * @param mimetype File mimetype (required when uploading a Buffer) + * @param subdirectory Directory path to store the file in + * @returns Promise with the upload result + */ + async upload( + file: FileUpload | Buffer, + mimetype?: string, + subdirectory: string = 'uploads', + ): Promise { + // Generate filename + const fileExtension = mimetype?.split('/')[1] || 'jpg'; + const filename = `${uuidv4()}.${fileExtension}`; + const key = `${subdirectory}/${filename}`; + + // Handle different file input types + if (Buffer.isBuffer(file)) { + // Direct buffer upload + if (!mimetype) { + throw new Error('Mimetype is required when uploading a buffer'); + } + + if (this.s3Client) { + // Upload to S3/Cloudflare R2 + await this.s3Client.send( + new PutObjectCommand({ + Bucket: this.configService.s3Config.bucketName, + Key: key, + Body: file, + ContentType: mimetype, + }), + ); + + // Get the appropriate URL for the uploaded file + const bucketUrl = this.getBucketUrl(); + + return { url: `${bucketUrl}/${key}`, key }; + } else { + // Upload to local storage from buffer + const directory = path.join(this.mediaDir, subdirectory); + if (!existsSync(directory)) { + mkdirSync(directory, { recursive: true }); + } + + const filePath = path.join(directory, filename); + + try { + await fs.promises.writeFile(filePath, file); + return { url: `/media/${key}`, key }; + } catch (error) { + throw new Error(`Failed to upload file: ${error.message}`); + } + } + } else { + // GraphQL FileUpload + const { createReadStream, mimetype: fileMimetype } = await file; + + if (this.s3Client) { + // Convert stream to buffer and upload to S3/Cloudflare R2 + const buffer = await this.streamToBuffer(createReadStream()); + + await this.s3Client.send( + new PutObjectCommand({ + Bucket: this.configService.s3Config.bucketName, + Key: key, + Body: buffer, + ContentType: fileMimetype, + }), + ); + + // Get the appropriate URL for the uploaded file + const bucketUrl = this.getBucketUrl(); + + return { url: `${bucketUrl}/${key}`, key }; + } else { + // Upload to local storage using stream + const directory = path.join(this.mediaDir, subdirectory); + if (!existsSync(directory)) { + mkdirSync(directory, { recursive: true }); + } + + const filePath = path.join(directory, filename); + const writeStream = createWriteStream(filePath); + + createReadStream().pipe(writeStream); + + try { + await finished(writeStream); + return { url: `/media/${key}`, key }; + } catch (error) { + throw new Error(`Failed to upload file: ${error.message}`); + } + } + } + } + + /** + * Convert a readable stream to a buffer + * @param stream Readable stream + * @returns Promise with buffer + */ + private async streamToBuffer(stream: NodeJS.ReadableStream): Promise { + const chunks: Buffer[] = []; + + return new Promise((resolve, reject) => { + stream.on('data', (chunk) => chunks.push(Buffer.from(chunk))); + stream.on('error', (err) => reject(err)); + stream.on('end', () => resolve(Buffer.concat(chunks))); + }); + } + + /** + * Get the bucket URL to use in the returned file URL + * @returns The bucket URL string + */ + private getBucketUrl(): string { + const s3Config = this.configService.s3Config; + + // If a public URL is configured, use it (e.g., CDN or custom domain) + if (s3Config.publicUrl) { + return s3Config.publicUrl; + } + + // Use the constructed endpoint + bucket name + const endpoint = this.getEndpoint(); + return `${endpoint}/${s3Config.bucketName}`; + } +} diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs index 0374b496..c68c442e 100644 --- a/frontend/next.config.mjs +++ b/frontend/next.config.mjs @@ -28,7 +28,7 @@ const nextConfig = { remotePatterns: [ { protocol: 'https', - hostname: 'picsum.photos', + hostname: '*', pathname: '/**', }, ], diff --git a/frontend/package.json b/frontend/package.json index 09b55b32..ffb7364b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,7 +16,6 @@ "generate:watch": "graphql-codegen --watch" }, "dependencies": { - "codefox-common": "workspace:*", "@apollo/client": "^3.11.8", "@emoji-mart/data": "^1.2.1", "@emoji-mart/react": "^1.1.1", @@ -38,9 +37,12 @@ "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-tooltip": "^1.1.6", "@radix-ui/react-visually-hidden": "^1.1.1", + "@types/apollo-upload-client": "^18.0.0", "@types/dom-speech-recognition": "^0.0.4", + "apollo-upload-client": "^18.0.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "codefox-common": "workspace:*", "emoji-mart": "^5.6.0", "framer-motion": "^11.18.2", "graphql": "^16.9.0", diff --git a/frontend/src/graphql/request.ts b/frontend/src/graphql/request.ts index 7b099dd6..3a0d5fef 100644 --- a/frontend/src/graphql/request.ts +++ b/frontend/src/graphql/request.ts @@ -209,17 +209,6 @@ export const UPDATE_PROJECT_PUBLIC_STATUS = gql` } `; -// Mutation to update project photo URL -export const UPDATE_PROJECT_PHOTO_URL = gql` - mutation UpdateProjectPhotoUrl($projectId: ID!, $photoUrl: String!) { - updateProjectPhotoUrl(projectId: $projectId, photoUrl: $photoUrl) { - id - projectName - photoUrl - } - } -`; - // Query to get subscribed/forked projects export const GET_SUBSCRIBED_PROJECTS = gql` query GetSubscribedProjects { diff --git a/frontend/src/graphql/schema.gql b/frontend/src/graphql/schema.gql index 7a256c75..c637f81d 100644 --- a/frontend/src/graphql/schema.gql +++ b/frontend/src/graphql/schema.gql @@ -54,9 +54,7 @@ input CreateProjectInput { public: Boolean } -""" -Date custom scalar type -""" +"""Date custom scalar type""" scalar Date input FetchPublicProjectsInputs { @@ -115,7 +113,7 @@ type Mutation { subscribeToProject(projectId: ID!): Project! triggerChatStream(input: ChatInputType!): Boolean! updateChatTitle(updateChatTitleInput: UpdateChatTitleInput!): Chat - updateProjectPhotoUrl(photoUrl: String!, projectId: ID!): Project! + updateProjectPhoto(input: UpdateProjectPhotoInput!): Project! updateProjectPublicStatus(isPublic: Boolean!, projectId: ID!): Project! } @@ -210,6 +208,14 @@ input UpdateChatTitleInput { title: String } +input UpdateProjectPhotoInput { + file: Upload! + projectId: ID! +} + +"""The `Upload` scalar type represents a file upload.""" +scalar Upload + type User { chats: [Chat!]! createdAt: Date! @@ -221,4 +227,4 @@ type User { subscribedProjects: [Project!] @deprecated(reason: "Use projects with forkedFromId instead") updatedAt: Date! username: String! -} +} \ No newline at end of file diff --git a/frontend/src/graphql/type.tsx b/frontend/src/graphql/type.tsx index 554833ce..9f8b8b8f 100644 --- a/frontend/src/graphql/type.tsx +++ b/frontend/src/graphql/type.tsx @@ -36,6 +36,8 @@ export type Scalars = { Float: { input: number; output: number }; /** Date custom scalar type */ Date: { input: Date; output: Date }; + /** The `Upload` scalar type represents a file upload. */ + Upload: { input: any; output: any }; }; export type Chat = { @@ -154,7 +156,7 @@ export type Mutation = { subscribeToProject: Project; triggerChatStream: Scalars['Boolean']['output']; updateChatTitle?: Maybe; - updateProjectPhotoUrl: Project; + updateProjectPhoto: Project; updateProjectPublicStatus: Project; }; @@ -210,9 +212,8 @@ export type MutationUpdateChatTitleArgs = { updateChatTitleInput: UpdateChatTitleInput; }; -export type MutationUpdateProjectPhotoUrlArgs = { - photoUrl: Scalars['String']['input']; - projectId: Scalars['ID']['input']; +export type MutationUpdateProjectPhotoArgs = { + input: UpdateProjectPhotoInput; }; export type MutationUpdateProjectPublicStatusArgs = { @@ -336,6 +337,11 @@ export type UpdateChatTitleInput = { title?: InputMaybe; }; +export type UpdateProjectPhotoInput = { + file: Scalars['Upload']['input']; + projectId: Scalars['ID']['input']; +}; + export type User = { __typename: 'User'; chats: Array; @@ -491,6 +497,8 @@ export type ResolversTypes = ResolversObject<{ String: ResolverTypeWrapper; Subscription: ResolverTypeWrapper<{}>; UpdateChatTitleInput: UpdateChatTitleInput; + UpdateProjectPhotoInput: UpdateProjectPhotoInput; + Upload: ResolverTypeWrapper; User: ResolverTypeWrapper; }>; @@ -524,6 +532,8 @@ export type ResolversParentTypes = ResolversObject<{ String: Scalars['String']['output']; Subscription: {}; UpdateChatTitleInput: UpdateChatTitleInput; + UpdateProjectPhotoInput: UpdateProjectPhotoInput; + Upload: Scalars['Upload']['output']; User: User; }>; @@ -730,11 +740,11 @@ export type MutationResolvers< ContextType, RequireFields >; - updateProjectPhotoUrl?: Resolver< + updateProjectPhoto?: Resolver< ResolversTypes['Project'], ParentType, ContextType, - RequireFields + RequireFields >; updateProjectPublicStatus?: Resolver< ResolversTypes['Project'], @@ -900,6 +910,11 @@ export type SubscriptionResolvers< >; }>; +export interface UploadScalarConfig + extends GraphQLScalarTypeConfig { + name: 'Upload'; +} + export type UserResolvers< ContextType = any, ParentType extends @@ -941,5 +956,6 @@ export type Resolvers = ResolversObject<{ Query?: QueryResolvers; RefreshTokenResponse?: RefreshTokenResponseResolvers; Subscription?: SubscriptionResolvers; + Upload?: GraphQLScalarType; User?: UserResolvers; }>; diff --git a/frontend/src/lib/client.ts b/frontend/src/lib/client.ts index d9fe6586..9f8aa7d2 100644 --- a/frontend/src/lib/client.ts +++ b/frontend/src/lib/client.ts @@ -3,7 +3,6 @@ import { ApolloClient, InMemoryCache, - HttpLink, ApolloLink, from, split, @@ -12,13 +11,14 @@ import { onError } from '@apollo/client/link/error'; import { GraphQLWsLink } from '@apollo/client/link/subscriptions'; import { createClient } from 'graphql-ws'; import { getMainDefinition } from '@apollo/client/utilities'; +import createUploadLink from 'apollo-upload-client/createUploadLink.mjs'; import { LocalStore } from '@/lib/storage'; -// HTTP Link -const httpLink = new HttpLink({ +// Create the upload link as the terminating link +const uploadLink = createUploadLink({ uri: process.env.NEXT_PUBLIC_GRAPHQL_URL || 'http://localhost:8080/graphql', headers: { - 'Content-Type': 'application/json', + 'Apollo-Require-Preflight': 'true', 'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Origin': '*', }, @@ -85,7 +85,15 @@ const errorLink = onError(({ graphQLErrors, networkError }) => { } }); -// Split traffic based on operation type +// Build the HTTP link chain +const httpLinkWithMiddleware = from([ + errorLink, + requestLoggingMiddleware, + authMiddleware, + uploadLink as unknown as ApolloLink, // Cast to ApolloLink to satisfy TypeScript +]); + +// Split traffic between WebSocket and HTTP const splitLink = wsLink ? split( ({ query }) => { @@ -96,9 +104,9 @@ const splitLink = wsLink ); }, wsLink, - from([errorLink, requestLoggingMiddleware, authMiddleware, httpLink]) + httpLinkWithMiddleware ) - : from([errorLink, requestLoggingMiddleware, authMiddleware, httpLink]); + : httpLinkWithMiddleware; // Create Apollo Client export const client = new ApolloClient({ diff --git a/llm-server/.env b/llm-server/.env deleted file mode 100644 index e30ddc6f..00000000 --- a/llm-server/.env +++ /dev/null @@ -1,9 +0,0 @@ -# Server Configuration -PORT=8001 - -# Model Configuration -MODEL_PATH=./models -MODEL_TYPE=llama - -# Other Configuration -NODE_ENV=development \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 553258ac..814f243e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,6 +36,9 @@ importers: '@apollo/server': specifier: ^4.11.0 version: 4.11.3(graphql@16.10.0) + '@aws-sdk/client-s3': + specifier: ^3.758.0 + version: 3.758.0 '@huggingface/hub': specifier: latest version: 1.0.1 @@ -50,7 +53,7 @@ importers: version: 3.1.3(@nestjs/common@10.4.15)(axios@1.8.1)(rxjs@7.8.2) '@nestjs/common': specifier: ^10.0.0 - version: 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/config': specifier: ^3.2.3 version: 3.3.0(@nestjs/common@10.4.15)(rxjs@7.8.2) @@ -59,7 +62,7 @@ importers: version: 10.4.15(@nestjs/common@10.4.15)(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/graphql': specifier: ^12.2.0 - version: 12.2.2(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(class-validator@0.14.1)(graphql@16.10.0)(reflect-metadata@0.2.2) + version: 12.2.2(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.10.0)(reflect-metadata@0.2.2) '@nestjs/jwt': specifier: ^10.2.0 version: 10.2.0(@nestjs/common@10.4.15) @@ -87,6 +90,9 @@ importers: bcrypt: specifier: ^5.1.1 version: 5.1.1 + class-transformer: + specifier: ^0.5.1 + version: 0.5.1 class-validator: specifier: ^0.14.1 version: 0.14.1 @@ -111,6 +117,9 @@ importers: graphql-subscriptions: specifier: ^2.0.0 version: 2.0.0(graphql@16.10.0) + graphql-upload-minimal: + specifier: ^1.6.1 + version: 1.6.1(graphql@16.10.0) graphql-ws: specifier: ^5.16.0 version: 5.16.2(graphql@16.10.0) @@ -233,7 +242,7 @@ importers: devDependencies: '@nestjs/common': specifier: 10.4.15 - version: 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 @@ -327,7 +336,7 @@ importers: version: 3.10.0(react-hook-form@7.54.2) '@langchain/community': specifier: ^0.3.1 - version: 0.3.33(@browserbasehq/stagehand@1.13.1)(@ibm-cloud/watsonx-ai@1.5.1)(@langchain/core@0.3.42)(axios@1.7.9)(ibm-cloud-sdk-core@5.1.3)(openai@4.86.1)(ws@8.18.1) + version: 0.3.34(@browserbasehq/stagehand@1.13.1)(@ibm-cloud/watsonx-ai@1.5.1)(@langchain/core@0.3.42)(axios@1.7.9)(ibm-cloud-sdk-core@5.1.3)(openai@4.86.1)(ws@8.18.1) '@langchain/core': specifier: ^0.3.3 version: 0.3.42(openai@4.86.1) @@ -336,7 +345,7 @@ importers: version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1)(react@18.3.1) '@nestjs/common': specifier: ^10.4.6 - version: 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@radix-ui/react-avatar': specifier: ^1.1.0 version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) @@ -376,9 +385,15 @@ importers: '@radix-ui/react-visually-hidden': specifier: ^1.1.1 version: 1.1.2(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) + '@types/apollo-upload-client': + specifier: ^18.0.0 + version: 18.0.0(@types/react@18.3.18)(graphql-ws@5.16.2)(react-dom@18.3.1)(react@18.3.1)(subscriptions-transport-ws@0.11.0) '@types/dom-speech-recognition': specifier: ^0.0.4 version: 0.0.4 + apollo-upload-client: + specifier: ^18.0.0 + version: 18.0.1(@apollo/client@3.13.1)(graphql@16.10.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -405,7 +420,7 @@ importers: version: 0.445.0(react@18.3.1) motion: specifier: ^12.4.7 - version: 12.4.9(react-dom@18.3.1)(react@18.3.1) + version: 12.4.10(react-dom@18.3.1)(react@18.3.1) next: specifier: ^14.2.13 version: 14.2.24(@babel/core@7.26.9)(@playwright/test@1.50.1)(react-dom@18.3.1)(react@18.3.1) @@ -417,7 +432,7 @@ importers: version: 18.3.1 react-activity-calendar: specifier: ^2.7.8 - version: 2.7.8(react@18.3.1) + version: 2.7.9(react@18.3.1) react-code-blocks: specifier: ^0.1.6 version: 0.1.6(react-dom@18.3.1)(react@18.3.1) @@ -556,7 +571,7 @@ importers: version: 3.3.3 '@nestjs/common': specifier: ^10.4.5 - version: 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + version: 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@types/axios': specifier: ^0.14.4 version: 0.14.4 @@ -660,8 +675,8 @@ importers: packages: - /@0no-co/graphql.web@1.1.1(graphql@16.10.0): - resolution: {integrity: sha512-F2i3xdycesw78QCOBHmpTn7eaD2iNXGwB2gkfwxcOfBbeauYpr8RBSyJOkDrFtKtVRMclg8Sg3n1ip0ACyUuag==} + /@0no-co/graphql.web@1.1.2(graphql@16.10.0): + resolution: {integrity: sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 peerDependenciesMeta: @@ -1347,6 +1362,577 @@ packages: - encoding dev: true + /@aws-crypto/crc32@5.2.0: + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + dev: false + + /@aws-crypto/crc32c@5.2.0: + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + dev: false + + /@aws-crypto/sha1-browser@5.2.0: + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + dev: false + + /@aws-crypto/sha256-browser@5.2.0: + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + dev: false + + /@aws-crypto/sha256-js@5.2.0: + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + dev: false + + /@aws-crypto/supports-web-crypto@5.2.0: + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-crypto/util@5.2.0: + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/client-s3@3.758.0: + resolution: {integrity: sha512-f8SlhU9/93OC/WEI6xVJf/x/GoQFj9a/xXK6QCtr5fvCjfSLgMVFmKTiIl/tgtDRzxUDc8YS6EGtbHjJ3Y/atg==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-node': 3.758.0 + '@aws-sdk/middleware-bucket-endpoint': 3.734.0 + '@aws-sdk/middleware-expect-continue': 3.734.0 + '@aws-sdk/middleware-flexible-checksums': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-location-constraint': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-sdk-s3': 3.758.0 + '@aws-sdk/middleware-ssec': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/signature-v4-multi-region': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@aws-sdk/xml-builder': 3.734.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/eventstream-serde-browser': 4.0.1 + '@smithy/eventstream-serde-config-resolver': 4.0.1 + '@smithy/eventstream-serde-node': 4.0.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-blob-browser': 4.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/hash-stream-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/md5-js': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + '@smithy/util-waiter': 4.0.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sso@3.758.0: + resolution: {integrity: sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/core@3.758.0: + resolution: {integrity: sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/core': 3.1.5 + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/signature-v4': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + dev: false + + /@aws-sdk/credential-provider-env@3.758.0: + resolution: {integrity: sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/credential-provider-http@3.758.0: + resolution: {integrity: sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.1.2 + tslib: 2.8.1 + dev: false + + /@aws-sdk/credential-provider-ini@3.758.0: + resolution: {integrity: sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/credential-provider-env': 3.758.0 + '@aws-sdk/credential-provider-http': 3.758.0 + '@aws-sdk/credential-provider-process': 3.758.0 + '@aws-sdk/credential-provider-sso': 3.758.0 + '@aws-sdk/credential-provider-web-identity': 3.758.0 + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-node@3.758.0: + resolution: {integrity: sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.758.0 + '@aws-sdk/credential-provider-http': 3.758.0 + '@aws-sdk/credential-provider-ini': 3.758.0 + '@aws-sdk/credential-provider-process': 3.758.0 + '@aws-sdk/credential-provider-sso': 3.758.0 + '@aws-sdk/credential-provider-web-identity': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-process@3.758.0: + resolution: {integrity: sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/credential-provider-sso@3.758.0: + resolution: {integrity: sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.758.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/token-providers': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-web-identity@3.758.0: + resolution: {integrity: sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/middleware-bucket-endpoint@3.734.0: + resolution: {integrity: sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-arn-parser': 3.723.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-expect-continue@3.734.0: + resolution: {integrity: sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-flexible-checksums@3.758.0: + resolution: {integrity: sha512-o8Rk71S08YTKLoSobucjnbj97OCGaXgpEDNKXpXaavUM5xLNoHCLSUPRCiEN86Ivqxg1n17Y2nSRhfbsveOXXA==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/is-array-buffer': 4.0.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-host-header@3.734.0: + resolution: {integrity: sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-location-constraint@3.734.0: + resolution: {integrity: sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-logger@3.734.0: + resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-recursion-detection@3.734.0: + resolution: {integrity: sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-sdk-s3@3.758.0: + resolution: {integrity: sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-arn-parser': 3.723.0 + '@smithy/core': 3.1.5 + '@smithy/node-config-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/signature-v4': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-ssec@3.734.0: + resolution: {integrity: sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/middleware-user-agent@3.758.0: + resolution: {integrity: sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/core': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@smithy/core': 3.1.5 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/nested-clients@3.758.0: + resolution: {integrity: sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.758.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.758.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.5 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-retry': 4.0.7 + '@smithy/middleware-serde': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.7 + '@smithy/util-defaults-mode-node': 4.0.7 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/region-config-resolver@3.734.0: + resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + dev: false + + /@aws-sdk/signature-v4-multi-region@3.758.0: + resolution: {integrity: sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/signature-v4': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/token-providers@3.758.0: + resolution: {integrity: sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/nested-clients': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/types@3.734.0: + resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-arn-parser@3.723.0: + resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-endpoints@3.743.0: + resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + '@smithy/util-endpoints': 3.0.1 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-locate-window@3.723.0: + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-user-agent-browser@3.734.0: + resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + bowser: 2.11.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/util-user-agent-node@3.758.0: + resolution: {integrity: sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/middleware-user-agent': 3.758.0 + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@aws-sdk/xml-builder@3.734.0: + resolution: {integrity: sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + /@babel/code-frame@7.26.2: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -3961,7 +4547,7 @@ packages: '@docusaurus/utils': 3.6.3(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.3) '@docusaurus/utils-validation': 3.6.3(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.3) algoliasearch: 4.24.0 - algoliasearch-helper: 3.24.1(algoliasearch@4.24.0) + algoliasearch-helper: 3.24.2(algoliasearch@4.24.0) clsx: 2.1.1 eta: 2.2.0 fs-extra: 11.3.0 @@ -4146,17 +4732,26 @@ packages: resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} dev: false - /@envelop/core@5.1.1: - resolution: {integrity: sha512-6+OukzuNsm33DtLnOats3e7VnnHndqINJbp/vlIyIlSGBc/wtgQiTAijNWwHhnozHc7WmCKzTsPSrGObvkJazg==} + /@envelop/core@5.2.0: + resolution: {integrity: sha512-JMrISsiZ4XQXMtJhs5K4MtM64zFfPHAmpWrkLt+d7d3UC4W39rQu9+4ba3kTV9MyohNr39+wfjBdTa13rKTbjA==} + engines: {node: '>=18.0.0'} + dependencies: + '@envelop/instruments': 1.0.0 + '@envelop/types': 5.2.0 + '@whatwg-node/promise-helpers': 1.2.2 + tslib: 2.8.1 + dev: true + + /@envelop/instruments@1.0.0: + resolution: {integrity: sha512-f4lHoti7QgUIluIGTM0mG9Wf9/w6zc1mosYmyFkrApeHSP2PIUC6a8fMoqkdk6pgVOps39kLdIhOPF8pIKS8/A==} engines: {node: '>=18.0.0'} dependencies: - '@envelop/types': 5.1.1 '@whatwg-node/promise-helpers': 1.2.2 tslib: 2.8.1 dev: true - /@envelop/types@5.1.1: - resolution: {integrity: sha512-uJyCPQRSqxH/4q8/TTTY2fMYIK/Tgv1IhOm6aFUUxuE/EI7muJM/UI85iv9Qo1OCpaafthwRLWzufRp20FyXaA==} + /@envelop/types@5.2.0: + resolution: {integrity: sha512-vCJY6URc8bK1O6p4zVRFpv/ASdyXvLM+Iqn2HP44UfTgEUQLyN4buwLawlkAv/KtzAL7VOeefpF2eKPWk7rHjg==} engines: {node: '>=18.0.0'} dependencies: '@whatwg-node/promise-helpers': 1.2.2 @@ -4478,7 +5073,7 @@ packages: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 dependencies: - '@0no-co/graphql.web': 1.1.1(graphql@16.10.0) + '@0no-co/graphql.web': 1.1.2(graphql@16.10.0) graphql: 16.10.0 typescript: 5.6.3 dev: true @@ -4510,16 +5105,16 @@ packages: '@graphql-codegen/client-preset': 4.6.4(graphql@16.10.0) '@graphql-codegen/core': 4.0.2(graphql@16.10.0) '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) - '@graphql-tools/apollo-engine-loader': 8.0.17(graphql@16.10.0) - '@graphql-tools/code-file-loader': 8.1.17(graphql@16.10.0) - '@graphql-tools/git-loader': 8.0.21(graphql@16.10.0) - '@graphql-tools/github-loader': 8.0.17(@types/node@22.13.9)(graphql@16.10.0) - '@graphql-tools/graphql-file-loader': 8.0.16(graphql@16.10.0) - '@graphql-tools/json-file-loader': 8.0.15(graphql@16.10.0) - '@graphql-tools/load': 8.0.16(graphql@16.10.0) + '@graphql-tools/apollo-engine-loader': 8.0.18(graphql@16.10.0) + '@graphql-tools/code-file-loader': 8.1.18(graphql@16.10.0) + '@graphql-tools/git-loader': 8.0.22(graphql@16.10.0) + '@graphql-tools/github-loader': 8.0.18(@types/node@22.13.9)(graphql@16.10.0) + '@graphql-tools/graphql-file-loader': 8.0.17(graphql@16.10.0) + '@graphql-tools/json-file-loader': 8.0.16(graphql@16.10.0) + '@graphql-tools/load': 8.0.17(graphql@16.10.0) '@graphql-tools/prisma-loader': 8.0.17(@types/node@22.13.9)(graphql@16.10.0) - '@graphql-tools/url-loader': 8.0.28(@types/node@22.13.9)(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/url-loader': 8.0.29(@types/node@22.13.9)(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@parcel/watcher': 2.5.1 '@whatwg-node/fetch': 0.10.5 chalk: 4.1.2 @@ -4570,7 +5165,7 @@ packages: '@graphql-codegen/typescript-operations': 4.5.1(graphql@16.10.0) '@graphql-codegen/visitor-plugin-common': 5.7.1(graphql@16.10.0) '@graphql-tools/documents': 1.0.1(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 @@ -4584,8 +5179,8 @@ packages: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) - '@graphql-tools/schema': 10.0.20(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/schema': 10.0.21(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 dev: true @@ -4598,7 +5193,7 @@ packages: dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) '@graphql-codegen/visitor-plugin-common': 5.7.1(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) auto-bind: 4.0.0 graphql: 16.10.0 tslib: 2.6.3 @@ -4640,7 +5235,7 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.10.0 @@ -4655,7 +5250,7 @@ packages: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 dev: true @@ -4718,7 +5313,7 @@ packages: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) '@graphql-codegen/typescript': 4.1.5(graphql@16.10.0) '@graphql-codegen/visitor-plugin-common': 5.7.1(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) auto-bind: 4.0.0 graphql: 16.10.0 tslib: 2.6.3 @@ -4771,8 +5366,8 @@ packages: dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) '@graphql-tools/optimize': 2.0.0(graphql@16.10.0) - '@graphql-tools/relay-operation-optimizer': 7.0.16(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/relay-operation-optimizer': 7.0.17(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 @@ -4784,13 +5379,13 @@ packages: - encoding dev: true - /@graphql-tools/apollo-engine-loader@8.0.17(graphql@16.10.0): - resolution: {integrity: sha512-2DwndS4GurK7VB8LD1paWZPdaYIwqMkMg2a3GU5nNpkL401QAAr2Mw3zYZ6XNe+nNHv4EyhywJ/ahuKKBcmJIA==} + /@graphql-tools/apollo-engine-loader@8.0.18(graphql@16.10.0): + resolution: {integrity: sha512-PSN5YEA3AheVkGlD85w/ukFVXN4e0y6gCNj0vwr3sTaL/Z5eTrqZCmalbEDs5PeZRZBo39tYBDKygcVceh3OQQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@whatwg-node/fetch': 0.10.5 graphql: 16.10.0 sync-fetch: 0.6.0-2 @@ -4803,20 +5398,20 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) dataloader: 2.2.3 graphql: 16.10.0 tslib: 2.8.1 dev: true - /@graphql-tools/code-file-loader@8.1.17(graphql@16.10.0): - resolution: {integrity: sha512-KQ+6n0HJQcBZ4b2HVV9rFJezyps6QLxRDPeGah3JX+MOLjjOtkpueE4br4x3+byVIm31fwWTA05wQjUx469DkA==} + /@graphql-tools/code-file-loader@8.1.18(graphql@16.10.0): + resolution: {integrity: sha512-/7oFP5EoMc5KcogOnLIxSeSstkxETry9JUvlV4Dw4e0XQv3n2aT1emqAqGznb8zdPsE5ZLwVQ7dEh0CGuYCCNw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.16(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 8.3.17(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) globby: 11.1.0 graphql: 16.10.0 tslib: 2.8.1 @@ -4832,9 +5427,9 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/batch-execute': 9.0.12(graphql@16.10.0) - '@graphql-tools/executor': 1.4.2(graphql@16.10.0) - '@graphql-tools/schema': 10.0.20(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/executor': 1.4.3(graphql@16.10.0) + '@graphql-tools/schema': 10.0.21(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@repeaterjs/repeater': 3.0.6 dataloader: 2.2.3 dset: 3.1.4 @@ -4859,8 +5454,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@envelop/core': 5.1.1 - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@envelop/core': 5.2.0 + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 dev: true @@ -4871,7 +5466,7 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/executor-common': 0.0.3(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@whatwg-node/disposablestack': 0.0.5 graphql: 16.10.0 graphql-ws: 6.0.4(graphql@16.10.0)(ws@8.18.1) @@ -4892,7 +5487,7 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/executor-common': 0.0.3(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.5 '@whatwg-node/fetch': 0.10.5 @@ -4905,14 +5500,14 @@ packages: - '@types/node' dev: true - /@graphql-tools/executor-legacy-ws@1.1.14(graphql@16.10.0): - resolution: {integrity: sha512-8xyIy0uiT5PkmIcOiNJg+Kg9pLwrs9MblxucKmBez8lUCL+0nKpx8o9ntXzmbLcVBA+4hV3wO3E9Bm7gkxiTUA==} + /@graphql-tools/executor-legacy-ws@1.1.15(graphql@16.10.0): + resolution: {integrity: sha512-5VM5m/WQWoIj2GKXuOUvhtzkm11g/rbKYOiLvur6AxD59FdLwVwDisWvarj8rsZ1NUedK312fD22vpKjc2m+dw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) - '@types/ws': 8.5.14 + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) + '@types/ws': 8.18.0 graphql: 16.10.0 isomorphic-ws: 5.0.0(ws@8.18.1) tslib: 2.8.1 @@ -4922,13 +5517,13 @@ packages: - utf-8-validate dev: true - /@graphql-tools/executor@1.4.2(graphql@16.10.0): - resolution: {integrity: sha512-TzXh4SIfkOp969xeX3Z2dArzLXisAuj+YOnlhqphX+rC/OzZ1m4cZxsxaqosp/hTwlt5xXJFCoOPYjHEAU42Rw==} + /@graphql-tools/executor@1.4.3(graphql@16.10.0): + resolution: {integrity: sha512-QBefKv3h8gxXC/THqFPBF+ZKRVg4PoX/Tpczlv/mOffw6sp0w+pJ1ZeWYIr/Jh+r4kcxgqTd3/1MzYC4cl1EGA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 @@ -4937,14 +5532,14 @@ packages: tslib: 2.8.1 dev: true - /@graphql-tools/git-loader@8.0.21(graphql@16.10.0): - resolution: {integrity: sha512-93c7aG/BBsu44kOh1d50rZtqfa1TRym4su+VLyC8SS7fmzeP9JuysHchsbtEQexJXPNXM9C5BHnVrdzgO9TmZg==} + /@graphql-tools/git-loader@8.0.22(graphql@16.10.0): + resolution: {integrity: sha512-O9TJqhqdouRgIAr2DeqchWq50mUN2OS1dzfrDEJ/k1Rx42gAenOuLft7QO6us90bFdK5BDzgD+5TEhE5a87O0g==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.16(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 8.3.17(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 is-glob: 4.0.3 micromatch: 4.0.8 @@ -4954,15 +5549,15 @@ packages: - supports-color dev: true - /@graphql-tools/github-loader@8.0.17(@types/node@22.13.9)(graphql@16.10.0): - resolution: {integrity: sha512-igUUqGGV8b5dnhNZBSTweYKIhBNby8fvNe0fv2JyQjDBysnFNAAOFAR6Bnr+8K9QbhW6aHkZInOQrOWxMQ77xg==} + /@graphql-tools/github-loader@8.0.18(@types/node@22.13.9)(graphql@16.10.0): + resolution: {integrity: sha512-st/T8W4ADVA71X2FLJLUciHT0LdYOo08DPuPKIGO0x+aRB8uxgDC8raDWWA8D928Y0OECxJi40+SNX/n07ww+g==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/executor-http': 1.2.8(@types/node@22.13.9)(graphql@16.10.0) - '@graphql-tools/graphql-tag-pluck': 8.3.16(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 8.3.17(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@whatwg-node/fetch': 0.10.5 '@whatwg-node/promise-helpers': 1.2.2 graphql: 16.10.0 @@ -4973,22 +5568,22 @@ packages: - supports-color dev: true - /@graphql-tools/graphql-file-loader@8.0.16(graphql@16.10.0): - resolution: {integrity: sha512-/L77iJ0CMbJMm+xgi9m8u3KCcbQ6e//MissdYXOBax2wFH3pkPXJLClSlkoN5GqRd4rGgNrenDhkkqWhVFDQHg==} + /@graphql-tools/graphql-file-loader@8.0.17(graphql@16.10.0): + resolution: {integrity: sha512-N3bjg+XSBUGydWWh7w5FUxgwjXGdXP0OPRDgyPUT1nqKZhfGZmqc0nKJEXMReXsFMwAcFF95mLtkj7gMeKMkpw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/import': 7.0.15(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/import': 7.0.16(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) globby: 11.1.0 graphql: 16.10.0 tslib: 2.8.1 unixify: 1.0.0 dev: true - /@graphql-tools/graphql-tag-pluck@8.3.16(graphql@16.10.0): - resolution: {integrity: sha512-zs9bhnqA+7UzSDCIsZHI5Cz9RsbpyVVVDjAUn1ToEFsrAtxvqqvfXnjFS6nZSBTJ7PQK2Jf6spzB0cBOBAGNRQ==} + /@graphql-tools/graphql-tag-pluck@8.3.17(graphql@16.10.0): + resolution: {integrity: sha512-x1ocLp4CWecQ/pwU4jP9YgcVd1fRu5VgDYiddNY4otAQk3Z44ip5Lep1unimce6xBU9FMSNgh6mKIgwmYGpUpQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4998,46 +5593,46 @@ packages: '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.9) '@babel/traverse': 7.26.9 '@babel/types': 7.26.9 - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color dev: true - /@graphql-tools/import@7.0.15(graphql@16.10.0): - resolution: {integrity: sha512-g8PLNIBdhiVH52PbbpJXuWZqZb9oF2xqQaTYu31ssqlxlqAyBQJb/PNnCl3aL6Rl607Pmvvor0+lBbh26Gvn0Q==} + /@graphql-tools/import@7.0.16(graphql@16.10.0): + resolution: {integrity: sha512-YtE0qQbZEe/GlMfN6UO9DKspOndQzyVxG4kzCq2LoWLRiQsAE1z9maCT+62TDEUTHsljGeUY/ekzvSHkTH2Nqg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 resolve-from: 5.0.0 tslib: 2.8.1 dev: true - /@graphql-tools/json-file-loader@8.0.15(graphql@16.10.0): - resolution: {integrity: sha512-e9ehBKNa6LKKqGYjq23qOIbvaYwKsVMRO8p9q1qzdF1izWVIHN9fE9dRb6y78rCwMu/tq1a0bq1KpAH5W6Sz0w==} + /@graphql-tools/json-file-loader@8.0.16(graphql@16.10.0): + resolution: {integrity: sha512-l7LVJMdsphmRcjEx7SezEXg1E24eyjQwQHn04uk41WbvhNfbB3X2fUdDsHzH8dbRXUp+wWABoAIgVOiE1qXpSw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) globby: 11.1.0 graphql: 16.10.0 tslib: 2.8.1 unixify: 1.0.0 dev: true - /@graphql-tools/load@8.0.16(graphql@16.10.0): - resolution: {integrity: sha512-gD++qJvQYpbRLxBJvWEVKfb8IQZ3YyDkDFyuXVn7A/Fjoi2o6vsij/s6xfimNFyreYZL42MHjC5pWJEGQisDjg==} + /@graphql-tools/load@8.0.17(graphql@16.10.0): + resolution: {integrity: sha512-oFXpXSghoi+qdghBtkJY6VlQqR/BdLG5JVEbSSJcyh1U2cXILTPiO42zWnzjCI+5jxzFDDdBSqTgfGBL33gTLQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 10.0.20(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/schema': 10.0.21(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 p-limit: 3.1.0 tslib: 2.8.1 @@ -5064,13 +5659,13 @@ packages: tslib: 2.8.1 dev: false - /@graphql-tools/merge@9.0.21(graphql@16.10.0): - resolution: {integrity: sha512-5EiVL2InZeBlsZXlXjqyNMD697QP44j/dipXEogHlZcZzWEP/JTDwx9hTfFbmrePVR8+p89gFg1tE25iEgSong==} + /@graphql-tools/merge@9.0.22(graphql@16.10.0): + resolution: {integrity: sha512-bjOs9DlTbo1Yz2UzQcJ78Dn9/pKyY2zNaoqNLfRTTSkO56QFkvqhfjQuqJcqu+V3rtaB2o0VMpWaY6JT8ZTvQA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 dev: true @@ -5100,8 +5695,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/url-loader': 8.0.28(@types/node@22.13.9)(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/url-loader': 8.0.29(@types/node@22.13.9)(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.10.5 chalk: 4.1.2 @@ -5141,14 +5736,14 @@ packages: - supports-color dev: true - /@graphql-tools/relay-operation-optimizer@7.0.16(graphql@16.10.0): - resolution: {integrity: sha512-uE17qf/uhXAFTmDe5ghHC4Y9N51aCNgyPrSwFpgWxfckZvW1idi5MR5cCl8jC1w9129+XDI5WGfFXx1b2GR1Ow==} + /@graphql-tools/relay-operation-optimizer@7.0.17(graphql@16.10.0): + resolution: {integrity: sha512-zEdEIYmDsEtGhP9sl06N8aNFIo3mLrDzSlzIgfc7jKWpOY1H/a8b5MFNQd22kmaiCWlxOjDe3K0cCwWX4ygM+g==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/relay-compiler': 12.0.2(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 transitivePeerDependencies: @@ -5168,14 +5763,14 @@ packages: value-or-promise: 1.0.12 dev: false - /@graphql-tools/schema@10.0.20(graphql@16.10.0): - resolution: {integrity: sha512-BmDqXS9gHJF2Cl1k+IOiPCYWApBU6LhqSEPc8WmAxn08HtmhKoCizwiUuWtt8SOV67yoMzC1zJFkBdm3wZX9Fw==} + /@graphql-tools/schema@10.0.21(graphql@16.10.0): + resolution: {integrity: sha512-AECSlNnD0WNxICwfJs93gYn2oHxPmztn1MYBETIQXrJJcymfD6BoUrDlYPa6F27RzRc+gbPZPHMWL26uujfKBg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 9.0.21(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/merge': 9.0.22(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 dev: true @@ -5192,18 +5787,18 @@ packages: value-or-promise: 1.0.12 dev: false - /@graphql-tools/url-loader@8.0.28(@types/node@22.13.9)(graphql@16.10.0): - resolution: {integrity: sha512-zeshp2c0AFKIatLAhm0BtD0Om4Wr5Cu775rFpk369CA1nA8ZQV25EZ/TIrYwoUkg+b0ERC9H5EZrB2hqTJfaxQ==} + /@graphql-tools/url-loader@8.0.29(@types/node@22.13.9)(graphql@16.10.0): + resolution: {integrity: sha512-xCWmAL20DUzb9inrnrGEAL6PP9Exg8zfM/zkPHtPGNydKGpOXRFXvDoC6DJpwdN3B9HABUjamw38vj1uN5I1Uw==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/executor-graphql-ws': 2.0.3(graphql@16.10.0) '@graphql-tools/executor-http': 1.2.8(@types/node@22.13.9)(graphql@16.10.0) - '@graphql-tools/executor-legacy-ws': 1.1.14(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/executor-legacy-ws': 1.1.15(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) '@graphql-tools/wrap': 10.0.31(graphql@16.10.0) - '@types/ws': 8.5.14 + '@types/ws': 8.18.0 '@whatwg-node/fetch': 0.10.5 '@whatwg-node/promise-helpers': 1.2.2 graphql: 16.10.0 @@ -5232,8 +5827,8 @@ packages: tslib: 2.8.1 dev: false - /@graphql-tools/utils@10.8.3(graphql@16.10.0): - resolution: {integrity: sha512-4QCvx3SWRsbH7wnktl51mBek+zE9hsjsv796XVlJlOUdWpAghJmA3ID2P7/Vwuy7BivVNfuAKe4ucUdE1fG7vA==} + /@graphql-tools/utils@10.8.4(graphql@16.10.0): + resolution: {integrity: sha512-HpHBgcmLIE79jWk1v5Bm0Eb8MaPiwSJT/Iy5xIJ+GMe7yAKpCYrbjf7wb+UMDMkLkfEryvo3syCx8k+TMAZ9bA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -5271,8 +5866,8 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/delegate': 10.2.13(graphql@16.10.0) - '@graphql-tools/schema': 10.0.20(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/schema': 10.0.21(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 dev: true @@ -5832,8 +6427,8 @@ packages: resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} dev: false - /@langchain/community@0.3.33(@browserbasehq/stagehand@1.13.1)(@ibm-cloud/watsonx-ai@1.5.1)(@langchain/core@0.3.42)(axios@1.7.9)(ibm-cloud-sdk-core@5.1.3)(openai@4.86.1)(ws@8.18.1): - resolution: {integrity: sha512-BtgfvyPvb/HYUWLa5YXoDVMY+8pkZvaZzwp5NSebstVKsitsjuG/pwzZ7gDQO1c8LJZlxAeYyAwwQBI87ibRRg==} + /@langchain/community@0.3.34(@browserbasehq/stagehand@1.13.1)(@ibm-cloud/watsonx-ai@1.5.1)(@langchain/core@0.3.42)(axios@1.7.9)(ibm-cloud-sdk-core@5.1.3)(openai@4.86.1)(ws@8.18.1): + resolution: {integrity: sha512-s0KVulgVIPd90s3m6XZtWrCRGQPWsY93uY62seFMmNhzcyF+I65kKnN04Nbiouthrn/YJ9HB4hW8MJAFuX6RRg==} engines: {node: '>=18'} peerDependencies: '@arcjet/redact': ^v1.0.0-alpha.23 @@ -6216,7 +6811,7 @@ packages: ibm-cloud-sdk-core: 5.1.3 js-yaml: 4.1.0 langchain: 0.3.19(@langchain/core@0.3.42)(axios@1.7.9)(openai@4.86.1)(ws@8.18.1) - langsmith: 0.3.11(openai@4.86.1) + langsmith: 0.3.12(openai@4.86.1) openai: 4.86.1(ws@8.18.1)(zod@3.24.2) uuid: 10.0.0 ws: 8.18.1 @@ -6250,7 +6845,7 @@ packages: camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.19 - langsmith: 0.3.11(openai@4.86.1) + langsmith: 0.3.12(openai@4.86.1) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -6402,9 +6997,9 @@ packages: dependencies: '@apollo/server': 4.11.3(graphql@16.10.0) '@apollo/server-plugin-landing-page-graphql-playground': 4.0.0(@apollo/server@4.11.3) - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 10.4.15(@nestjs/common@10.4.15)(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/graphql': 12.2.2(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(class-validator@0.14.1)(graphql@16.10.0)(reflect-metadata@0.2.2) + '@nestjs/graphql': 12.2.2(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.10.0)(reflect-metadata@0.2.2) graphql: 16.10.0 iterall: 1.3.0 lodash.omit: 4.5.0 @@ -6418,7 +7013,7 @@ packages: axios: ^1.3.1 rxjs: ^6.0.0 || ^7.0.0 dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) axios: 1.8.1(debug@4.4.0) rxjs: 7.8.2 dev: false @@ -6461,7 +7056,7 @@ packages: - webpack-cli dev: true - /@nestjs/common@10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2): + /@nestjs/common@10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2): resolution: {integrity: sha512-vaLg1ZgwhG29BuLDxPA9OAcIlgqzp9/N8iG0wGapyUNTf4IY4O6zAHgN6QalwLhFxq7nOI021vdRojR1oF3bqg==} peerDependencies: class-transformer: '*' @@ -6474,6 +7069,7 @@ packages: class-validator: optional: true dependencies: + class-transformer: 0.5.1 class-validator: 0.14.1 iterare: 1.2.1 reflect-metadata: 0.2.2 @@ -6487,7 +7083,7 @@ packages: '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 rxjs: ^7.1.0 dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) dotenv: 16.4.5 dotenv-expand: 10.0.0 lodash: 4.17.21 @@ -6512,7 +7108,7 @@ packages: '@nestjs/websockets': optional: true dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15)(@nestjs/core@10.4.15) '@nuxtjs/opencollective': 0.3.2 fast-safe-stringify: 2.1.1 @@ -6525,7 +7121,7 @@ packages: transitivePeerDependencies: - encoding - /@nestjs/graphql@12.2.2(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(class-validator@0.14.1)(graphql@16.10.0)(reflect-metadata@0.2.2): + /@nestjs/graphql@12.2.2(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(class-transformer@0.5.1)(class-validator@0.14.1)(graphql@16.10.0)(reflect-metadata@0.2.2): resolution: {integrity: sha512-lUDy/1uqbRA1kBKpXcmY0aHhcPbfeG52Wg5+9Jzd1d57dwSjCAmuO+mWy5jz9ugopVCZeK0S/kdAMvA+r9fNdA==} peerDependencies: '@apollo/subgraph': ^2.0.0 @@ -6549,10 +7145,11 @@ packages: '@graphql-tools/merge': 9.0.11(graphql@16.10.0) '@graphql-tools/schema': 10.0.10(graphql@16.10.0) '@graphql-tools/utils': 10.6.1(graphql@16.10.0) - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 10.4.15(@nestjs/common@10.4.15)(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/mapped-types': 2.0.6(@nestjs/common@10.4.15)(class-validator@0.14.1)(reflect-metadata@0.2.2) + '@nestjs/mapped-types': 2.0.6(@nestjs/common@10.4.15)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) chokidar: 4.0.1 + class-transformer: 0.5.1 class-validator: 0.14.1 fast-glob: 3.3.2 graphql: 16.10.0 @@ -6575,12 +7172,12 @@ packages: peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@types/jsonwebtoken': 9.0.5 jsonwebtoken: 9.0.2 dev: false - /@nestjs/mapped-types@2.0.6(@nestjs/common@10.4.15)(class-validator@0.14.1)(reflect-metadata@0.2.2): + /@nestjs/mapped-types@2.0.6(@nestjs/common@10.4.15)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2): resolution: {integrity: sha512-84ze+CPfp1OWdpRi1/lOu59hOhTz38eVzJvRKrg9ykRFwDz+XleKfMsG0gUqNZYFa6v53XYzeD+xItt8uDW7NQ==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 @@ -6593,7 +7190,8 @@ packages: class-validator: optional: true dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + class-transformer: 0.5.1 class-validator: 0.14.1 reflect-metadata: 0.2.2 dev: false @@ -6604,7 +7202,7 @@ packages: '@nestjs/common': ^10.0.0 '@nestjs/core': ^10.0.0 dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 10.4.15(@nestjs/common@10.4.15)(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) body-parser: 1.20.3 cors: 2.8.5 @@ -6657,7 +7255,7 @@ packages: '@nestjs/platform-express': optional: true dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 10.4.15(@nestjs/common@10.4.15)(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15)(@nestjs/core@10.4.15) tslib: 2.8.1 @@ -6672,7 +7270,7 @@ packages: rxjs: ^7.2.0 typeorm: ^0.3.0 dependencies: - '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 10.4.15(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 10.4.15(@nestjs/common@10.4.15)(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.2) reflect-metadata: 0.2.2 rxjs: 7.8.2 @@ -8268,6 +8866,496 @@ packages: micromark-util-symbol: 1.1.0 dev: false + /@smithy/abort-controller@4.0.1: + resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/chunked-blob-reader-native@4.0.0: + resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/chunked-blob-reader@5.0.0: + resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/config-resolver@4.0.1: + resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + dev: false + + /@smithy/core@3.1.5: + resolution: {integrity: sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/middleware-serde': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/credential-provider-imds@4.0.1: + resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + tslib: 2.8.1 + dev: false + + /@smithy/eventstream-codec@4.0.1: + resolution: {integrity: sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==} + engines: {node: '>=18.0.0'} + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.1.0 + '@smithy/util-hex-encoding': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/eventstream-serde-browser@4.0.1: + resolution: {integrity: sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/eventstream-serde-config-resolver@4.0.1: + resolution: {integrity: sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/eventstream-serde-node@4.0.1: + resolution: {integrity: sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/eventstream-serde-universal@4.0.1: + resolution: {integrity: sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/eventstream-codec': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/fetch-http-handler@5.0.1: + resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/hash-blob-browser@4.0.1: + resolution: {integrity: sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/chunked-blob-reader': 5.0.0 + '@smithy/chunked-blob-reader-native': 4.0.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/hash-node@4.0.1: + resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/hash-stream-node@4.0.1: + resolution: {integrity: sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/invalid-dependency@4.0.1: + resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/is-array-buffer@2.2.0: + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/is-array-buffer@4.0.0: + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/md5-js@4.0.1: + resolution: {integrity: sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/middleware-content-length@4.0.1: + resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/middleware-endpoint@4.0.6: + resolution: {integrity: sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/core': 3.1.5 + '@smithy/middleware-serde': 4.0.2 + '@smithy/node-config-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + dev: false + + /@smithy/middleware-retry@4.0.7: + resolution: {integrity: sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/service-error-classification': 4.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + tslib: 2.8.1 + uuid: 9.0.1 + dev: false + + /@smithy/middleware-serde@4.0.2: + resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/middleware-stack@4.0.1: + resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/node-config-provider@4.0.1: + resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/node-http-handler@4.0.3: + resolution: {integrity: sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/abort-controller': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/property-provider@4.0.1: + resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/protocol-http@5.0.1: + resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/querystring-builder@4.0.1: + resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/querystring-parser@4.0.1: + resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/service-error-classification@4.0.1: + resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + dev: false + + /@smithy/shared-ini-file-loader@4.0.1: + resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/signature-v4@5.0.1: + resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/smithy-client@4.1.6: + resolution: {integrity: sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/core': 3.1.5 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-stack': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.1.2 + tslib: 2.8.1 + dev: false + + /@smithy/types@4.1.0: + resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/url-parser@4.0.1: + resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/querystring-parser': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-base64@4.0.0: + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-body-length-browser@4.0.0: + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/util-body-length-node@4.0.0: + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/util-buffer-from@2.2.0: + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-buffer-from@4.0.0: + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-config-provider@4.0.0: + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/util-defaults-mode-browser@4.0.7: + resolution: {integrity: sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/property-provider': 4.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + bowser: 2.11.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-defaults-mode-node@4.0.7: + resolution: {integrity: sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/config-resolver': 4.0.1 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/smithy-client': 4.1.6 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-endpoints@3.0.1: + resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-hex-encoding@4.0.0: + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/util-middleware@4.0.1: + resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-retry@4.0.1: + resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/service-error-classification': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-stream@4.1.2: + resolution: {integrity: sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/types': 4.1.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-uri-escape@4.0.0: + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.8.1 + dev: false + + /@smithy/util-utf8@2.3.0: + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-utf8@4.0.0: + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.8.1 + dev: false + + /@smithy/util-waiter@4.0.2: + resolution: {integrity: sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@smithy/abort-controller': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + dev: false + /@sqltools/formatter@1.2.5: resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} dev: false @@ -8549,6 +9637,20 @@ packages: dependencies: '@types/estree': 1.0.6 + /@types/apollo-upload-client@18.0.0(@types/react@18.3.18)(graphql-ws@5.16.2)(react-dom@18.3.1)(react@18.3.1)(subscriptions-transport-ws@0.11.0): + resolution: {integrity: sha512-cMgITNemktxasqvp6jiPj15dv84n3FTMvMoYBP1+xonDS+0l6JygIJrj2LJh85rShRzTOOkrElrAsCXXARa3KA==} + dependencies: + '@apollo/client': 3.13.1(@types/react@18.3.18)(graphql-ws@5.16.2)(graphql@16.10.0)(react-dom@18.3.1)(react@18.3.1)(subscriptions-transport-ws@0.11.0) + '@types/extract-files': 13.0.1 + graphql: 16.10.0 + transitivePeerDependencies: + - '@types/react' + - graphql-ws + - react + - react-dom + - subscriptions-transport-ws + dev: false + /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} dev: true @@ -8691,6 +9793,10 @@ packages: '@types/serve-static': 1.15.7 dev: true + /@types/extract-files@13.0.1: + resolution: {integrity: sha512-/fRbzc2lAd7jDJSSnxWiUyXWjdUZZ4HbISLJzVgt1AvrdOa7U49YRPcvuCUywkmURZ7uwJOheDjx19itbQ5KvA==} + dev: false + /@types/fs-extra@11.0.4: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: @@ -8988,8 +10094,8 @@ packages: /@types/validator@13.12.2: resolution: {integrity: sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==} - /@types/ws@8.5.14: - resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} + /@types/ws@8.18.0: + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} dependencies: '@types/node': 20.17.23 @@ -9677,8 +10783,8 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - /algoliasearch-helper@3.24.1(algoliasearch@4.24.0): - resolution: {integrity: sha512-knYRACqLH9UpeR+WRUrBzBFR2ulGuOjI2b525k4PNeqZxeFMHJE7YcL7s6Jh12Qza0rtHqZdgHMfeuaaAkf4wA==} + /algoliasearch-helper@3.24.2(algoliasearch@4.24.0): + resolution: {integrity: sha512-vBw/INZDfyh/THbVeDy8On8lZqd2qiUAHde5N4N1ygL4SoeLqLGJ4GHneHrDAYsjikRwTTtodEP0fiXl5MxHFQ==} peerDependencies: algoliasearch: '>= 3.1 < 6' dependencies: @@ -9790,6 +10896,18 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 + /apollo-upload-client@18.0.1(@apollo/client@3.13.1)(graphql@16.10.0): + resolution: {integrity: sha512-OQvZg1rK05VNI79D658FUmMdoI2oB/KJKb6QGMa2Si25QXOaAvLMBFUEwJct7wf+19U8vk9ILhidBOU1ZWv6QA==} + engines: {node: ^18.15.0 || >=20.4.0} + peerDependencies: + '@apollo/client': ^3.8.0 + graphql: 14 - 16 + dependencies: + '@apollo/client': 3.13.1(@types/react@18.3.18)(graphql-ws@5.16.2)(graphql@16.10.0)(react-dom@18.3.1)(react@18.3.1)(subscriptions-transport-ws@0.11.0) + extract-files: 13.0.0 + graphql: 16.10.0 + dev: false + /app-root-path@3.1.0: resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} engines: {node: '>= 6.0.0'} @@ -10009,7 +11127,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001701 + caniuse-lite: 1.0.30001702 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -10324,6 +11442,10 @@ packages: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} dev: false + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + /boxen@6.2.1: resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -10374,8 +11496,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001701 - electron-to-chromium: 1.5.110 + caniuse-lite: 1.0.30001702 + electron-to-chromium: 1.5.112 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) @@ -10532,13 +11654,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.24.4 - caniuse-lite: 1.0.30001701 + caniuse-lite: 1.0.30001702 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: false - /caniuse-lite@1.0.30001701: - resolution: {integrity: sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==} + /caniuse-lite@1.0.30001702: + resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -10729,6 +11851,9 @@ packages: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} dev: true + /class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + /class-validator@0.14.1: resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==} dependencies: @@ -12018,8 +13143,8 @@ packages: jake: 10.9.2 dev: true - /electron-to-chromium@1.5.110: - resolution: {integrity: sha512-/p/OvOm6AfLtQteAHTUWwf+Vhh76PlluagzQlSnxMoOJ4R6SmAScWBrVev6rExJoUhP9zudN9+lBxoYUEmC1HQ==} + /electron-to-chromium@1.5.112: + resolution: {integrity: sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -12862,6 +13987,13 @@ packages: engines: {node: ^12.20 || >= 14.13} dev: true + /extract-files@13.0.0: + resolution: {integrity: sha512-FXD+2Tsr8Iqtm3QZy1Zmwscca7Jx3mMC5Crr+sEP1I303Jy1CYMuYCm7hRTplFNg3XdUavErkxnTzpaqdSoi6g==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + dependencies: + is-plain-obj: 4.1.0 + dev: false + /fast-content-type-parse@2.0.1: resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} dev: false @@ -12906,6 +14038,13 @@ packages: /fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + /fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + dependencies: + strnum: 1.1.2 + dev: false + /fastembed@1.14.1: resolution: {integrity: sha512-Y14v+FWZwjNUpQ7mRGYu4N5yF+hZkF7zqzPWzzLbwdIEtYsHy0DSpiVJ+Fg6Oi1fQjrBKASQt0hdSMSjw1/Wtw==} dependencies: @@ -13295,8 +14434,8 @@ packages: tslib: 2.8.1 dev: false - /framer-motion@12.4.9(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-c+nDhfiNUwi8G4BrhrP2hjPsDHzIKRbUhDlcK7oC5kXY4QK1IrT/kuhY4BgK6h2ujDrZ8ocvFrG2X8+b1m/MkQ==} + /framer-motion@12.4.10(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-3Msuyjcr1Pb5hjkn4EJcRe1HumaveP0Gbv4DBMKTPKcV/1GSMkQXj+Uqgneys+9DPcZM18Hac9qY9iUEF5LZtg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -13309,8 +14448,8 @@ packages: react-dom: optional: true dependencies: - motion-dom: 12.4.5 - motion-utils: 12.0.0 + motion-dom: 12.4.10 + motion-utils: 12.4.10 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -13667,12 +14806,12 @@ packages: cosmiconfig-toml-loader: optional: true dependencies: - '@graphql-tools/graphql-file-loader': 8.0.16(graphql@16.10.0) - '@graphql-tools/json-file-loader': 8.0.15(graphql@16.10.0) - '@graphql-tools/load': 8.0.16(graphql@16.10.0) - '@graphql-tools/merge': 9.0.21(graphql@16.10.0) - '@graphql-tools/url-loader': 8.0.28(@types/node@22.13.9)(graphql@16.10.0) - '@graphql-tools/utils': 10.8.3(graphql@16.10.0) + '@graphql-tools/graphql-file-loader': 8.0.17(graphql@16.10.0) + '@graphql-tools/json-file-loader': 8.0.16(graphql@16.10.0) + '@graphql-tools/load': 8.0.17(graphql@16.10.0) + '@graphql-tools/merge': 9.0.22(graphql@16.10.0) + '@graphql-tools/url-loader': 8.0.29(@types/node@22.13.9)(graphql@16.10.0) + '@graphql-tools/utils': 10.8.4(graphql@16.10.0) cosmiconfig: 8.3.6(typescript@5.6.3) graphql: 16.10.0 jiti: 2.4.2 @@ -13718,6 +14857,16 @@ packages: graphql: 16.10.0 tslib: 2.8.1 + /graphql-upload-minimal@1.6.1(graphql@16.10.0): + resolution: {integrity: sha512-wNUf/KqA0B/OguL1k6qWa4AmAduLUAhXzovh9i14SKbpBa8HX2vc7f+fR67S0rG7fSpGdM/aivxzC329/+9xXw==} + engines: {node: '>=12'} + peerDependencies: + graphql: 0.13.1 - 16 + dependencies: + busboy: 1.6.0 + graphql: 16.10.0 + dev: false + /graphql-ws@5.16.0(graphql@16.10.0): resolution: {integrity: sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==} engines: {node: '>=10'} @@ -15992,7 +17141,7 @@ packages: js-tiktoken: 1.0.19 js-yaml: 4.1.0 jsonpointer: 5.0.1 - langsmith: 0.3.11(openai@4.86.1) + langsmith: 0.3.12(openai@4.86.1) openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 @@ -16005,8 +17154,8 @@ packages: - ws dev: false - /langsmith@0.3.11(openai@4.86.1): - resolution: {integrity: sha512-pzA7wemfMjqCiaNY3AtUkQJ7jubIBmKRTl0dMNEUz8A4ewIqCEpB2caiTeeAwVkugEylny80cDk3u16WqL25Sw==} + /langsmith@0.3.12(openai@4.86.1): + resolution: {integrity: sha512-e4qWM27hxEr8GfO6dgXrc3W8La+wxkX1zEtMhxhqS/Th2ujTt5OH7x0uXfXFDqCv9WaC3nquo1Y2s4vpYmLLtg==} peerDependencies: openai: '*' peerDependenciesMeta: @@ -17257,22 +18406,22 @@ packages: motion-utils: 11.18.1 dev: false - /motion-dom@12.4.5: - resolution: {integrity: sha512-Q2xmhuyYug1CGTo0jdsL05EQ4RhIYXlggFS/yPhQQRNzbrhjKQ1tbjThx5Plv68aX31LsUQRq4uIkuDxdO5vRQ==} + /motion-dom@12.4.10: + resolution: {integrity: sha512-ISP5u6FTceoD6qKdLupIPU/LyXBrxGox+P2e3mBbm1+pLdlBbwv01YENJr7+1WZnW5ucVKzFScYsV1eXTCG4Xg==} dependencies: - motion-utils: 12.0.0 + motion-utils: 12.4.10 dev: false /motion-utils@11.18.1: resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} dev: false - /motion-utils@12.0.0: - resolution: {integrity: sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA==} + /motion-utils@12.4.10: + resolution: {integrity: sha512-NPwZd94V013SwRf++jMrk2+HEBgPkeIE2RiOzhAuuQlqxMJPkKt/LXVh6Upl+iN8oarSGD2dlY5/bqgsYXDABA==} dev: false - /motion@12.4.9(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lOT2+X9b3yvDEC+pAClTzLSW/D5T/zZweO+UN1lMe86WtGFQIbHU/VjEhwGREW0QryG9KECB1uK3QJo8G3NGag==} + /motion@12.4.10(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-AM21Lyfn7ZHO+nBuHJEA2REFgS3kUM83CLZnzM0ZY1/sVeKGkCtV4LF4O/YsQXyZ9mrUrrnTaUkKquS4eaIYjg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -17285,7 +18434,7 @@ packages: react-dom: optional: true dependencies: - framer-motion: 12.4.9(react-dom@18.3.1)(react@18.3.1) + framer-motion: 12.4.10(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -17405,7 +18554,7 @@ packages: '@playwright/test': 1.50.1 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001701 + caniuse-lite: 1.0.30001702 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -19454,8 +20603,8 @@ packages: strip-json-comments: 2.0.1 dev: false - /react-activity-calendar@2.7.8(react@18.3.1): - resolution: {integrity: sha512-lj9IIMrRAoMsXSf6wWo7AcMNXie61Y5EuNApm6rVdJswngyw8LS2Ja50yHrGBFu9GaL1HMutGIoSbr5ifEi9xw==} + /react-activity-calendar@2.7.9(react@18.3.1): + resolution: {integrity: sha512-35B65SiJ18aTEHzK6MQcvPVLFSBr95L/QATM9WaPGSli6hHPV2LlGuoOflYG/TuMlmmcUaBCHMjG6cHwuRzwXQ==} peerDependencies: react: ^18.0.0 || ^19.0.0 dependencies: @@ -21184,6 +22333,10 @@ packages: engines: {node: '>=14.16'} dev: false + /strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + dev: false + /strtok3@6.3.0: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} @@ -22711,7 +23864,7 @@ packages: '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 - '@types/ws': 8.5.14 + '@types/ws': 8.18.0 ansi-html-community: 0.0.8 bonjour-service: 1.3.0 chokidar: 3.6.0