diff --git a/README.md b/README.md index c808514cb1..45abcb2c09 100644 --- a/README.md +++ b/README.md @@ -117,12 +117,18 @@ We are very happy if you are interested in contributing to Formbricks 🤗 Here are a few options: -- Star this repo -- Create issues every time you feel something is missing or goes wrong -- Upvote issues with 👍 reaction so we know what's the demand for particular issue to prioritize it within roadmap +- Star this repo. +- Create issues every time you feel something is missing or goes wrong. +- Upvote issues with 👍 reaction so we know what's the demand for a particular issue to prioritize it within the roadmap. Please check out [our contribution guide](https://formbricks.com/docs/contributing/introduction) and our [list of open issues](https://github.com/formbricks/formbricks/issues) for more information. +## All Thanks To Our Contributors + + + + + ## 📆 Contact us Let's have a chat about your survey needs and get you started. diff --git a/apps/web/.gitignore b/apps/web/.gitignore index 994a16b76e..08e5e4f92d 100644 --- a/apps/web/.gitignore +++ b/apps/web/.gitignore @@ -40,3 +40,6 @@ next-env.d.ts # Google Sheets Token File token.json + +# Local Uploads +uploads/ \ No newline at end of file diff --git a/apps/web/app/(app)/environments/[environmentId]/people/[personId]/(responseSection)/ResponsesFeed.tsx b/apps/web/app/(app)/environments/[environmentId]/people/[personId]/(responseSection)/ResponsesFeed.tsx index 2e73a97846..b6d82d226a 100644 --- a/apps/web/app/(app)/environments/[environmentId]/people/[personId]/(responseSection)/ResponsesFeed.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/people/[personId]/(responseSection)/ResponsesFeed.tsx @@ -61,6 +61,7 @@ export default function ResponseFeed({ diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx index 14a0efb90b..b3ffd27db7 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/SurveyList.tsx @@ -81,7 +81,12 @@ export default async function SurveysList({ environmentId }: { environmentId: st
{survey.status !== "draft" && ( <> - + )} {survey.status === "draft" && ( diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx index 3038c16e84..d16797ba38 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/SummaryHeader.tsx @@ -105,7 +105,11 @@ const SummaryHeader = ({ disabled={isStatusChangeDisabled} style={isStatusChangeDisabled ? { pointerEvents: "none", opacity: 0.5 } : {}}>
- + {survey.status === "inProgress" && "In-progress"} {survey.status === "paused" && "Paused"} diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx index 7b2b177bf1..5a389b2eaa 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx @@ -244,24 +244,9 @@ export default function QuestionCard({ { - const trimmedValue = e.target.value.trim(); // Remove spaces from the start and end - const hasInternalSpaces = /\S\s\S/.test(trimmedValue); // Test if there are spaces between words - - if ( - !trimmedValue.includes(" ") && - (trimmedValue === "" || hasInternalSpaces || !/\s/.test(trimmedValue)) - ) { - updateQuestion(questionIdx, { backButtonLabel: trimmedValue }); - } - }} + onChange={(e) => updateQuestion(questionIdx, { buttonLabel: e.target.value })} />
@@ -269,11 +254,6 @@ export default function QuestionCard({ updateQuestion(questionIdx, { backButtonLabel: e.target.value })} - className={cn( - isInValid && - question.backButtonLabel?.trim() === "" && - "border border-red-600 focus:border-red-600" - )} /> )} @@ -284,11 +264,6 @@ export default function QuestionCard({ updateQuestion(questionIdx, { backButtonLabel: e.target.value })} - className={cn( - isInValid && - question.backButtonLabel?.trim() === "" && - "border border-red-600 focus:border-red-600" - )} /> )} diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts index ea9fb1c2af..125098f640 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts @@ -18,11 +18,7 @@ const validationRules = { return question.label.trim() !== ""; }, defaultValidation: (question: TSurveyQuestion) => { - return ( - question.headline.trim() !== "" && - question.buttonLabel?.trim() !== "" && - question.backButtonLabel?.trim() !== "" - ); + return question.headline.trim() !== ""; }, }; diff --git a/apps/web/app/api/v1/client/storage/route.ts b/apps/web/app/api/v1/client/storage/route.ts new file mode 100644 index 0000000000..e99b9dea71 --- /dev/null +++ b/apps/web/app/api/v1/client/storage/route.ts @@ -0,0 +1,95 @@ +import { env } from "@/env.mjs"; +import { responses } from "@/lib/api/response"; +import { UPLOADS_DIR, WEBAPP_URL } from "@formbricks/lib/constants"; +import { putFileToLocalStorage, putFileToS3 } from "@formbricks/lib/storage/service"; +import { getSurvey } from "@formbricks/lib/survey/service"; +import { getTeamByEnvironmentId } from "@formbricks/lib/team/service"; +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest): Promise { + const accessType = "private"; // private files are only accessible by the user who has access to the environment + const { fileName, contentType, fileBuffer, surveyId } = await req.json(); + + if (!surveyId) { + return responses.badRequestResponse("surveyId ID is required"); + } + + if (!fileName) { + return responses.badRequestResponse("fileName is required"); + } + + if (!contentType) { + return responses.badRequestResponse("contentType is required"); + } + + if (!fileBuffer) { + return responses.badRequestResponse("no file provided, fileBuffer is required"); + } + + const survey = await getSurvey(surveyId); + + if (!survey) { + return responses.notFoundResponse("Survey", surveyId); + } + + const { environmentId } = survey; + + const team = await getTeamByEnvironmentId(environmentId); + + if (!team) { + return responses.notFoundResponse("TeamByEnvironmentId", environmentId); + } + + const { plan } = team; + + const buffer = Buffer.from(fileBuffer); + + const bufferBytes = buffer.byteLength; + const bufferKB = bufferBytes / 1024; + + if (plan === "free" && bufferKB > 10240) { + return responses.badRequestResponse("Maximum file size for free plan is 10MB, please upgrade your plan"); + } + + if (plan === "pro" && bufferKB > 1024 * 1024) { + return responses.badRequestResponse("Maximum file size for pro plan is 1GB"); + } + + const uploadPrivateFile = async () => { + // if s3 is not configured, we'll upload to a local folder named uploads + + if (!env.AWS_ACCESS_KEY || !env.AWS_SECRET_KEY || !env.S3_REGION || !env.S3_BUCKET_NAME) { + try { + await putFileToLocalStorage(fileName, fileBuffer, accessType, environmentId, UPLOADS_DIR); + + return responses.successResponse({ + uploaded: true, + url: `${WEBAPP_URL}/storage/${environmentId}/${accessType}/${fileName}`, + }); + } catch (err) { + if (err.name === "FileTooLargeError") { + return responses.badRequestResponse(err.message); + } + + return responses.internalServerErrorResponse(err.message); + } + } + + try { + await putFileToS3(fileName, contentType, fileBuffer, accessType, environmentId); + + return responses.successResponse({ + uploaded: true, + url: `${WEBAPP_URL}/storage/${environmentId}/${accessType}/${fileName}`, + }); + } catch (err) { + if (err.name === "FileTooLargeError") { + return responses.badRequestResponse(err.message); + } + + return responses.internalServerErrorResponse(err.message); + } + }; + + return await uploadPrivateFile(); +} diff --git a/apps/web/app/api/v1/management/storage/route.ts b/apps/web/app/api/v1/management/storage/route.ts new file mode 100644 index 0000000000..0ab2f59233 --- /dev/null +++ b/apps/web/app/api/v1/management/storage/route.ts @@ -0,0 +1,104 @@ +import { responses } from "@/lib/api/response"; +import { NextRequest, NextResponse } from "next/server"; +import { env } from "@/env.mjs"; +import { putFileToLocalStorage, putFileToS3 } from "@formbricks/lib/storage/service"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; +import { UPLOADS_DIR, WEBAPP_URL } from "@formbricks/lib/constants"; +import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; + +// api endpoint for uploading public files +// uploaded files will be public, anyone can access the file +// uploading public files requires authentication +// use this to upload files for a specific resource, e.g. a user profile picture or a survey + +export async function POST(req: NextRequest): Promise { + const accessType = "public"; // public files are accessible by anyone + const { fileName, contentType, environmentId, fileBuffer, allowedFileExtensions } = await req.json(); + + if (!fileName) { + return responses.badRequestResponse("fileName is required"); + } + + if (!contentType) { + return responses.badRequestResponse("contentType is required"); + } + + if (!fileBuffer) { + return responses.badRequestResponse("no file provided, fileBuffer is required"); + } + + if (!environmentId) { + return responses.badRequestResponse("environmentId is required"); + } + + if (allowedFileExtensions?.length) { + const fileExtension = fileName.split(".").pop(); + if (!fileExtension || !allowedFileExtensions.includes(fileExtension)) { + return responses.badRequestResponse( + `File extension is not allowed, allowed extensions are: ${allowedFileExtensions.join(", ")}` + ); + } + } + + // auth and upload private file + const session = await getServerSession(authOptions); + + if (!session || !session.user) { + return responses.notAuthenticatedResponse(); + } + + const isUserAuthorized = await hasUserEnvironmentAccess(session.user.id, environmentId); + + if (!isUserAuthorized) { + return responses.unauthorizedResponse(); + } + + return await uploadPublicFile(fileName, fileBuffer, accessType, environmentId, contentType); +} + +const uploadPublicFile = async ( + fileName: string, + fileBuffer: Buffer, + accessType: "public" | "private", + environmentId, + contentType?: string +) => { + // if s3 is not configured, we'll upload to a local folder named uploads + + if (!env.AWS_ACCESS_KEY || !env.AWS_SECRET_KEY || !env.S3_REGION || !env.S3_BUCKET_NAME) { + try { + await putFileToLocalStorage(fileName, fileBuffer, accessType, environmentId, UPLOADS_DIR, true); + + return responses.successResponse({ + uploaded: true, + url: `${WEBAPP_URL}/storage/${environmentId}/${accessType}/${fileName}`, + }); + } catch (err) { + if (err.name === "FileTooLargeError") { + return responses.badRequestResponse(err.message); + } + + return responses.internalServerErrorResponse("Internal server error"); + } + } + + try { + if (!contentType) { + return responses.badRequestResponse("contentType is required"); + } + + await putFileToS3(fileName, contentType, fileBuffer, accessType, environmentId, true); + + return responses.successResponse({ + uploaded: true, + url: `${WEBAPP_URL}/storage/${environmentId}/${accessType}/${fileName}`, + }); + } catch (err) { + if (err.name === "FileTooLargeError") { + return responses.badRequestResponse(err.message); + } + + return responses.internalServerErrorResponse("Internal server error"); + } +}; diff --git a/apps/web/app/storage/[environmentId]/[accessType]/[fileName]/route.ts b/apps/web/app/storage/[environmentId]/[accessType]/[fileName]/route.ts new file mode 100644 index 0000000000..ce3508afbc --- /dev/null +++ b/apps/web/app/storage/[environmentId]/[accessType]/[fileName]/route.ts @@ -0,0 +1,85 @@ +import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; +import { env } from "@/env.mjs"; +import { responses } from "@/lib/api/response"; +import { transformErrorToDetails } from "@/lib/api/validator"; +import { UPLOADS_DIR } from "@formbricks/lib/constants"; +import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; +import { getFileFromLocalStorage, getFileFromS3 } from "@formbricks/lib/storage/service"; +import { ZStorageRetrievalParams } from "@formbricks/types/v1/storage"; +import { getServerSession } from "next-auth"; +import { notFound } from "next/navigation"; +import { NextRequest } from "next/server"; +import path from "path"; + +export async function GET( + _: NextRequest, + { params }: { params: { environmentId: string; accessType: string; fileName: string } } +) { + const paramValidation = ZStorageRetrievalParams.safeParse(params); + + if (!paramValidation.success) { + return responses.badRequestResponse( + "Fields are missing or incorrectly formatted", + transformErrorToDetails(paramValidation.error), + true + ); + } + + const { environmentId, accessType, fileName } = params; + + const getFile = async () => { + if (!env.AWS_ACCESS_KEY || !env.AWS_SECRET_KEY || !env.S3_REGION || !env.S3_BUCKET_NAME) { + try { + const { fileBuffer, metaData } = await getFileFromLocalStorage( + path.join(UPLOADS_DIR, environmentId, accessType, fileName) + ); + + return new Response(fileBuffer, { + headers: { + "Content-Type": metaData.contentType, + "Content-Disposition": "inline", + }, + }); + } catch (err) { + notFound(); + } + } + + try { + const { fileBuffer, metaData } = await getFileFromS3(fileName); + + return new Response(fileBuffer, { + headers: { + "Content-Type": metaData.contentType, + "Content-Disposition": "inline", + }, + }); + } catch (err) { + if (err.name === "NoSuchKey") { + return responses.notFoundResponse("File not found", fileName); + } else { + return responses.internalServerErrorResponse("Internal server error"); + } + } + }; + + if (accessType === "public") { + return await getFile(); + } + + // auth and download private file + + const session = await getServerSession(authOptions); + + if (!session || !session.user) { + return responses.notAuthenticatedResponse(); + } + + const isUserAuthorized = await hasUserEnvironmentAccess(session.user.id, environmentId); + + if (!isUserAuthorized) { + return responses.unauthorizedResponse(); + } + + return await getFile(); +} diff --git a/apps/web/components/shared/SurveyStatusDropdown.tsx b/apps/web/components/shared/SurveyStatusDropdown.tsx index 74941fa02a..d639df310d 100644 --- a/apps/web/components/shared/SurveyStatusDropdown.tsx +++ b/apps/web/components/shared/SurveyStatusDropdown.tsx @@ -35,7 +35,7 @@ export default function SurveyStatusDropdown({ <> {survey.status === "draft" ? (
- + {survey.status === "draft" &&

Draft

}
) : ( @@ -69,7 +69,11 @@ export default function SurveyStatusDropdown({
- + {survey.status === "inProgress" && "In-progress"} {survey.status === "paused" && "Paused"} diff --git a/apps/web/components/shared/SurveyStatusIndicator.tsx b/apps/web/components/shared/SurveyStatusIndicator.tsx index c9a6011b52..e1053ad55b 100644 --- a/apps/web/components/shared/SurveyStatusIndicator.tsx +++ b/apps/web/components/shared/SurveyStatusIndicator.tsx @@ -2,16 +2,32 @@ import { TEnvironment } from "@formbricks/types/v1/environment"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui"; -import { ArchiveBoxIcon, CheckIcon, PauseIcon } from "@heroicons/react/24/solid"; +import { ArchiveBoxIcon, CheckIcon, PauseIcon, ExclamationTriangleIcon } from "@heroicons/react/24/solid"; interface SurveyStatusIndicatorProps { status: string; tooltip?: boolean; environment: TEnvironment; + type: string; } -export default function SurveyStatusIndicator({ status, tooltip, environment }: SurveyStatusIndicatorProps) { - if (!environment.widgetSetupCompleted) return null; +export default function SurveyStatusIndicator({ + status, + tooltip, + environment, + type, +}: SurveyStatusIndicatorProps) { + if (!environment.widgetSetupCompleted) { + if (type === "web") { + return ( +
+ +
+ ); + } else { + return null; + } + } if (tooltip) { return ( diff --git a/apps/web/env.mjs b/apps/web/env.mjs index bed57c7429..5d5083285f 100644 --- a/apps/web/env.mjs +++ b/apps/web/env.mjs @@ -52,6 +52,10 @@ export const env = createEnv({ GOOGLE_SHEETS_CLIENT_ID: z.string().optional(), GOOGLE_SHEETS_CLIENT_SECRET: z.string().optional(), GOOGLE_SHEETS_REDIRECT_URL: z.string().optional(), + AWS_ACCESS_KEY: z.string().optional(), + AWS_SECRET_KEY: z.string().optional(), + S3_REGION: z.string().optional(), + S3_BUCKET_NAME: z.string().optional(), }, /* @@ -108,6 +112,10 @@ export const env = createEnv({ GOOGLE_SHEETS_CLIENT_ID: process.env.GOOGLE_SHEETS_CLIENT_ID, GOOGLE_SHEETS_CLIENT_SECRET: process.env.GOOGLE_SHEETS_CLIENT_SECRET, GOOGLE_SHEETS_REDIRECT_URL: process.env.GOOGLE_SHEETS_REDIRECT_URL, + AWS_ACCESS_KEY: process.env.AWS_ACCESS_KEY, + AWS_SECRET_KEY: process.env.AWS_SECRET_KEY, + S3_REGION: process.env.S3_REGION, + S3_BUCKET_NAME: process.env.S3_BUCKET_NAME, NEXT_PUBLIC_FORMBRICKS_API_HOST: process.env.NEXT_PUBLIC_FORMBRICKS_API_HOST, NEXT_PUBLIC_FORMBRICKS_ENVIRONMENT_ID: process.env.NEXT_PUBLIC_FORMBRICKS_ENVIRONMENT_ID, NEXT_PUBLIC_FORMBRICKS_ONBOARDING_SURVEY_ID: process.env.NEXT_PUBLIC_FORMBRICKS_ONBOARDING_SURVEY_ID, diff --git a/apps/web/package.json b/apps/web/package.json index ed461ca138..0bbbd7166e 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -11,6 +11,8 @@ "lint": "next lint" }, "dependencies": { + "@aws-sdk/client-s3": "^3.418.0", + "@aws-sdk/s3-request-presigner": "^3.418.0", "@formbricks/api": "workspace:*", "@formbricks/database": "workspace:*", "@formbricks/ee": "workspace:*", @@ -34,6 +36,7 @@ "googleapis": "^126.0.1", "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", + "mime": "^3.0.0", "lucide-react": "^0.284.0", "next": "13.5.4", "next-auth": "^4.23.2", diff --git a/apps/web/uploads/cln2o8ist000g19nh5zqpze7e/public/WallPaper 19.png b/apps/web/uploads/cln2o8ist000g19nh5zqpze7e/public/WallPaper 19.png deleted file mode 100644 index 4265c54486..0000000000 Binary files a/apps/web/uploads/cln2o8ist000g19nh5zqpze7e/public/WallPaper 19.png and /dev/null differ diff --git a/apps/web/uploads/cln2o8ist000g19nh5zqpze7e/public/cpTree.png b/apps/web/uploads/cln2o8ist000g19nh5zqpze7e/public/cpTree.png deleted file mode 100644 index 44471ed920..0000000000 Binary files a/apps/web/uploads/cln2o8ist000g19nh5zqpze7e/public/cpTree.png and /dev/null differ diff --git a/packages/lib/constants.ts b/packages/lib/constants.ts index dda34a8948..785b9cf37a 100644 --- a/packages/lib/constants.ts +++ b/packages/lib/constants.ts @@ -1,4 +1,5 @@ import "server-only"; +import path from "path"; import { env } from "@/env.mjs"; export const RESPONSES_LIMIT_FREE = 100; @@ -54,3 +55,6 @@ export const MAIL_FROM = env.MAIL_FROM; export const NEXTAUTH_SECRET = env.NEXTAUTH_SECRET; export const NEXTAUTH_URL = env.NEXTAUTH_URL; export const PEOPLE_PER_PAGE = 50; + +// Storage constants +export const UPLOADS_DIR = path.resolve("./uploads"); diff --git a/packages/lib/response/service.ts b/packages/lib/response/service.ts index 852fa06a3e..bfb071b4bc 100644 --- a/packages/lib/response/service.ts +++ b/packages/lib/response/service.ts @@ -11,7 +11,6 @@ import { import { DatabaseError, ResourceNotFoundError } from "@formbricks/types/v1/errors"; import { TPerson } from "@formbricks/types/v1/people"; import { TTag } from "@formbricks/types/v1/tags"; -import { Prisma } from "@prisma/client"; import { z } from "zod"; import { cache } from "react"; import { getPerson, transformPrismaPerson } from "../person/service"; @@ -19,6 +18,7 @@ import { captureTelemetry } from "../telemetry"; import { validateInputs } from "../utils/validate"; import { ZId } from "@formbricks/types/v1/environment"; import { revalidateTag } from "next/cache"; +import { Prisma } from "@prisma/client"; const responseSelection = { id: true, diff --git a/packages/lib/storage/service.ts b/packages/lib/storage/service.ts new file mode 100644 index 0000000000..5e58b954cb --- /dev/null +++ b/packages/lib/storage/service.ts @@ -0,0 +1,157 @@ +import { PutObjectCommand, S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; +import { access, mkdir, writeFile, readFile } from "fs/promises"; +import mime from "mime"; +import { env } from "@/env.mjs"; + +// global variables + +const AWS_BUCKET_NAME = env.S3_BUCKET_NAME!; +const AWS_REGION = env.S3_REGION!; +const AWS_ACCESS_KEY = env.AWS_ACCESS_KEY!; +const AWS_SECRET_KEY = env.AWS_SECRET_KEY!; + +// S3Client Singleton + +const s3Client = new S3Client({ + credentials: { + accessKeyId: AWS_ACCESS_KEY, + secretAccessKey: AWS_SECRET_KEY!, + }, + region: AWS_REGION!, +}); + +const ensureDirectoryExists = async (dirPath: string) => { + try { + await access(dirPath); + } catch (error: any) { + if (error.code === "ENOENT") { + await mkdir(dirPath, { recursive: true }); + } else { + throw error; + } + } +}; + +type TGetFileResponse = { + fileBuffer: Buffer; + metaData: { + contentType: string; + }; +}; + +export const getFileFromS3 = async (fileKey: string): Promise => { + const getObjectCommand = new GetObjectCommand({ + Bucket: AWS_BUCKET_NAME, + Key: fileKey, + }); + + try { + const data = await s3Client.send(getObjectCommand); + const byteArray = await data.Body?.transformToByteArray(); + const buffer = Buffer.from(byteArray as Uint8Array); + + return { + fileBuffer: buffer, + metaData: { + contentType: data.ContentType ?? "", + }, + }; + } catch (err) { + throw err; + } +}; + +export const getFileFromLocalStorage = async (filePath: string): Promise => { + try { + const file = await readFile(filePath); + let contentType = ""; + + try { + contentType = mime.getType(filePath) ?? ""; + } catch (err) { + throw err; + } + + return { + fileBuffer: file, + metaData: { + contentType: contentType ?? "", + }, + }; + } catch (err) { + throw err; + } +}; + +export const putFileToS3 = async ( + fileName: string, + contentType: string, + fileBuffer: Buffer, + accessType: string, + environmentId: string, + isPublic: boolean = false +) => { + try { + const buffer = Buffer.from(fileBuffer); + + if (isPublic) { + //check the size of buffer and if it is greater than 10MB, return error + + const bufferBytes = buffer.byteLength; + const bufferKB = bufferBytes / 1024; + + if (bufferKB > 10240) { + const err = new Error("File size is greater than 10MB"); + err.name = "FileTooLargeError"; + + throw err; + } + } + + const putObjectCommand = new PutObjectCommand({ + Bucket: AWS_BUCKET_NAME, + Key: `${environmentId}/${accessType}/${fileName}`, + Body: buffer, + ContentType: contentType, + }); + + await s3Client.send(putObjectCommand); + } catch (err) { + throw err; + } +}; + +export const putFileToLocalStorage = async ( + fileName: string, + fileBuffer: Buffer, + accessType: string, + environmentId: string, + rootDir: string, + isPublic: boolean = false +) => { + try { + await ensureDirectoryExists(`${rootDir}/${environmentId}/${accessType}`); + + const uploadPath = `${rootDir}/${environmentId}/${accessType}/${fileName}`; + + const buffer = Buffer.from(fileBuffer); + + if (isPublic) { + //check the size of buffer and if it is greater than 10MB, return error + + const bufferBytes = buffer.byteLength; + const bufferKB = bufferBytes / 1024; + + if (bufferKB > 10240) { + const err = new Error("File size is greater than 10MB"); + err.name = "FileTooLargeError"; + + throw err; + } + } + + await writeFile(uploadPath, buffer); + } catch (err) { + throw err; + } +}; diff --git a/packages/types/v1/storage.ts b/packages/types/v1/storage.ts new file mode 100644 index 0000000000..b3a7acbc86 --- /dev/null +++ b/packages/types/v1/storage.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const ZAccessType = z.enum(["public", "private"]); + +export const ZStorageRetrievalParams = z.object({ + fileName: z.string(), + environmentId: z.string().cuid(), + accessType: ZAccessType, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d730a53372..d0a7334d5d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,7 +28,7 @@ importers: version: 3.12.7 turbo: specifier: latest - version: 1.10.13 + version: 1.10.15 apps/demo: dependencies: @@ -223,6 +223,12 @@ importers: apps/web: dependencies: + '@aws-sdk/client-s3': + specifier: ^3.418.0 + version: 3.418.0 + '@aws-sdk/s3-request-presigner': + specifier: ^3.418.0 + version: 3.418.0 '@formbricks/api': specifier: workspace:* version: link:../../packages/api @@ -295,6 +301,9 @@ importers: lucide-react: specifier: ^0.284.0 version: 0.284.0(react@18.2.0) + mime: + specifier: ^3.0.0 + version: 3.0.0 next: specifier: 13.5.4 version: 13.5.4(react-dom@18.2.0)(react@18.2.0) @@ -306,7 +315,7 @@ importers: version: 6.9.5 posthog-js: specifier: ^1.82.1 - version: 1.82.1 + version: 1.82.2 prismjs: specifier: ^1.29.0 version: 1.29.0 @@ -422,7 +431,7 @@ importers: version: link:../database stripe: specifier: ^13.8.0 - version: 13.8.0 + version: 13.9.0 devDependencies: '@formbricks/tsconfig': specifier: '*' @@ -447,7 +456,7 @@ importers: version: 9.0.0(eslint@8.50.0) eslint-config-turbo: specifier: latest - version: 1.8.8(eslint@8.50.0) + version: 1.10.15(eslint@8.50.0) eslint-plugin-react: specifier: 7.33.2 version: 7.33.2(eslint@8.50.0) @@ -592,7 +601,7 @@ importers: version: 1.0.19 '@typescript-eslint/parser': specifier: ~6.7 - version: 6.7.0(eslint@8.50.0)(typescript@5.2.2) + version: 6.7.3(eslint@8.50.0)(typescript@5.2.2) eslint-plugin-n8n-nodes-base: specifier: ^1.16.0 version: 1.16.0(eslint@8.50.0)(typescript@5.2.2) @@ -1000,6 +1009,595 @@ packages: leven: 3.1.0 dev: true + /@aws-crypto/crc32@3.0.0: + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.418.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/crc32c@3.0.0: + resolution: {integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==} + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.418.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/ie11-detection@3.0.0: + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha1-browser@3.0.0: + resolution: {integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==} + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-browser@3.0.0: + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/sha256-js@3.0.0: + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.418.0 + tslib: 1.14.1 + dev: false + + /@aws-crypto/supports-web-crypto@3.0.0: + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + dependencies: + tslib: 1.14.1 + dev: false + + /@aws-crypto/util@3.0.0: + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + dependencies: + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + + /@aws-sdk/client-s3@3.418.0: + resolution: {integrity: sha512-VdDM9xS84t8W1B2/QJTK6mYVCnf7Hovg8Aum9NHm+bD7F0Ni2NTLVjm8+qq9STi4YSeXAy3Pe+FBUP9Wthw7Iw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha1-browser': 3.0.0 + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.418.0 + '@aws-sdk/credential-provider-node': 3.418.0 + '@aws-sdk/middleware-bucket-endpoint': 3.418.0 + '@aws-sdk/middleware-expect-continue': 3.418.0 + '@aws-sdk/middleware-flexible-checksums': 3.418.0 + '@aws-sdk/middleware-host-header': 3.418.0 + '@aws-sdk/middleware-location-constraint': 3.418.0 + '@aws-sdk/middleware-logger': 3.418.0 + '@aws-sdk/middleware-recursion-detection': 3.418.0 + '@aws-sdk/middleware-sdk-s3': 3.418.0 + '@aws-sdk/middleware-signing': 3.418.0 + '@aws-sdk/middleware-ssec': 3.418.0 + '@aws-sdk/middleware-user-agent': 3.418.0 + '@aws-sdk/region-config-resolver': 3.418.0 + '@aws-sdk/signature-v4-multi-region': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-endpoints': 3.418.0 + '@aws-sdk/util-user-agent-browser': 3.418.0 + '@aws-sdk/util-user-agent-node': 3.418.0 + '@aws-sdk/xml-builder': 3.310.0 + '@smithy/config-resolver': 2.0.10 + '@smithy/eventstream-serde-browser': 2.0.9 + '@smithy/eventstream-serde-config-resolver': 2.0.9 + '@smithy/eventstream-serde-node': 2.0.9 + '@smithy/fetch-http-handler': 2.1.5 + '@smithy/hash-blob-browser': 2.0.9 + '@smithy/hash-node': 2.0.9 + '@smithy/hash-stream-node': 2.0.9 + '@smithy/invalid-dependency': 2.0.9 + '@smithy/md5-js': 2.0.9 + '@smithy/middleware-content-length': 2.0.11 + '@smithy/middleware-endpoint': 2.0.9 + '@smithy/middleware-retry': 2.0.12 + '@smithy/middleware-serde': 2.0.9 + '@smithy/middleware-stack': 2.0.3 + '@smithy/node-config-provider': 2.0.12 + '@smithy/node-http-handler': 2.1.5 + '@smithy/protocol-http': 3.0.5 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + '@smithy/url-parser': 2.0.9 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.11 + '@smithy/util-defaults-mode-node': 2.0.13 + '@smithy/util-retry': 2.0.2 + '@smithy/util-stream': 2.0.12 + '@smithy/util-utf8': 2.0.0 + '@smithy/util-waiter': 2.0.9 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sso@3.418.0: + resolution: {integrity: sha512-fakz3YeSW/kCAOJ5w4ObrrQBxsYO8sU8i6WHLv6iWAsYZKAws2Mqa8g89P61+GitSH4z9waksdLouS6ep78/5A==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/middleware-host-header': 3.418.0 + '@aws-sdk/middleware-logger': 3.418.0 + '@aws-sdk/middleware-recursion-detection': 3.418.0 + '@aws-sdk/middleware-user-agent': 3.418.0 + '@aws-sdk/region-config-resolver': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-endpoints': 3.418.0 + '@aws-sdk/util-user-agent-browser': 3.418.0 + '@aws-sdk/util-user-agent-node': 3.418.0 + '@smithy/config-resolver': 2.0.10 + '@smithy/fetch-http-handler': 2.1.5 + '@smithy/hash-node': 2.0.9 + '@smithy/invalid-dependency': 2.0.9 + '@smithy/middleware-content-length': 2.0.11 + '@smithy/middleware-endpoint': 2.0.9 + '@smithy/middleware-retry': 2.0.12 + '@smithy/middleware-serde': 2.0.9 + '@smithy/middleware-stack': 2.0.3 + '@smithy/node-config-provider': 2.0.12 + '@smithy/node-http-handler': 2.1.5 + '@smithy/protocol-http': 3.0.5 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + '@smithy/url-parser': 2.0.9 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.11 + '@smithy/util-defaults-mode-node': 2.0.13 + '@smithy/util-retry': 2.0.2 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/client-sts@3.418.0: + resolution: {integrity: sha512-L0n0Hw+Pm+BhXTN1bYZ0y4JAMArYgazdHf1nUSlEHndgZicCCuQtlMLxfo3i/IbtWi0dzfZcZ9d/MdAM8p4Jyw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/credential-provider-node': 3.418.0 + '@aws-sdk/middleware-host-header': 3.418.0 + '@aws-sdk/middleware-logger': 3.418.0 + '@aws-sdk/middleware-recursion-detection': 3.418.0 + '@aws-sdk/middleware-sdk-sts': 3.418.0 + '@aws-sdk/middleware-signing': 3.418.0 + '@aws-sdk/middleware-user-agent': 3.418.0 + '@aws-sdk/region-config-resolver': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-endpoints': 3.418.0 + '@aws-sdk/util-user-agent-browser': 3.418.0 + '@aws-sdk/util-user-agent-node': 3.418.0 + '@smithy/config-resolver': 2.0.10 + '@smithy/fetch-http-handler': 2.1.5 + '@smithy/hash-node': 2.0.9 + '@smithy/invalid-dependency': 2.0.9 + '@smithy/middleware-content-length': 2.0.11 + '@smithy/middleware-endpoint': 2.0.9 + '@smithy/middleware-retry': 2.0.12 + '@smithy/middleware-serde': 2.0.9 + '@smithy/middleware-stack': 2.0.3 + '@smithy/node-config-provider': 2.0.12 + '@smithy/node-http-handler': 2.1.5 + '@smithy/protocol-http': 3.0.5 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + '@smithy/url-parser': 2.0.9 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.11 + '@smithy/util-defaults-mode-node': 2.0.13 + '@smithy/util-retry': 2.0.2 + '@smithy/util-utf8': 2.0.0 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-env@3.418.0: + resolution: {integrity: sha512-e74sS+x63EZUBO+HaI8zor886YdtmULzwKdctsZp5/37Xho1CVUNtEC+fYa69nigBD9afoiH33I4JggaHgrekQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/property-provider': 2.0.10 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/credential-provider-ini@3.418.0: + resolution: {integrity: sha512-LTAeKKV85unlSqGNIeqEZ4N9gufaSoH+670n5YTUEk564zHCkUQW0PJomzLF5jKBco6Yfzv6rPBTukd+x9XWqw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.418.0 + '@aws-sdk/credential-provider-process': 3.418.0 + '@aws-sdk/credential-provider-sso': 3.418.0 + '@aws-sdk/credential-provider-web-identity': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@smithy/credential-provider-imds': 2.0.12 + '@smithy/property-provider': 2.0.10 + '@smithy/shared-ini-file-loader': 2.0.11 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-node@3.418.0: + resolution: {integrity: sha512-VveTjtSC6m8YXj3fQDkMKEZuHv+CR2Z4u/NAN51Fi4xOtIWUtOBj5rfZ8HmBYoBjRF0DtRlPXuMiNnXAzTctfQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.418.0 + '@aws-sdk/credential-provider-ini': 3.418.0 + '@aws-sdk/credential-provider-process': 3.418.0 + '@aws-sdk/credential-provider-sso': 3.418.0 + '@aws-sdk/credential-provider-web-identity': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@smithy/credential-provider-imds': 2.0.12 + '@smithy/property-provider': 2.0.10 + '@smithy/shared-ini-file-loader': 2.0.11 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-process@3.418.0: + resolution: {integrity: sha512-xPbdm2WKz1oH6pTkrJoUmr3OLuqvvcPYTQX0IIlc31tmDwDWPQjXGGFD/vwZGIZIkKaFpFxVMgAzfFScxox7dw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/property-provider': 2.0.10 + '@smithy/shared-ini-file-loader': 2.0.11 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/credential-provider-sso@3.418.0: + resolution: {integrity: sha512-tUF5Hg/HfaU5t+E7IuvohYlodSIlBXa28xAJPPFxhKrUnvP6AIoW6JLazOtCIQjQgJYEUILV29XX+ojUuITcaw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.418.0 + '@aws-sdk/token-providers': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@smithy/property-provider': 2.0.10 + '@smithy/shared-ini-file-loader': 2.0.11 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/credential-provider-web-identity@3.418.0: + resolution: {integrity: sha512-do7ang565n9p3dS1JdsQY01rUfRx8vkxQqz5M8OlcEHBNiCdi2PvSjNwcBdrv/FKkyIxZb0TImOfBSt40hVdxQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/property-provider': 2.0.10 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-bucket-endpoint@3.418.0: + resolution: {integrity: sha512-gj/mj1UfbKkGbQ1N4YUvjTTp8BVs5fO1QAL2AjFJ+jfJOToLReX72aNEkm7sPGbHML0TqOY4cQbJuWYy+zdD5g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-arn-parser': 3.310.0 + '@smithy/node-config-provider': 2.0.12 + '@smithy/protocol-http': 3.0.5 + '@smithy/types': 2.3.3 + '@smithy/util-config-provider': 2.0.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-expect-continue@3.418.0: + resolution: {integrity: sha512-6x4rcIj685EmqDLQkbWoCur3Dg5DRClHMen6nHXmD3CR5Xyt3z1Gk/+jmZICxyJo9c6M4AeZht8o95BopkmYAQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/protocol-http': 3.0.5 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-flexible-checksums@3.418.0: + resolution: {integrity: sha512-3O203dqS2JU5P1TAAbo7p1qplXQh59pevw9nqzPVb3EG8B+mSucVf2kKmF7kGHqKSk+nK/mB/4XGSsZBzGt6Wg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@aws-crypto/crc32c': 3.0.0 + '@aws-sdk/types': 3.418.0 + '@smithy/is-array-buffer': 2.0.0 + '@smithy/protocol-http': 3.0.5 + '@smithy/types': 2.3.3 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-host-header@3.418.0: + resolution: {integrity: sha512-LrMTdzalkPw/1ujLCKPLwCGvPMCmT4P+vOZQRbSEVZPnlZk+Aj++aL/RaHou0jL4kJH3zl8iQepriBt4a7UvXQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/protocol-http': 3.0.5 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-location-constraint@3.418.0: + resolution: {integrity: sha512-cc8M3VEaESHJhDsDV8tTpt2QYUprDWhvAVVSlcL43cTdZ54Quc0W+toDiaVOUlwrAZz2Y7g5NDj22ibJGFbOvw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-logger@3.418.0: + resolution: {integrity: sha512-StKGmyPVfoO/wdNTtKemYwoJsqIl4l7oqarQY7VSf2Mp3mqaa+njLViHsQbirYpyqpgUEusOnuTlH5utxJ1NsQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-recursion-detection@3.418.0: + resolution: {integrity: sha512-kKFrIQglBLUFPbHSDy1+bbe3Na2Kd70JSUC3QLMbUHmqipXN8KeXRfAj7vTv97zXl0WzG0buV++WcNwOm1rFjg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/protocol-http': 3.0.5 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-sdk-s3@3.418.0: + resolution: {integrity: sha512-rei32LF45SyqL3NlWDjEOfMwAca9A5F4QgUyXJqvASc43oWC1tJnLIhiCxNh8qkWAiRyRzFpcanTeqyaRSsZpA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-arn-parser': 3.310.0 + '@smithy/protocol-http': 3.0.5 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-sdk-sts@3.418.0: + resolution: {integrity: sha512-cW8ijrCTP+mgihvcq4+TbhAcE/we5lFl4ydRqvTdtcSnYQAVQADg47rnTScQiFsPFEB3NKq7BGeyTJF9MKolPA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-signing@3.418.0: + resolution: {integrity: sha512-onvs5KoYQE8OlOE740RxWBGtsUyVIgAo0CzRKOQO63ZEYqpL1Os+MS1CGzdNhvQnJgJruE1WW+Ix8fjN30zKPA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/property-provider': 2.0.10 + '@smithy/protocol-http': 3.0.5 + '@smithy/signature-v4': 2.0.9 + '@smithy/types': 2.3.3 + '@smithy/util-middleware': 2.0.2 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-ssec@3.418.0: + resolution: {integrity: sha512-J7K+5h6aP7IYMlu/NwHEIjb0+WDu1eFvO8TCPo6j1H9xYRi8B/6h+6pa9Rk9IgRUzFnrdlDu9FazG8Tp0KKLyg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-user-agent@3.418.0: + resolution: {integrity: sha512-Jdcztg9Tal9SEAL0dKRrnpKrm6LFlWmAhvuwv0dQ7bNTJxIxyEFbpqdgy7mpQHsLVZgq1Aad/7gT/72c9igyZw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-endpoints': 3.418.0 + '@smithy/protocol-http': 3.0.5 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/region-config-resolver@3.418.0: + resolution: {integrity: sha512-lJRZ/9TjZU6yLz+mAwxJkcJZ6BmyYoIJVo1p5+BN//EFdEmC8/c0c9gXMRzfISV/mqWSttdtccpAyN4/goHTYA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.0.12 + '@smithy/types': 2.3.3 + '@smithy/util-config-provider': 2.0.0 + '@smithy/util-middleware': 2.0.2 + tslib: 2.6.2 + dev: false + + /@aws-sdk/s3-request-presigner@3.418.0: + resolution: {integrity: sha512-fR/46jnNW2tpebUH5dSv0teZ1dXXgf/QjSxqnhmWFSs3CAxMNd6W54QqgbOMPdRBGFsVJH/OBu7bl7EhEBbY4w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/signature-v4-multi-region': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-format-url': 3.418.0 + '@smithy/middleware-endpoint': 2.0.9 + '@smithy/protocol-http': 3.0.5 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/signature-v4-multi-region@3.418.0: + resolution: {integrity: sha512-LeVYMZeUQUURFqDf4yZxTEv016g64hi0LqYBjU0mjwd8aPc0k6hckwvshezc80jCNbuLyjNfQclvlg3iFliItQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/protocol-http': 3.0.5 + '@smithy/signature-v4': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/token-providers@3.418.0: + resolution: {integrity: sha512-9P7Q0VN0hEzTngy3Sz5eya2qEOEf0Q8qf1vB3um0gE6ID6EVAdz/nc/DztfN32MFxk8FeVBrCP5vWdoOzmd72g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/middleware-host-header': 3.418.0 + '@aws-sdk/middleware-logger': 3.418.0 + '@aws-sdk/middleware-recursion-detection': 3.418.0 + '@aws-sdk/middleware-user-agent': 3.418.0 + '@aws-sdk/types': 3.418.0 + '@aws-sdk/util-endpoints': 3.418.0 + '@aws-sdk/util-user-agent-browser': 3.418.0 + '@aws-sdk/util-user-agent-node': 3.418.0 + '@smithy/config-resolver': 2.0.10 + '@smithy/fetch-http-handler': 2.1.5 + '@smithy/hash-node': 2.0.9 + '@smithy/invalid-dependency': 2.0.9 + '@smithy/middleware-content-length': 2.0.11 + '@smithy/middleware-endpoint': 2.0.9 + '@smithy/middleware-retry': 2.0.12 + '@smithy/middleware-serde': 2.0.9 + '@smithy/middleware-stack': 2.0.3 + '@smithy/node-config-provider': 2.0.12 + '@smithy/node-http-handler': 2.1.5 + '@smithy/property-provider': 2.0.10 + '@smithy/protocol-http': 3.0.5 + '@smithy/shared-ini-file-loader': 2.0.11 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + '@smithy/url-parser': 2.0.9 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.11 + '@smithy/util-defaults-mode-node': 2.0.13 + '@smithy/util-retry': 2.0.2 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@aws-sdk/types@3.418.0: + resolution: {integrity: sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-arn-parser@3.310.0: + resolution: {integrity: sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-endpoints@3.418.0: + resolution: {integrity: sha512-sYSDwRTl7yE7LhHkPzemGzmIXFVHSsi3AQ1KeNEk84eBqxMHHcCc2kqklaBk2roXWe50QDgRMy1ikZUxvtzNHQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-format-url@3.418.0: + resolution: {integrity: sha512-7/Xy+8J1txuOYOKsez6vpKTIkHYIIX4c7anjp/aQgUQL23FDwkPisj56cIlevJ7useGugnYw1rUR6fMULGzQ/g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/querystring-builder': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-locate-window@3.310.0: + resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-browser@3.418.0: + resolution: {integrity: sha512-c4p4mc0VV/jIeNH0lsXzhJ1MpWRLuboGtNEpqE4s1Vl9ck2amv9VdUUZUmHbg+bVxlMgRQ4nmiovA4qIrqGuyg==} + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/types': 2.3.3 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-node@3.418.0: + resolution: {integrity: sha512-BXMskXFtg+dmzSCgmnWOffokxIbPr1lFqa1D9kvM3l3IFRiFGx2IyDg+8MAhq11aPDLvoa/BDuQ0Yqma5izOhg==} + engines: {node: '>=14.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/types': 3.418.0 + '@smithy/node-config-provider': 2.0.12 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-utf8-browser@3.259.0: + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@aws-sdk/xml-builder@3.310.0: + resolution: {integrity: sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + /@babel/code-frame@7.22.13: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} @@ -1070,7 +1668,7 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.23.0 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: @@ -1229,7 +1827,7 @@ packages: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.23.0 dev: true /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): @@ -1322,14 +1920,9 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.22.15: - resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} - engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.22.15: resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} @@ -1360,7 +1953,7 @@ packages: resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.15 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 @@ -2510,15 +3103,6 @@ packages: - supports-color dev: true - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.15 - to-fast-properties: 2.0.0 - dev: true - /@babel/types@7.23.0: resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} @@ -4272,8 +4856,8 @@ packages: - encoding dev: false - /@octokit/openapi-types@18.0.0: - resolution: {integrity: sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==} + /@octokit/openapi-types@18.1.1: + resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} dev: false /@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4): @@ -4347,13 +4931,13 @@ packages: /@octokit/types@10.0.0: resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} dependencies: - '@octokit/openapi-types': 18.0.0 + '@octokit/openapi-types': 18.1.1 dev: false /@octokit/types@9.3.2: resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} dependencies: - '@octokit/openapi-types': 18.0.0 + '@octokit/openapi-types': 18.1.1 dev: false /@one-ini/wasm@0.1.1: @@ -6223,6 +6807,433 @@ packages: '@sinonjs/commons': 2.0.0 dev: true + /@smithy/abort-controller@2.0.9: + resolution: {integrity: sha512-8liHOEbx99xcy4VndeQNQhyA0LS+e7UqsuRnDTSIA26IKBv/7vA9w09KOd4fgNULrvX0r3WpA6cwsQTRJpSWkg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/chunked-blob-reader-native@2.0.0: + resolution: {integrity: sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==} + dependencies: + '@smithy/util-base64': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/chunked-blob-reader@2.0.0: + resolution: {integrity: sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/config-resolver@2.0.10: + resolution: {integrity: sha512-MwToDsCltHjumkCuRn883qoNeJUawc2b8sX9caSn5vLz6J5crU1IklklNxWCaMO2z2nDL91Po4b/aI1eHv5PfA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.0.12 + '@smithy/types': 2.3.3 + '@smithy/util-config-provider': 2.0.0 + '@smithy/util-middleware': 2.0.2 + tslib: 2.6.2 + dev: false + + /@smithy/credential-provider-imds@2.0.12: + resolution: {integrity: sha512-S3lUNe+2fEFwKcmiQniXGPXt69vaHvQCw8kYQOBL4OvJsgwfpkIYDZdroHbTshYi0M6WaKL26Mw+hvgma6dZqA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.0.12 + '@smithy/property-provider': 2.0.10 + '@smithy/types': 2.3.3 + '@smithy/url-parser': 2.0.9 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-codec@2.0.9: + resolution: {integrity: sha512-sy0pcbKnawt1iu+qCoSFbs/h9PAaUgvlJEO3lqkE1HFFj4p5RgL98vH+9CyDoj6YY82cG5XsorFmcLqQJHTOYw==} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 2.3.3 + '@smithy/util-hex-encoding': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-browser@2.0.9: + resolution: {integrity: sha512-g70enHZau2hGj1Uxedrn8AAjH9E7RnpHdwkuPKapagah53ztbwI7xaNeA5SLD4MjSjdrjathyQBCQKIzwXrR1g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-config-resolver@2.0.9: + resolution: {integrity: sha512-+15GzIMtdSuRPyuCeGZ7gzgD94Ejv6eM1vKcqvipdzS+i36KTZ2A9aZsJk+gDw//OCD1EMx9SqpV6bUvMS4PWg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-node@2.0.9: + resolution: {integrity: sha512-UEJcvN2WXXEjkewtFkj1S2HSZLbyCgzUnfoFPrTuKy4+xRfakO5dNx6ws2h1pvb8Vc7mTuBL+Webl1R5mnVsXA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-serde-universal': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-universal@2.0.9: + resolution: {integrity: sha512-dAHQEYlK/1tjjieBE7jjXwpLQFgKdkvC4HSQf+/Jj4t34XbUmXWHbw92/EuLp9+vjNB/JQPvkwpMtN31jxIDeg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-codec': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/fetch-http-handler@2.1.5: + resolution: {integrity: sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==} + dependencies: + '@smithy/protocol-http': 3.0.5 + '@smithy/querystring-builder': 2.0.9 + '@smithy/types': 2.3.3 + '@smithy/util-base64': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/hash-blob-browser@2.0.9: + resolution: {integrity: sha512-JNWOV1ci9vIg4U82klNr07bZXsA6OCumqHugpvZdvvn6cNGwTa4rvpS5FpPcqKeh3Rdg1rr4h8g+X6zyOamnZw==} + dependencies: + '@smithy/chunked-blob-reader': 2.0.0 + '@smithy/chunked-blob-reader-native': 2.0.0 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/hash-node@2.0.9: + resolution: {integrity: sha512-XP3yWd5wyCtiVmsY5Nuq/FUwyCEQ6YG7DsvRh7ThldNukGpCzyFdP8eivZJVjn4Fx7oYrrOnVoYZ0WEgpW1AvQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + '@smithy/util-buffer-from': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/hash-stream-node@2.0.9: + resolution: {integrity: sha512-3nrkMpiOrhsJvJS6K4OkP0qvA3U5r8PpseXULeGd1ZD1EbfcZ30Lvl72FGaaHskwWZyTPR4czr1d/RwLRCVHNA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/invalid-dependency@2.0.9: + resolution: {integrity: sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/is-array-buffer@2.0.0: + resolution: {integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/md5-js@2.0.9: + resolution: {integrity: sha512-ALHGoTZDgBXBbjCpQzVy6hpa6Rdr6e2jyEw51d6CQOUpHkUnFH7G96UWhVwUnkP0xozPCvmWy+3+j2QUX+oK9w==} + dependencies: + '@smithy/types': 2.3.3 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-content-length@2.0.11: + resolution: {integrity: sha512-Malj4voNTL4+a5ZL3a6+Ij7JTUMTa2R7c3ZIBzMxN5OUUgAspU7uFi1Q97f4B0afVh2joQBAWH5IQJUG25nl8g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/protocol-http': 3.0.5 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-endpoint@2.0.9: + resolution: {integrity: sha512-72/o8R6AAO4+nyTI6h4z6PYGTSA4dr1M7tZz29U8DEUHuh1YkhC77js0P6RyF9G0wDLuYqxb+Yh0crI5WG2pJg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/middleware-serde': 2.0.9 + '@smithy/types': 2.3.3 + '@smithy/url-parser': 2.0.9 + '@smithy/util-middleware': 2.0.2 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-retry@2.0.12: + resolution: {integrity: sha512-YQ/ufXX4/d9/+Jf1QQ4J+CVeupC7BW52qldBTvRV33PDX9vxndlAwkFwzBcmnUFC3Hjf1//HW6I77EItcjNSCA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.0.12 + '@smithy/protocol-http': 3.0.5 + '@smithy/service-error-classification': 2.0.2 + '@smithy/types': 2.3.3 + '@smithy/util-middleware': 2.0.2 + '@smithy/util-retry': 2.0.2 + tslib: 2.6.2 + uuid: 8.3.2 + dev: false + + /@smithy/middleware-serde@2.0.9: + resolution: {integrity: sha512-GVbauxrr6WmtCaesakktg3t5LR/yDbajpC7KkWc8rtCpddMI4ShAVO5Q6DqwX8MDFi4CLaY8H7eTGcxhl3jbLg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-stack@2.0.3: + resolution: {integrity: sha512-AlhPmbwpkC4lQBVaVHXczmjFvsAhDHhrakqLt038qFLotnJcvDLhmMzAtu23alBeOSkKxkTQq0LsAt2N0WpAbw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/node-config-provider@2.0.12: + resolution: {integrity: sha512-df9y9ywv+JmS40Y60ZqJ4jfZiTCmyHQffwzIqjBjLJLJl0imf9F6DWBd+jiEWHvlohR+sFhyY+KL/qzKgnAq1A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/property-provider': 2.0.10 + '@smithy/shared-ini-file-loader': 2.0.11 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/node-http-handler@2.1.5: + resolution: {integrity: sha512-52uF+BrZaFiBh+NT/bADiVDCQO91T+OwDRsuaAeWZC1mlCXFjAPPQdxeQohtuYOe9m7mPP/xIMNiqbe8jvndHA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/abort-controller': 2.0.9 + '@smithy/protocol-http': 3.0.5 + '@smithy/querystring-builder': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/property-provider@2.0.10: + resolution: {integrity: sha512-YMBVfh0ZMmJtbsUn+WfSwR32iRljZPdRN0Tn2GAcdJ+ejX8WrBXD7Z0jIkQDrQZr8fEuuv5x8WxMIj+qVbsPQw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/protocol-http@3.0.5: + resolution: {integrity: sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/querystring-builder@2.0.9: + resolution: {integrity: sha512-Yt6CPF4j3j1cuwod/DRflbuXxBFjJm7gAjy6W1RE21Rz5/kfGFqiZBXWmmXwGtnnhiLThYwoHK4S6/TQtnx0Fg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + '@smithy/util-uri-escape': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/querystring-parser@2.0.9: + resolution: {integrity: sha512-U6z4N743s4vrcxPW8p8+reLV0PjMCYEyb1/wtMVvv3VnbJ74gshdI8SR1sBnEh95cF8TxonmX5IxY25tS9qGfg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/service-error-classification@2.0.2: + resolution: {integrity: sha512-GTUd2j63gKy7A+ggvSdn2hc4sejG7LWfE+ZMF17vzWoNyqERWbRP7HTPS0d0Lwg1p6OQCAzvNigSrEIWVFt6iA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + dev: false + + /@smithy/shared-ini-file-loader@2.0.11: + resolution: {integrity: sha512-Sf0u5C5px6eykXi6jImDTp+edvG3REtPjXnFWU/J+b7S2wkXwUqFXqBL5DdM4zC1F+M8u57ZT7NRqDwMOw7/Tw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/signature-v4@2.0.9: + resolution: {integrity: sha512-RkHP0joSI1j2EI+mU55sOi33/aMMkKdL9ZY+SWrPxsiCe1oyzzuy79Tpn8X7uT+t0ilNmQlwPpkP/jUy940pEA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-codec': 2.0.9 + '@smithy/is-array-buffer': 2.0.0 + '@smithy/types': 2.3.3 + '@smithy/util-hex-encoding': 2.0.0 + '@smithy/util-middleware': 2.0.2 + '@smithy/util-uri-escape': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/smithy-client@2.1.7: + resolution: {integrity: sha512-r6T/oiBQ8vCbGqObH4/h0YqD0jFB1hAS9KFRmuTfaNJueu/L2hjmjqFjv3PV5lkbNHTgUYraSv4cFQ1naxiELQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/middleware-stack': 2.0.3 + '@smithy/types': 2.3.3 + '@smithy/util-stream': 2.0.12 + tslib: 2.6.2 + dev: false + + /@smithy/types@2.3.3: + resolution: {integrity: sha512-zTdIPR9PvFVNRdIKMQu4M5oyTaycIbUqLheQqaOi9rTWPkgjGO2wDBxMA1rBHQB81aqAEv+DbSS4jfKyQMnXRA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/url-parser@2.0.9: + resolution: {integrity: sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==} + dependencies: + '@smithy/querystring-parser': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/util-base64@2.0.0: + resolution: {integrity: sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-body-length-browser@2.0.0: + resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-body-length-node@2.1.0: + resolution: {integrity: sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-buffer-from@2.0.0: + resolution: {integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/is-array-buffer': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-config-provider@2.0.0: + resolution: {integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-defaults-mode-browser@2.0.11: + resolution: {integrity: sha512-0syV1Mz/mCQ7CG/MHKQfH+w86xq59jpD0EOXv5oe0WBXLmq2lWPpVHl2Y6+jQ+/9fYzyZ5NF+NC/WEIuiv690A==} + engines: {node: '>= 10.0.0'} + dependencies: + '@smithy/property-provider': 2.0.10 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-defaults-mode-node@2.0.13: + resolution: {integrity: sha512-6BtCHYdw5Z8r6KpW8tRCc3yURgvcQwfIEeHhR70BeSOfx8T/TXPPjb8A+K45+KASspa3fzrsSxeIwB0sAeMoHA==} + engines: {node: '>= 10.0.0'} + dependencies: + '@smithy/config-resolver': 2.0.10 + '@smithy/credential-provider-imds': 2.0.12 + '@smithy/node-config-provider': 2.0.12 + '@smithy/property-provider': 2.0.10 + '@smithy/smithy-client': 2.1.7 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/util-hex-encoding@2.0.0: + resolution: {integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-middleware@2.0.2: + resolution: {integrity: sha512-UGPZM+Ja/vke5pc/S8G0LNiHpVirtjppsXO+GK9m9wbzRGzPJTfnZA/gERUUN/AfxEy/8SL7U1kd7u4t2X8K1w==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/util-retry@2.0.2: + resolution: {integrity: sha512-ovWiayUB38moZcLhSFFfUgB2IMb7R1JfojU20qSahjxAgfOZvDWme3eOYUMtAVnouZ9kYJiFgHLy27qRH4NeeA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/service-error-classification': 2.0.2 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + + /@smithy/util-stream@2.0.12: + resolution: {integrity: sha512-FOCpRLaj6gvSyUC5mJAACT+sPMPmp9sD1o+hVbUH/QxwZfulypA3ZIFdAg/59/IY0d/1Q4CTztsiHEB5LgjN4g==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/fetch-http-handler': 2.1.5 + '@smithy/node-http-handler': 2.1.5 + '@smithy/types': 2.3.3 + '@smithy/util-base64': 2.0.0 + '@smithy/util-buffer-from': 2.0.0 + '@smithy/util-hex-encoding': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-uri-escape@2.0.0: + resolution: {integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/util-utf8@2.0.0: + resolution: {integrity: sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/util-waiter@2.0.9: + resolution: {integrity: sha512-Hy9Cs0FtIacC1aVFk98bm/7CYqim9fnHAPRnV/SB2mj02ExYs/9Dn5SrNQmtTBTLCn65KqYnNVBNS8GuGpZOOw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/abort-controller': 2.0.9 + '@smithy/types': 2.3.3 + tslib: 2.6.2 + dev: false + /@streamparser/json@0.0.17: resolution: {integrity: sha512-mW54K6CTVJVLwXRB6kSS1xGWPmtTuXAStWnlvtesmcySgtop+eFPWOywBFPpJO4UD173epYsPSP6HSW8kuqN8w==} dev: false @@ -6559,7 +7570,7 @@ packages: /@types/mdast@3.0.10: resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 3.0.0 dev: false /@types/mdast@4.0.0: @@ -6831,8 +7842,8 @@ packages: - typescript dev: true - /@typescript-eslint/parser@6.7.0(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==} + /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -6841,10 +7852,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.7.0 - '@typescript-eslint/types': 6.7.0 - '@typescript-eslint/typescript-estree': 6.7.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.0 + '@typescript-eslint/scope-manager': 6.7.3 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4 eslint: 8.50.0 typescript: 5.2.2 @@ -6880,20 +7891,20 @@ packages: '@typescript-eslint/visitor-keys': 5.54.0 dev: true - /@typescript-eslint/scope-manager@6.6.0: - resolution: {integrity: sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==} + /@typescript-eslint/scope-manager@6.2.1: + resolution: {integrity: sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 dev: true - /@typescript-eslint/scope-manager@6.7.0: - resolution: {integrity: sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==} + /@typescript-eslint/scope-manager@6.7.3: + resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.0 - '@typescript-eslint/visitor-keys': 6.7.0 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/visitor-keys': 6.7.3 dev: true /@typescript-eslint/scope-manager@6.7.4: @@ -6928,13 +7939,13 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.6.0: - resolution: {integrity: sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==} + /@typescript-eslint/types@6.2.1: + resolution: {integrity: sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/types@6.7.0: - resolution: {integrity: sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==} + /@typescript-eslint/types@6.7.3: + resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -6963,8 +7974,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.6.0(typescript@5.2.2): - resolution: {integrity: sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==} + /@typescript-eslint/typescript-estree@6.2.1(typescript@5.2.2): + resolution: {integrity: sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -6972,8 +7983,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/visitor-keys': 6.6.0 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -6984,8 +7995,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.7.0(typescript@5.2.2): - resolution: {integrity: sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==} + /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2): + resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -6993,8 +8004,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.0 - '@typescript-eslint/visitor-keys': 6.7.0 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -7045,8 +8056,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.6.0(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==} + /@typescript-eslint/utils@6.2.1(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -7054,9 +8065,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.6.0 - '@typescript-eslint/types': 6.6.0 - '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.2.2) eslint: 8.50.0 semver: 7.5.4 transitivePeerDependencies: @@ -7091,19 +8102,19 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.6.0: - resolution: {integrity: sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==} + /@typescript-eslint/visitor-keys@6.2.1: + resolution: {integrity: sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.6.0 + '@typescript-eslint/types': 6.2.1 eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.7.0: - resolution: {integrity: sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==} + /@typescript-eslint/visitor-keys@6.7.3: + resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.0 + '@typescript-eslint/types': 6.7.3 eslint-visitor-keys: 3.4.3 dev: true @@ -7811,7 +8822,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.20.4 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-string: 1.0.7 @@ -8368,8 +9379,8 @@ packages: /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + /bignumber.js@9.1.1: + resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: false /binary-extensions@1.13.1: @@ -8457,6 +9468,10 @@ packages: resolution: {integrity: sha512-WcgHDeLrazCR03CDPEvCchLsUecZAZvs4F6FnMiGlTEjyQQf15Q5TRl4EUaAQ1dacvhPq7lC9EOTWkCojQ6few==} dev: false + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + /boxen@1.3.0: resolution: {integrity: sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==} engines: {node: '>=4'} @@ -8625,8 +9640,8 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001540 - electron-to-chromium: 1.4.450 - node-releases: 2.0.12 + electron-to-chromium: 1.4.502 + node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.9) dev: true @@ -10844,10 +11859,6 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium@1.4.450: - resolution: {integrity: sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==} - dev: true - /electron-to-chromium@1.4.502: resolution: {integrity: sha512-xqeGw3Gr6o3uyHy/yKjdnDQHY2RQvXcGC2cfHjccK1IGkH6cX1WQBN8EeC/YpwPhGkBaikDTecJ8+ssxSVRQlw==} @@ -11519,13 +12530,13 @@ packages: resolution: {integrity: sha512-NB/L/1Y30qyJcG5xZxCJKW/+bqyj+llbcCwo9DEz8bESIP0SLTOQ8T1DWCCFc+wJ61AMEstj4511PSScqMMfCw==} dev: true - /eslint-config-turbo@1.8.8(eslint@8.50.0): - resolution: {integrity: sha512-+yT22sHOT5iC1sbBXfLIdXfbZuiv9bAyOXsxTxFCWelTeFFnANqmuKB3x274CFvf7WRuZ/vYP/VMjzU9xnFnxA==} + /eslint-config-turbo@1.10.15(eslint@8.50.0): + resolution: {integrity: sha512-76mpx2x818JZE26euen14utYcFDxOahZ9NaWA+6Xa4pY2ezVKVschuOxS96EQz3o3ZRSmcgBOapw/gHbN+EKxQ==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 8.50.0 - eslint-plugin-turbo: 1.8.8(eslint@8.50.0) + eslint-plugin-turbo: 1.10.15(eslint@8.50.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -11686,7 +12697,7 @@ packages: engines: {node: '>=18.10', pnpm: '>=8.6'} requiresBuild: true dependencies: - '@typescript-eslint/utils': 6.6.0(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.2.1(eslint@8.50.0)(typescript@5.2.2) camel-case: 4.1.2 indefinite: 2.4.3 pascal-case: 3.1.2 @@ -11731,11 +12742,12 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.8 - /eslint-plugin-turbo@1.8.8(eslint@8.50.0): - resolution: {integrity: sha512-zqyTIvveOY4YU5jviDWw9GXHd4RiKmfEgwsjBrV/a965w0PpDwJgEUoSMB/C/dU310Sv9mF3DSdEjxjJLaw6rA==} + /eslint-plugin-turbo@1.10.15(eslint@8.50.0): + resolution: {integrity: sha512-Tv4QSKV/U56qGcTqS/UgOvb9HcKFmWOQcVh3HEaj7of94lfaENgfrtK48E2CckQf7amhKs1i+imhCsNCKjkQyA==} peerDependencies: eslint: '>6.6.0' dependencies: + dotenv: 16.0.3 eslint: 8.50.0 dev: true @@ -12193,6 +13205,13 @@ packages: resolution: {integrity: sha512-WvJe06IfNYlr+6cO3uQkdKdy3Cb1LlCJSF8zRs2eT8yuhdbSlR9nIt+TgQ92RUxiRrQm+/S7RARnMfCs5iuAjw==} dev: true + /fast-xml-parser@4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastest-stable-stringify@2.0.2: resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} dev: false @@ -13111,7 +14130,7 @@ packages: google-auth-library: 9.0.0(encoding@0.1.13) qs: 6.11.0 url-template: 2.0.8 - uuid: 9.0.1 + uuid: 9.0.0 transitivePeerDependencies: - encoding - supports-color @@ -14089,11 +15108,6 @@ packages: rgba-regex: 1.0.0 dev: true - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 - /is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: @@ -15361,7 +16375,7 @@ packages: /json-bigint@1.0.0: resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} dependencies: - bignumber.js: 9.1.2 + bignumber.js: 9.1.1 dev: false /json-buffer@3.0.0: @@ -15665,7 +16679,7 @@ packages: is-plain-object: 2.0.4 object.map: 1.0.1 rechoir: 0.6.2 - resolve: 1.22.2 + resolve: 1.22.6 transitivePeerDependencies: - supports-color dev: true @@ -16091,7 +17105,7 @@ packages: dependencies: findup-sync: 2.0.0 micromatch: 3.1.10 - resolve: 1.22.2 + resolve: 1.22.6 stack-trace: 0.0.10 transitivePeerDependencies: - supports-color @@ -16123,9 +17137,10 @@ packages: unist-util-visit: 4.1.1 dev: false - /mdast-util-find-and-replace@2.2.1: - resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==} + /mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} dependencies: + '@types/mdast': 3.0.10 escape-string-regexp: 5.0.0 unist-util-is: 5.1.1 unist-util-visit-parents: 5.1.1 @@ -16150,32 +17165,32 @@ packages: - supports-color dev: false - /mdast-util-gfm-autolink-literal@1.0.2: - resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} + /mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} dependencies: '@types/mdast': 3.0.10 ccount: 2.0.1 - mdast-util-find-and-replace: 2.2.1 + mdast-util-find-and-replace: 2.2.2 micromark-util-character: 1.1.0 dev: false - /mdast-util-gfm-footnote@1.0.1: - resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==} + /mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} dependencies: '@types/mdast': 3.0.10 mdast-util-to-markdown: 1.3.0 micromark-util-normalize-identifier: 1.0.0 dev: false - /mdast-util-gfm-strikethrough@1.0.2: - resolution: {integrity: sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==} + /mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} dependencies: '@types/mdast': 3.0.10 mdast-util-to-markdown: 1.3.0 dev: false - /mdast-util-gfm-table@1.0.6: - resolution: {integrity: sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==} + /mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} dependencies: '@types/mdast': 3.0.10 markdown-table: 3.0.3 @@ -16185,22 +17200,22 @@ packages: - supports-color dev: false - /mdast-util-gfm-task-list-item@1.0.1: - resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==} + /mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} dependencies: '@types/mdast': 3.0.10 mdast-util-to-markdown: 1.3.0 dev: false - /mdast-util-gfm@2.0.1: - resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==} + /mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} dependencies: mdast-util-from-markdown: 1.2.0 - mdast-util-gfm-autolink-literal: 1.0.2 - mdast-util-gfm-footnote: 1.0.1 - mdast-util-gfm-strikethrough: 1.0.2 - mdast-util-gfm-table: 1.0.6 - mdast-util-gfm-task-list-item: 1.0.1 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 mdast-util-to-markdown: 1.3.0 transitivePeerDependencies: - supports-color @@ -16457,18 +17472,17 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} dependencies: micromark-util-character: 1.1.0 micromark-util-sanitize-uri: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.6 dev: false - /micromark-extension-gfm-footnote@1.0.4: - resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} dependencies: micromark-core-commonmark: 1.0.6 micromark-factory-space: 1.0.0 @@ -16480,8 +17494,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-strikethrough@1.0.4: - resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} dependencies: micromark-util-chunked: 1.0.0 micromark-util-classify-character: 1.0.0 @@ -16491,8 +17505,8 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-table@1.0.5: - resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} dependencies: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 @@ -16501,14 +17515,14 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm-tagfilter@1.0.1: - resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} dependencies: micromark-util-types: 1.0.2 dev: false - /micromark-extension-gfm-task-list-item@1.0.3: - resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} dependencies: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 @@ -16517,15 +17531,15 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-gfm@2.0.1: - resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} dependencies: - micromark-extension-gfm-autolink-literal: 1.0.3 - micromark-extension-gfm-footnote: 1.0.4 - micromark-extension-gfm-strikethrough: 1.0.4 - micromark-extension-gfm-table: 1.0.5 - micromark-extension-gfm-tagfilter: 1.0.1 - micromark-extension-gfm-task-list-item: 1.0.3 + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 micromark-util-combine-extensions: 1.0.0 micromark-util-types: 1.0.2 dev: false @@ -16826,6 +17840,12 @@ packages: hasBin: true dev: true + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: false + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -17499,10 +18519,6 @@ packages: vm-browserify: 1.1.2 dev: true - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} - dev: true - /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} @@ -18616,7 +19632,7 @@ packages: postcss: 8.4.27 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.6 /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -18704,6 +19720,23 @@ packages: postcss: 8.4.27 yaml: 2.3.1 + /postcss-load-config@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.31 + yaml: 2.3.1 + dev: true + /postcss-loader@4.3.0(postcss@8.4.27)(webpack@4.46.0): resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} engines: {node: '>= 10.13.0'} @@ -19532,8 +20565,8 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 - /posthog-js@1.82.1: - resolution: {integrity: sha512-VqOq11ztae7d8s3cwezct91aeklJGXKRwHw1799F99EzgI+SWtF2tZF2tBvA1Nid0hWBE/R1vUwlO1Qeeb16ng==} + /posthog-js@1.82.2: + resolution: {integrity: sha512-Tiry1zFEmcSi5o4Czgo3fX9m3tIjd0i+ap3tpoxS5Nl++Sh1KgrNAVPgi5mLa0Xyi4Vh1+fuxyIc8rq16gvpHQ==} dependencies: fflate: 0.4.8 dev: false @@ -20754,8 +21787,8 @@ packages: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} dependencies: '@types/mdast': 3.0.10 - mdast-util-gfm: 2.0.1 - micromark-extension-gfm: 2.0.1 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -20999,7 +22032,7 @@ packages: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -21008,7 +22041,7 @@ packages: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -21024,7 +22057,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -21199,16 +22232,8 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.28.1: - resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /rollup@3.5.1: - resolution: {integrity: sha512-hdQWTvPeiAbM6SUkxV70HdGUVxsgsc+CLy5fuh4KdgUBJ0SowXiix8gANgXoG3wEuLwfoJhCT2V+WwxfWq9Ikw==} + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -22172,7 +23197,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.22.1 + es-abstract: 1.20.4 get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 @@ -22309,14 +23334,18 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stripe@13.8.0: - resolution: {integrity: sha512-QFOOeaEwNOAj4k/T9OtSb9sKx9oLVI5y9HrJJn3XN9RJYKGAuE+fMD+rHA5u9ILmf3FDx99jaEvVvykftJtBGA==} + /stripe@13.9.0: + resolution: {integrity: sha512-sQAqodCvaw/iYWauHHdOWlFGj0oZj/3A51zs4rG5PN3SUJUFSSjtnbc9q5Djpls0iz3nXz2UwjzAdKHVP4dVqQ==} engines: {node: '>=12.*'} dependencies: '@types/node': 20.8.2 qs: 6.11.0 dev: false + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /strtok3@6.3.0: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} @@ -23148,9 +24177,9 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1(postcss@8.4.27) + postcss-load-config: 4.0.1(postcss@8.4.31) resolve-from: 5.0.0 - rollup: 3.5.1 + rollup: 3.29.4 source-map: 0.8.0-beta.0 sucrase: 3.32.0 tree-kill: 1.2.2 @@ -23204,64 +24233,64 @@ packages: dependencies: safe-buffer: 5.2.1 - /turbo-darwin-64@1.10.13: - resolution: {integrity: sha512-vmngGfa2dlYvX7UFVncsNDMuT4X2KPyPJ2Jj+xvf5nvQnZR/3IeDEGleGVuMi/hRzdinoxwXqgk9flEmAYp0Xw==} + /turbo-darwin-64@1.10.15: + resolution: {integrity: sha512-Sik5uogjkRTe1XVP9TC2GryEMOJCaKE2pM/O9uLn4koQDnWKGcLQv+mDU+H+9DXvKLnJnKCD18OVRkwK5tdpoA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64@1.10.13: - resolution: {integrity: sha512-eMoJC+k7gIS4i2qL6rKmrIQGP6Wr9nN4odzzgHFngLTMimok2cGLK3qbJs5O5F/XAtEeRAmuxeRnzQwTl/iuAw==} + /turbo-darwin-arm64@1.10.15: + resolution: {integrity: sha512-xwqyFDYUcl2xwXyGPmHkmgnNm4Cy0oNzMpMOBGRr5x64SErS7QQLR4VHb0ubiR+VAb8M+ECPklU6vD1Gm+wekg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64@1.10.13: - resolution: {integrity: sha512-0CyYmnKTs6kcx7+JRH3nPEqCnzWduM0hj8GP/aodhaIkLNSAGAa+RiYZz6C7IXN+xUVh5rrWTnU2f1SkIy7Gdg==} + /turbo-linux-64@1.10.15: + resolution: {integrity: sha512-dM07SiO3RMAJ09Z+uB2LNUSkPp3I1IMF8goH5eLj+d8Kkwoxd/+qbUZOj9RvInyxU/IhlnO9w3PGd3Hp14m/nA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64@1.10.13: - resolution: {integrity: sha512-0iBKviSGQQlh2OjZgBsGjkPXoxvRIxrrLLbLObwJo3sOjIH0loGmVIimGS5E323soMfi/o+sidjk2wU1kFfD7Q==} + /turbo-linux-arm64@1.10.15: + resolution: {integrity: sha512-MkzKLkKYKyrz4lwfjNXH8aTny5+Hmiu4SFBZbx+5C0vOlyp6fV5jZANDBvLXWiDDL4DSEAuCEK/2cmN6FVH1ow==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64@1.10.13: - resolution: {integrity: sha512-S5XySRfW2AmnTeY1IT+Jdr6Goq7mxWganVFfrmqU+qqq3Om/nr0GkcUX+KTIo9mPrN0D3p5QViBRzulwB5iuUQ==} + /turbo-windows-64@1.10.15: + resolution: {integrity: sha512-3TdVU+WEH9ThvQGwV3ieX/XHebtYNHv9HARHauPwmVj3kakoALkpGxLclkHFBLdLKkqDvmHmXtcsfs6cXXRHJg==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64@1.10.13: - resolution: {integrity: sha512-nKol6+CyiExJIuoIc3exUQPIBjP9nIq5SkMJgJuxsot2hkgGrafAg/izVDRDrRduQcXj2s8LdtxJHvvnbI8hEQ==} + /turbo-windows-arm64@1.10.15: + resolution: {integrity: sha512-l+7UOBCbfadvPMYsX08hyLD+UIoAkg6ojfH+E8aud3gcA1padpjCJTh9gMpm3QdMbKwZteT5uUM+wyi6Rbbyww==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo@1.10.13: - resolution: {integrity: sha512-vOF5IPytgQPIsgGtT0n2uGZizR2N3kKuPIn4b5p5DdeLoI0BV7uNiydT7eSzdkPRpdXNnO8UwS658VaI4+YSzQ==} + /turbo@1.10.15: + resolution: {integrity: sha512-mKKkqsuDAQy1wCCIjCdG+jOCwUflhckDMSRoeBPcIL/CnCl7c5yRDFe7SyaXloUUkt4tUR0rvNIhVCcT7YeQpg==} hasBin: true optionalDependencies: - turbo-darwin-64: 1.10.13 - turbo-darwin-arm64: 1.10.13 - turbo-linux-64: 1.10.13 - turbo-linux-arm64: 1.10.13 - turbo-windows-64: 1.10.13 - turbo-windows-arm64: 1.10.13 + turbo-darwin-64: 1.10.15 + turbo-darwin-arm64: 1.10.15 + turbo-linux-64: 1.10.15 + turbo-linux-arm64: 1.10.15 + turbo-windows-64: 1.10.15 + turbo-windows-arm64: 1.10.15 dev: true /tw-to-css@0.0.11: @@ -23981,8 +25010,8 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + /uuid@9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: false @@ -24156,7 +25185,7 @@ packages: dependencies: esbuild: 0.18.10 postcss: 8.4.31 - rollup: 3.28.1 + rollup: 3.29.4 terser: 5.21.0 optionalDependencies: fsevents: 2.3.2 diff --git a/turbo.json b/turbo.json index d9fa80f804..b651c8bedf 100644 --- a/turbo.json +++ b/turbo.json @@ -88,7 +88,11 @@ "STRIPE_WEBHOOK_SECRET", "TELEMETRY_DISABLED", "VERCEL_URL", - "WEBAPP_URL" + "WEBAPP_URL", + "AWS_ACCESS_KEY", + "AWS_SECRET_KEY", + "S3_REGION", + "S3_BUCKET_NAME" ] }, "post-install": {