diff --git a/apps/core-api/package.json b/apps/core-api/package.json index e2348d9..2d4e21c 100644 --- a/apps/core-api/package.json +++ b/apps/core-api/package.json @@ -16,6 +16,8 @@ "license": "ISC", "packageManager": "pnpm@10.27.0", "dependencies": { + "@aws-sdk/client-s3": "^3.1006.0", + "@aws-sdk/s3-request-presigner": "^3.1006.0", "amqplib": "^0.10.9", "bcrypt": "^6.0.0", "cookie-parser": "^1.4.7", diff --git a/apps/core-api/src/controllers/media.controller.ts b/apps/core-api/src/controllers/media.controller.ts new file mode 100644 index 0000000..b99d98f --- /dev/null +++ b/apps/core-api/src/controllers/media.controller.ts @@ -0,0 +1,28 @@ +import type { Request, Response, NextFunction } from "express"; + +import { generateUploadUrlService } from "../services/media.service.js"; + +export const generateUploadUrlController = async ( + req: Request, + res: Response, + next: NextFunction +) => { + try { + + const { fileName, fileType, folder } = req.body; + + const result = await generateUploadUrlService( + folder, + fileName, + fileType + ); + + res.status(200).json({ + success: true, + data: result + }); + + } catch (error) { + next(error); + } +}; diff --git a/apps/core-api/src/lib/s3.client.ts b/apps/core-api/src/lib/s3.client.ts new file mode 100644 index 0000000..400c57e --- /dev/null +++ b/apps/core-api/src/lib/s3.client.ts @@ -0,0 +1,9 @@ +import { S3Client } from "@aws-sdk/client-s3"; + +export const s3Client = new S3Client({ + region: process.env.AWS_REGION!, + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID!, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY! + } +}); \ No newline at end of file diff --git a/apps/core-api/src/models/brand.model.ts b/apps/core-api/src/models/brand.model.ts index 98caa46..7528d61 100644 --- a/apps/core-api/src/models/brand.model.ts +++ b/apps/core-api/src/models/brand.model.ts @@ -19,6 +19,7 @@ export interface IBrandProfile extends Document { isProfileComplete: boolean; isVerified: boolean; + profileImageUrl?: string, } const BrandProfileSchema = new Schema( @@ -65,7 +66,10 @@ const BrandProfileSchema = new Schema( type: [String], // store S3 keys default: [], }, - + profileImageUrl: { + type: String, + default: "" + }, isProfileComplete: { type: Boolean, default: false, diff --git a/apps/core-api/src/models/influencer.model.ts b/apps/core-api/src/models/influencer.model.ts index 02b17fe..c942e6b 100644 --- a/apps/core-api/src/models/influencer.model.ts +++ b/apps/core-api/src/models/influencer.model.ts @@ -20,6 +20,7 @@ export interface IInfluencerProfile extends Document { isProfileComplete: boolean; isVerified: boolean; + profileImageUrl?: string, } const InfluencerProfileSchema = new Schema( @@ -50,6 +51,10 @@ const InfluencerProfileSchema = new Schema( type: String, maxlength: 500, }, + profileImageUrl: { + type: String, + default: "" + }, instagramUrl: String, youtubeUrl: String, diff --git a/apps/core-api/src/routes/index.ts b/apps/core-api/src/routes/index.ts index 55708af..27f31cb 100644 --- a/apps/core-api/src/routes/index.ts +++ b/apps/core-api/src/routes/index.ts @@ -1,4 +1,6 @@ -import { Router } from "express"; +import { Router } from "express"; + +import mediaRoutes from "../routes/media.routes.js"; import userRoutes from "./users.routes.js"; import authRoutes from "./auth.routes.js"; @@ -24,5 +26,6 @@ router.use("/bookings", bookingRoutes); router.use("/orders", orderRoutes); router.use("/payments", paymentRoutes); router.use("/search", searchRoutes); +router.use("/media", mediaRoutes); export default router \ No newline at end of file diff --git a/apps/core-api/src/routes/media.routes.ts b/apps/core-api/src/routes/media.routes.ts new file mode 100644 index 0000000..f2f08b0 --- /dev/null +++ b/apps/core-api/src/routes/media.routes.ts @@ -0,0 +1,14 @@ +import { Router } from "express"; + +import { generateUploadUrlController } from "../controllers/media.controller.js"; +import { authenticate } from "../middlewares/auth.middleware.js"; + +const router:Router = Router(); + +router.post( + "/upload-url", + authenticate, + generateUploadUrlController +); + +export default router; diff --git a/apps/core-api/src/services/media.service.ts b/apps/core-api/src/services/media.service.ts new file mode 100644 index 0000000..b182fcd --- /dev/null +++ b/apps/core-api/src/services/media.service.ts @@ -0,0 +1,33 @@ +import { PutObjectCommand } from "@aws-sdk/client-s3"; +import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; + +import { s3Client } from "../lib/s3.client.js"; + +export const generateUploadUrlService = async ( + folder: string, + fileName: string, + fileType: string +) => { + + const uniqueFileName = `${Date.now()}-${fileName}`; + + const key = `${folder}/${uniqueFileName}`; + + const command = new PutObjectCommand({ + Bucket: process.env.AWS_BUCKET_NAME!, + Key: key, + ContentType: fileType + }); + + const uploadUrl = await getSignedUrl(s3Client, command, { + expiresIn: 300 + }); + + const fileUrl = + `https://${process.env.AWS_BUCKET_NAME}.s3.${process.env.AWS_REGION}.amazonaws.com/${key}`; + + return { + uploadUrl, + fileUrl + }; +}; \ No newline at end of file diff --git a/apps/web/app/profile-setup/page.tsx b/apps/web/app/profile-setup/page.tsx index 5b25e68..fbffb63 100644 --- a/apps/web/app/profile-setup/page.tsx +++ b/apps/web/app/profile-setup/page.tsx @@ -1,183 +1,212 @@ "use client"; import React, { useEffect, useState } from "react"; -import { useRouter } from "next/navigation"; +import { useRouter } from "next/navigation"; +import { uploadToS3 } from "@/lib/s3-uploads"; import Navbar from "@/components/Navbar"; import { useAuthStore } from "@/store/auth.store"; import api from "@/lib/axios.client"; export default function ProfileSetupPage() { - const router = useRouter(); - const [loading, setLoading] = useState(false); - - const user = useAuthStore((state) => state.user); - - const userType = user?.role as "INFLUENCER" | "BRAND" | undefined; - - const [commonData, setCommonData] = useState({ - profilePicture: null as File | null, - bio: "", - location: "", - phoneNumber: "", - }); - - const [influencerData, setInfluencerData] = useState({ - fullName: "", - username: "", - niche: "", - gender: "", - dob: "", - instagram: "", - youtube: "", - tiktok: "", - }); - - const [brandData, setBrandData] = useState({ - companyName: "", - industry: "", - website: "", - companySize: "", - }); - - useEffect(() => { - if (!userType) return; - - const fetchProfile = async () => { - try { - const res = await api.get("/profile/get_profile"); - const data = res.data.data; - - if (userType === "INFLUENCER") { - setInfluencerData({ - fullName: data.fullName || "", - username: data.username || "", - niche: data.categories?.[0] || "", - gender: "", - dob: "", - instagram: data.instagramUrl || "", - youtube: data.youtubeUrl || "", - tiktok: data.tiktokUrl || "", - }); - - setCommonData((prev) => ({ - ...prev, - bio: data.bio || "", - location: data.location || "", - })); - } + const router = useRouter(); + const [loading, setLoading] = useState(false); + + const user = useAuthStore((state) => state.user); + + const userType = user?.role as "INFLUENCER" | "BRAND" | undefined; + + const [commonData, setCommonData] = useState({ + profilePicture: null as File | null, + profileImageUrl: "", + bio: "", + location: "", + phoneNumber: "", + }); + + const [influencerData, setInfluencerData] = useState({ + fullName: "", + username: "", + niche: "", + gender: "", + dob: "", + instagram: "", + youtube: "", + tiktok: "", + }); + + const [brandData, setBrandData] = useState({ + companyName: "", + industry: "", + website: "", + companySize: "", + }); + + useEffect(() => { + if (!userType) return; + + const fetchProfile = async () => { + try { + const res = await api.get("/profile/get_profile"); + const data = res.data.data; + console.log(data); + + + if (userType === "INFLUENCER") { + setInfluencerData({ + fullName: data.fullName || "", + username: data.username || "", + niche: data.categories?.[0] || "", + gender: "", + dob: "", + instagram: data.instagramUrl || "", + youtube: data.youtubeUrl || "", + tiktok: data.tiktokUrl || "", + }); + + setCommonData((prev) => ({ + ...prev, + bio: data.bio || "", + location: data.location || "", + profileImageUrl: data.profileImageUrl || "" + + })); + } + + if (userType === "BRAND") { + setBrandData({ + companyName: data.companyName || "", + industry: data.industry || "", + website: data.website || "", + companySize: data.companySize || "", + }); + } + } catch (err) { + console.error(err); + } + }; - if (userType === "BRAND") { - setBrandData({ - companyName: data.companyName || "", - industry: data.industry || "", - website: data.website || "", - companySize: data.companySize || "", - }); - } - } catch (err) { - console.error(err); - } + fetchProfile(); + }, [userType]); + + const handleCommonChange = ( + e: React.ChangeEvent + ) => { + const { name, value } = e.target; + setCommonData((prev) => ({ ...prev, [name]: value })); }; - fetchProfile(); - }, [userType]); - - const handleCommonChange = ( - e: React.ChangeEvent - ) => { - const { name, value } = e.target; - setCommonData((prev) => ({ ...prev, [name]: value })); - }; - - const handleInfluencerChange = ( - e: React.ChangeEvent - ) => { - const { name, value } = e.target; - setInfluencerData((prev) => ({ ...prev, [name]: value })); - }; - - const handleBrandChange = ( - e: React.ChangeEvent - ) => { - const { name, value } = e.target; - setBrandData((prev) => ({ ...prev, [name]: value })); - }; - - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - setLoading(true); - - try { - if (!userType) return; - type InfluencerPayload = { - bio?: string; - location?: string; - fullName?: string; - username?: string; - categories?: string[]; - instagramUrl?: string; - youtubeUrl?: string; - tiktokUrl?: string; - languages?: string[]; -}; - -type BrandPayload = { - bio?: string; - location?: string; - companyName?: string; - industry?: string; - website?: string; - companySize?: string; -}; - -let payload: InfluencerPayload | BrandPayload = { - - - bio: commonData.bio, - location: commonData.location, - }; - - if (userType === "INFLUENCER") { - payload = { - ...payload, - fullName: influencerData.fullName, - username: influencerData.username, - categories: influencerData.niche - ? [influencerData.niche] - : [], - instagramUrl: influencerData.instagram, - youtubeUrl: influencerData.youtube, - tiktokUrl: influencerData.tiktok, - languages: [], - }; - } - - if (userType === "BRAND") { - payload = { - ...payload, - companyName: brandData.companyName, - industry: brandData.industry, - website: brandData.website, - companySize: brandData.companySize, - }; - } + const handleInfluencerChange = ( + e: React.ChangeEvent + ) => { + const { name, value } = e.target; + setInfluencerData((prev) => ({ ...prev, [name]: value })); + }; + + const handleBrandChange = ( + e: React.ChangeEvent + ) => { + const { name, value } = e.target; + setBrandData((prev) => ({ ...prev, [name]: value })); + }; + const handleImageChange = (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; - await api.patch("/profile/update_profile", payload); + if (!file) return; - alert("Profile Updated Successfully"); - router.push("/home"); - } catch (err) { - console.error(err); - alert("Failed to update profile"); - } finally { - setLoading(false); - } - }; + setCommonData((prev) => ({ + ...prev, + profilePicture: file, + })); + }; +const handleSubmit = async (e: React.SyntheticEvent) => { + e.preventDefault(); + setLoading(true); + + try { + if (!userType) return; + type InfluencerPayload = { + bio?: string; + location?: string; + fullName?: string; + username?: string; + categories?: string[]; + instagramUrl?: string; + youtubeUrl?: string; + tiktokUrl?: string; + languages?: string[]; + profileImageUrl?: string; + }; + + type BrandPayload = { + bio?: string; + location?: string; + companyName?: string; + industry?: string; + website?: string; + companySize?: string; + profileImageUrl?: string; + }; + let profileImageUrl = commonData.profileImageUrl; + + if (commonData.profilePicture) { + profileImageUrl = await uploadToS3( + commonData.profilePicture, + userType === "INFLUENCER" + ? "profiles/influencers" + : "profiles/brands" + ); + } + + let payload: InfluencerPayload | BrandPayload = { + + + bio: commonData.bio, + location: commonData.location, + profileImageUrl, + + }; + + if (userType === "INFLUENCER") { + payload = { + ...payload, + fullName: influencerData.fullName, + username: influencerData.username, + categories: influencerData.niche + ? [influencerData.niche] + : [], + instagramUrl: influencerData.instagram, + youtubeUrl: influencerData.youtube, + tiktokUrl: influencerData.tiktok, + languages: [], + }; + } + + if (userType === "BRAND") { + payload = { + ...payload, + companyName: brandData.companyName, + industry: brandData.industry, + website: brandData.website, + companySize: brandData.companySize, + }; + } + + await api.patch("/profile/update_profile", payload); + + alert("Profile Updated Successfully"); + router.push("/home"); + } catch (err) { + console.error(err); + alert("Failed to update profile"); + } finally { + setLoading(false); + } + }; - if (!user) { - return
Loading profile...
; - } + if (!user) { + return
Loading profile...
; + } return ( @@ -187,38 +216,7 @@ let payload: InfluencerPayload | BrandPayload = {
{/* Header */} -
- {/*

- Setup your profile -

-

- Join thousands of creators and brands building the future of influencer marketing. -

*/} -
- {/* Type Switcher */} - {/*
-
- - -
-
*/} {/* Main Card */}
@@ -234,20 +232,37 @@ let payload: InfluencerPayload | BrandPayload = {
{/* Avatar Upload */} -
-
- {commonData.profilePicture ? ( - Preview - ) : ( -
- - - - Upload Photo -
- )} - {/* */} -
+
+ + {commonData.profilePicture || commonData.profileImageUrl ? ( + + profile + + ) : ( + +
+ + Upload Photo + +
+ + )} + + +
{/* Basic Inputs */} diff --git a/apps/web/lib/s3-uploads.ts b/apps/web/lib/s3-uploads.ts new file mode 100644 index 0000000..0943744 --- /dev/null +++ b/apps/web/lib/s3-uploads.ts @@ -0,0 +1,25 @@ +import api from "@/lib/axios.client"; + +export const uploadToS3 = async ( + file: File, + folder: string +): Promise => { + + const res = await api.post("/media/upload-url", { + fileName: file.name, + fileType: file.type, + folder + }); + + const { uploadUrl, fileUrl } = res.data.data; + + await fetch(uploadUrl, { + method: "PUT", + headers: { + "Content-Type": file.type + }, + body: file + }); + + return fileUrl; +}; \ No newline at end of file diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts index 10df6f3..1239608 100644 --- a/apps/web/next.config.ts +++ b/apps/web/next.config.ts @@ -12,6 +12,10 @@ const nextConfig: NextConfig = { protocol: "https", hostname: "i.pravatar.cc", }, + { + protocol: "https", + hostname: "noillin-media.s3.eu-north-1.amazonaws.com" + } ], }, }; diff --git a/apps/web/package.json b/apps/web/package.json index 789da7f..cc75908 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -27,6 +27,6 @@ "eslint": "^9", "eslint-config-next": "16.1.4", "tailwindcss": "^4", - "typescript": "^5" + "typescript": "5.9.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c28a71..aacd9f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,12 @@ importers: apps/core-api: dependencies: + "@aws-sdk/client-s3": + specifier: ^3.1006.0 + version: 3.1006.0 + "@aws-sdk/s3-request-presigner": + specifier: ^3.1006.0 + version: 3.1006.0 amqplib: specifier: ^0.10.9 version: 0.10.9 @@ -213,7 +219,7 @@ importers: specifier: ^4 version: 4.1.18 typescript: - specifier: ^5 + specifier: 5.9.3 version: 5.9.3 apps/worker: @@ -261,6 +267,299 @@ packages: } engines: { node: ">=10" } + "@aws-crypto/crc32@5.2.0": + resolution: + { + integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==, + } + engines: { node: ">=16.0.0" } + + "@aws-crypto/crc32c@5.2.0": + resolution: + { + integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==, + } + + "@aws-crypto/sha1-browser@5.2.0": + resolution: + { + integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==, + } + + "@aws-crypto/sha256-browser@5.2.0": + resolution: + { + integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==, + } + + "@aws-crypto/sha256-js@5.2.0": + resolution: + { + integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==, + } + engines: { node: ">=16.0.0" } + + "@aws-crypto/supports-web-crypto@5.2.0": + resolution: + { + integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==, + } + + "@aws-crypto/util@5.2.0": + resolution: + { + integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==, + } + + "@aws-sdk/client-s3@3.1006.0": + resolution: + { + integrity: sha512-tm8R/LgWDC3zWPMCdD990owvBrmuIM2A39+OWKW/HyAomWi6ancPz/H1K/hmxf0bqdXAaRUHBQMAmzwb1aR33Q==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/core@3.973.19": + resolution: + { + integrity: sha512-56KePyOcZnKTWCd89oJS1G6j3HZ9Kc+bh/8+EbvtaCCXdP6T7O7NzCiPuHRhFLWnzXIaXX3CxAz0nI5My9spHQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/crc64-nvme@3.972.4": + resolution: + { + integrity: sha512-HKZIZLbRyvzo/bXZU7Zmk6XqU+1C9DjI56xd02vwuDIxedxBEqP17t9ExhbP9QFeNq/a3l9GOcyirFXxmbDhmw==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-env@3.972.17": + resolution: + { + integrity: sha512-MBAMW6YELzE1SdkOniqr51mrjapQUv8JXSGxtwRjQV0mwVDutVsn22OPAUt4RcLRvdiHQmNBDEFP9iTeSVCOlA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-http@3.972.19": + resolution: + { + integrity: sha512-9EJROO8LXll5a7eUFqu48k6BChrtokbmgeMWmsH7lBb6lVbtjslUYz/ShLi+SHkYzTomiGBhmzTW7y+H4BxsnA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-ini@3.972.18": + resolution: + { + integrity: sha512-vthIAXJISZnj2576HeyLBj4WTeX+I7PwWeRkbOa0mVX39K13SCGxCgOFuKj2ytm9qTlLOmXe4cdEnroteFtJfw==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-login@3.972.18": + resolution: + { + integrity: sha512-kINzc5BBxdYBkPZ0/i1AMPMOk5b5QaFNbYMElVw5QTX13AKj6jcxnv/YNl9oW9mg+Y08ti19hh01HhyEAxsSJQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-node@3.972.19": + resolution: + { + integrity: sha512-yDWQ9dFTr+IMxwanFe7+tbN5++q8psZBjlUwOiCXn1EzANoBgtqBwcpYcHaMGtn0Wlfj4NuXdf2JaEx1lz5RaQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-process@3.972.17": + resolution: + { + integrity: sha512-c8G8wT1axpJDgaP3xzcy+q8Y1fTi9A2eIQJvyhQ9xuXrUZhlCfXbC0vM9bM1CUXiZppFQ1p7g0tuUMvil/gCPg==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-sso@3.972.18": + resolution: + { + integrity: sha512-YHYEfj5S2aqInRt5ub8nDOX8vAxgMvd84wm2Y3WVNfFa/53vOv9T7WOAqXI25qjj3uEcV46xxfqdDQk04h5XQA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-web-identity@3.972.18": + resolution: + { + integrity: sha512-OqlEQpJ+J3T5B96qtC1zLLwkBloechP+fezKbCH0sbd2cCc0Ra55XpxWpk/hRj69xAOYtHvoC4orx6eTa4zU7g==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-bucket-endpoint@3.972.7": + resolution: + { + integrity: sha512-goX+axlJ6PQlRnzE2bQisZ8wVrlm6dXJfBzMJhd8LhAIBan/w1Kl73fJnalM/S+18VnpzIHumyV6DtgmvqG5IA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-expect-continue@3.972.7": + resolution: + { + integrity: sha512-mvWqvm61bmZUKmmrtl2uWbokqpenY3Mc3Jf4nXB/Hse6gWxLPaCQThmhPBDzsPSV8/Odn8V6ovWt3pZ7vy4BFQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-flexible-checksums@3.973.5": + resolution: + { + integrity: sha512-Dp3hqE5W6hG8HQ3Uh+AINx9wjjqYmFHbxede54sGj3akx/haIQrkp85lNdTdC+ouNUcSYNiuGkzmyDREfHX1Gg==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-host-header@3.972.7": + resolution: + { + integrity: sha512-aHQZgztBFEpDU1BB00VWCIIm85JjGjQW1OG9+98BdmaOpguJvzmXBGbnAiYcciCd+IS4e9BEq664lhzGnWJHgQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-location-constraint@3.972.7": + resolution: + { + integrity: sha512-vdK1LJfffBp87Lj0Bw3WdK1rJk9OLDYdQpqoKgmpIZPe+4+HawZ6THTbvjhJt4C4MNnRrHTKHQjkwBiIpDBoig==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-logger@3.972.7": + resolution: + { + integrity: sha512-LXhiWlWb26txCU1vcI9PneESSeRp/RYY/McuM4SpdrimQR5NgwaPb4VJCadVeuGWgh6QmqZ6rAKSoL1ob16W6w==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-recursion-detection@3.972.7": + resolution: + { + integrity: sha512-l2VQdcBcYLzIzykCHtXlbpiVCZ94/xniLIkAj0jpnpjY4xlgZx7f56Ypn+uV1y3gG0tNVytJqo3K9bfMFee7SQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-sdk-s3@3.972.19": + resolution: + { + integrity: sha512-/CtOHHVFg4ZuN6CnLnYkrqWgVEnbOBC4kNiKa+4fldJ9cioDt3dD/f5vpq0cWLOXwmGL2zgVrVxNhjxWpxNMkg==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-ssec@3.972.7": + resolution: + { + integrity: sha512-G9clGVuAml7d8DYzY6DnRi7TIIDRvZ3YpqJPz/8wnWS5fYx/FNWNmkO6iJVlVkQg9BfeMzd+bVPtPJOvC4B+nQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-user-agent@3.972.20": + resolution: + { + integrity: sha512-3kNTLtpUdeahxtnJRnj/oIdLAUdzTfr9N40KtxNhtdrq+Q1RPMdCJINRXq37m4t5+r3H70wgC3opW46OzFcZYA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/nested-clients@3.996.8": + resolution: + { + integrity: sha512-6HlLm8ciMW8VzfB80kfIx16PBA9lOa9Dl+dmCBi78JDhvGlx3I7Rorwi5PpVRkL31RprXnYna3yBf6UKkD/PqA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/region-config-resolver@3.972.7": + resolution: + { + integrity: sha512-/Ev/6AI8bvt4HAAptzSjThGUMjcWaX3GX8oERkB0F0F9x2dLSBdgFDiyrRz3i0u0ZFZFQ1b28is4QhyqXTUsVA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/s3-request-presigner@3.1006.0": + resolution: + { + integrity: sha512-azZTNllb6zq3hyGvTViBflfN5IeThmSQbYB+JJJqVGB9ZAqV9d6xOUG1BFCtxoKukDT9JnUZqQwQB0Y24gJAPw==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/signature-v4-multi-region@3.996.7": + resolution: + { + integrity: sha512-mYhh7FY+7OOqjkYkd6+6GgJOsXK1xBWmuR+c5mxJPj2kr5TBNeZq+nUvE9kANWAux5UxDVrNOSiEM/wlHzC3Lg==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/token-providers@3.1005.0": + resolution: + { + integrity: sha512-vMxd+ivKqSxU9bHx5vmAlFKDAkjGotFU56IOkDa5DaTu1WWwbcse0yFHEm9I537oVvodaiwMl3VBwgHfzQ2rvw==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/types@3.973.5": + resolution: + { + integrity: sha512-hl7BGwDCWsjH8NkZfx+HgS7H2LyM2lTMAI7ba9c8O0KqdBLTdNJivsHpqjg9rNlAlPyREb6DeDRXUl0s8uFdmQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-arn-parser@3.972.3": + resolution: + { + integrity: sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-endpoints@3.996.4": + resolution: + { + integrity: sha512-Hek90FBmd4joCFj+Vc98KLJh73Zqj3s2W56gjAcTkrNLMDI5nIFkG9YpfcJiVI1YlE2Ne1uOQNe+IgQ/Vz2XRA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-format-url@3.972.7": + resolution: + { + integrity: sha512-V+PbnWfUl93GuFwsOHsAq7hY/fnm9kElRqR8IexIJr5Rvif9e614X5sGSyz3mVSf1YAZ+VTy63W1/pGdA55zyA==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-locate-window@3.965.5": + resolution: + { + integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==, + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-user-agent-browser@3.972.7": + resolution: + { + integrity: sha512-7SJVuvhKhMF/BkNS1n0QAJYgvEwYbK2QLKBrzDiwQGiTRU6Yf1f3nehTzm/l21xdAOtWSfp2uWSddPnP2ZtsVw==, + } + + "@aws-sdk/util-user-agent-node@3.973.5": + resolution: + { + integrity: sha512-Dyy38O4GeMk7UQ48RupfHif//gqnOPbq/zlvRssc11E2mClT+aUfc3VS2yD8oLtzqO3RsqQ9I3gOBB4/+HjPOw==, + } + engines: { node: ">=20.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + + "@aws-sdk/xml-builder@3.972.10": + resolution: + { + integrity: sha512-OnejAIVD+CxzyAUrVic7lG+3QRltyja9LoNqCE/1YVs8ichoTbJlVSaZ9iSMcnHLyzrSNtvaOGjSDRP+d/ouFA==, + } + engines: { node: ">=20.0.0" } + + "@aws/lambda-invoke-store@0.2.3": + resolution: + { + integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==, + } + engines: { node: ">=18.0.0" } + "@babel/code-frame@7.28.6": resolution: { @@ -1038,93 +1337,471 @@ packages: cpu: [x64] os: [darwin] - "@next/swc-linux-arm64-gnu@16.1.4": + "@next/swc-linux-arm64-gnu@16.1.4": + resolution: + { + integrity: sha512-POQ65+pnYOkZNdngWfMEt7r53bzWiKkVNbjpmCt1Zb3V6lxJNXSsjwRuTQ8P/kguxDC8LRkqaL3vvsFrce4dMQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@next/swc-linux-arm64-musl@16.1.4": + resolution: + { + integrity: sha512-3Wm0zGYVCs6qDFAiSSDL+Z+r46EdtCv/2l+UlIdMbAq9hPJBvGu/rZOeuvCaIUjbArkmXac8HnTyQPJFzFWA0Q==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@next/swc-linux-x64-gnu@16.1.4": + resolution: + { + integrity: sha512-lWAYAezFinaJiD5Gv8HDidtsZdT3CDaCeqoPoJjeB57OqzvMajpIhlZFce5sCAH6VuX4mdkxCRqecCJFwfm2nQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@next/swc-linux-x64-musl@16.1.4": + resolution: + { + integrity: sha512-fHaIpT7x4gA6VQbdEpYUXRGyge/YbRrkG6DXM60XiBqDM2g2NcrsQaIuj375egnGFkJow4RHacgBOEsHfGbiUw==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@next/swc-win32-arm64-msvc@16.1.4": + resolution: + { + integrity: sha512-MCrXxrTSE7jPN1NyXJr39E+aNFBrQZtO154LoCz7n99FuKqJDekgxipoodLNWdQP7/DZ5tKMc/efybx1l159hw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@next/swc-win32-x64-msvc@16.1.4": + resolution: + { + integrity: sha512-JSVlm9MDhmTXw/sO2PE/MRj+G6XOSMZB+BcZ0a7d6KwVFZVpkHcb2okyoYFBaco6LeiL53BBklRlOrDDbOeE5w==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@nodelib/fs.scandir@2.1.5": + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.stat@2.0.5": + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.walk@1.2.8": + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + + "@nolyfill/is-core-module@1.0.39": + resolution: + { + integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==, + } + engines: { node: ">=12.4.0" } + + "@rtsao/scc@1.1.0": + resolution: + { + integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==, + } + + "@smithy/abort-controller@4.2.11": + resolution: + { + integrity: sha512-Hj4WoYWMJnSpM6/kchsm4bUNTL9XiSyhvoMb2KIq4VJzyDt7JpGHUZHkVNPZVC7YE1tf8tPeVauxpFBKGW4/KQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/chunked-blob-reader-native@4.2.3": + resolution: + { + integrity: sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/chunked-blob-reader@5.2.2": + resolution: + { + integrity: sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/config-resolver@4.4.10": + resolution: + { + integrity: sha512-IRTkd6ps0ru+lTWnfnsbXzW80A8Od8p3pYiZnW98K2Hb20rqfsX7VTlfUwhrcOeSSy68Gn9WBofwPuw3e5CCsg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/core@3.23.9": + resolution: + { + integrity: sha512-1Vcut4LEL9HZsdpI0vFiRYIsaoPwZLjAxnVQDUMQK8beMS+EYPLDQCXtbzfxmM5GzSgjfe2Q9M7WaXwIMQllyQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/credential-provider-imds@4.2.11": + resolution: + { + integrity: sha512-lBXrS6ku0kTj3xLmsJW0WwqWbGQ6ueooYyp/1L9lkyT0M02C+DWwYwc5aTyXFbRaK38ojALxNixg+LxKSHZc0g==, + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-codec@4.2.11": + resolution: + { + integrity: sha512-Sf39Ml0iVX+ba/bgMPxaXWAAFmHqYLTmbjAPfLPLY8CrYkRDEqZdUsKC1OwVMCdJXfAt0v4j49GIJ8DoSYAe6w==, + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-browser@4.2.11": + resolution: + { + integrity: sha512-3rEpo3G6f/nRS7fQDsZmxw/ius6rnlIpz4UX6FlALEzz8JoSxFmdBt0SZnthis+km7sQo6q5/3e+UJcuQivoXA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-config-resolver@4.3.11": + resolution: + { + integrity: sha512-XeNIA8tcP/GDWnnKkO7qEm/bg0B/bP9lvIXZBXcGZwZ+VYM8h8k9wuDvUODtdQ2Wcp2RcBkPTCSMmaniVHrMlA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-node@4.2.11": + resolution: + { + integrity: sha512-fzbCh18rscBDTQSCrsp1fGcclLNF//nJyhjldsEl/5wCYmgpHblv5JSppQAyQI24lClsFT0wV06N1Porn0IsEw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-universal@4.2.11": + resolution: + { + integrity: sha512-MJ7HcI+jEkqoWT5vp+uoVaAjBrmxBtKhZTeynDRG/seEjJfqyg3SiqMMqyPnAMzmIfLaeJ/uiuSDP/l9AnMy/Q==, + } + engines: { node: ">=18.0.0" } + + "@smithy/fetch-http-handler@5.3.13": + resolution: + { + integrity: sha512-U2Hcfl2s3XaYjikN9cT4mPu8ybDbImV3baXR0PkVlC0TTx808bRP3FaPGAzPtB8OByI+JqJ1kyS+7GEgae7+qQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-blob-browser@4.2.12": + resolution: + { + integrity: sha512-1wQE33DsxkM/waftAhCH9VtJbUGyt1PJ9YRDpOu+q9FUi73LLFUZ2fD8A61g2mT1UY9k7b99+V1xZ41Rz4SHRQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-node@4.2.11": + resolution: + { + integrity: sha512-T+p1pNynRkydpdL015ruIoyPSRw9e/SQOWmSAMmmprfswMrd5Ow5igOWNVlvyVFZlxXqGmyH3NQwfwy8r5Jx0A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-stream-node@4.2.11": + resolution: + { + integrity: sha512-hQsTjwPCRY8w9GK07w1RqJi3e+myh0UaOWBBhZ1UMSDgofH/Q1fEYzU1teaX6HkpX/eWDdm7tAGR0jBPlz9QEQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/invalid-dependency@4.2.11": + resolution: + { + integrity: sha512-cGNMrgykRmddrNhYy1yBdrp5GwIgEkniS7k9O1VLB38yxQtlvrxpZtUVvo6T4cKpeZsriukBuuxfJcdZQc/f/g==, + } + engines: { node: ">=18.0.0" } + + "@smithy/is-array-buffer@2.2.0": + resolution: + { + integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/is-array-buffer@4.2.2": + resolution: + { + integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==, + } + engines: { node: ">=18.0.0" } + + "@smithy/md5-js@4.2.11": + resolution: + { + integrity: sha512-350X4kGIrty0Snx2OWv7rPM6p6vM7RzryvFs6B/56Cux3w3sChOb3bymo5oidXJlPcP9fIRxGUCk7GqpiSOtng==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-content-length@4.2.11": + resolution: + { + integrity: sha512-UvIfKYAKhCzr4p6jFevPlKhQwyQwlJ6IeKLDhmV1PlYfcW3RL4ROjNEDtSik4NYMi9kDkH7eSwyTP3vNJ/u/Dw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-endpoint@4.4.23": + resolution: + { + integrity: sha512-UEFIejZy54T1EJn2aWJ45voB7RP2T+IRzUqocIdM6GFFa5ClZncakYJfcYnoXt3UsQrZZ9ZRauGm77l9UCbBLw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-retry@4.4.40": + resolution: + { + integrity: sha512-YhEMakG1Ae57FajERdHNZ4ShOPIY7DsgV+ZoAxo/5BT0KIe+f6DDU2rtIymNNFIj22NJfeeI6LWIifrwM0f+rA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-serde@4.2.12": + resolution: + { + integrity: sha512-W9g1bOLui7Xn5FABRVS0o3rXL0gfN37d/8I/W7i0N7oxjx9QecUmXEMSUMADTODwdtka9cN43t5BI2CodLJpng==, + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-stack@4.2.11": + resolution: + { + integrity: sha512-s+eenEPW6RgliDk2IhjD2hWOxIx1NKrOHxEwNUaUXxYBxIyCcDfNULZ2Mu15E3kwcJWBedTET/kEASPV1A1Akg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-config-provider@4.3.11": + resolution: + { + integrity: sha512-xD17eE7kaLgBBGf5CZQ58hh2YmwK1Z0O8YhffwB/De2jsL0U3JklmhVYJ9Uf37OtUDLF2gsW40Xwwag9U869Gg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/node-http-handler@4.4.14": + resolution: + { + integrity: sha512-DamSqaU8nuk0xTJDrYnRzZndHwwRnyj/n/+RqGGCcBKB4qrQem0mSDiWdupaNWdwxzyMU91qxDmHOCazfhtO3A==, + } + engines: { node: ">=18.0.0" } + + "@smithy/property-provider@4.2.11": + resolution: + { + integrity: sha512-14T1V64o6/ndyrnl1ze1ZhyLzIeYNN47oF/QU6P5m82AEtyOkMJTb0gO1dPubYjyyKuPD6OSVMPDKe+zioOnCg==, + } + engines: { node: ">=18.0.0" } + + "@smithy/protocol-http@5.3.11": + resolution: + { + integrity: sha512-hI+barOVDJBkNt4y0L2mu3Ugc0w7+BpJ2CZuLwXtSltGAAwCb3IvnalGlbDV/UCS6a9ZuT3+exd1WxNdLb5IlQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-builder@4.2.11": + resolution: + { + integrity: sha512-7spdikrYiljpket6u0up2Ck2mxhy7dZ0+TDd+S53Dg2DHd6wg+YNJrTCHiLdgZmEXZKI7LJZcwL3721ZRDFiqA==, + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-parser@4.2.11": + resolution: + { + integrity: sha512-nE3IRNjDltvGcoThD2abTozI1dkSy8aX+a2N1Rs55en5UsdyyIXgGEmevUL3okZFoJC77JgRGe99xYohhsjivQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/service-error-classification@4.2.11": + resolution: + { + integrity: sha512-HkMFJZJUhzU3HvND1+Yw/kYWXp4RPDLBWLcK1n+Vqw8xn4y2YiBhdww8IxhkQjP/QlZun5bwm3vcHc8AqIU3zw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/shared-ini-file-loader@4.4.6": + resolution: + { + integrity: sha512-IB/M5I8G0EeXZTHsAxpx51tMQ5R719F3aq+fjEB6VtNcCHDc0ajFDIGDZw+FW9GxtEkgTduiPpjveJdA/CX7sw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/signature-v4@5.3.11": + resolution: + { + integrity: sha512-V1L6N9aKOBAN4wEHLyqjLBnAz13mtILU0SeDrjOaIZEeN6IFa6DxwRt1NNpOdmSpQUfkBj0qeD3m6P77uzMhgQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/smithy-client@4.12.3": + resolution: + { + integrity: sha512-7k4UxjSpHmPN2AxVhvIazRSzFQjWnud3sOsXcFStzagww17j1cFQYqTSiQ8xuYK3vKLR1Ni8FzuT3VlKr3xCNw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/types@4.13.0": + resolution: + { + integrity: sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==, + } + engines: { node: ">=18.0.0" } + + "@smithy/url-parser@4.2.11": + resolution: + { + integrity: sha512-oTAGGHo8ZYc5VZsBREzuf5lf2pAurJQsccMusVZ85wDkX66ojEc/XauiGjzCj50A61ObFTPe6d7Pyt6UBYaing==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-base64@4.3.2": + resolution: + { + integrity: sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-browser@4.2.2": + resolution: + { + integrity: sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-node@4.2.3": + resolution: + { + integrity: sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-buffer-from@2.2.0": + resolution: + { + integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==, + } + engines: { node: ">=14.0.0" } + + "@smithy/util-buffer-from@4.2.2": + resolution: + { + integrity: sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-config-provider@4.2.2": + resolution: + { + integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-browser@4.3.39": + resolution: + { + integrity: sha512-ui7/Ho/+VHqS7Km2wBw4/Ab4RktoiSshgcgpJzC4keFPs6tLJS4IQwbeahxQS3E/w98uq6E1mirCH/id9xIXeQ==, + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-node@4.2.42": resolution: { - integrity: sha512-POQ65+pnYOkZNdngWfMEt7r53bzWiKkVNbjpmCt1Zb3V6lxJNXSsjwRuTQ8P/kguxDC8LRkqaL3vvsFrce4dMQ==, + integrity: sha512-QDA84CWNe8Akpj15ofLO+1N3Rfg8qa2K5uX0y6HnOp4AnRYRgWrKx/xzbYNbVF9ZsyJUYOfcoaN3y93wA/QJ2A==, } - engines: { node: ">= 10" } - cpu: [arm64] - os: [linux] + engines: { node: ">=18.0.0" } - "@next/swc-linux-arm64-musl@16.1.4": + "@smithy/util-endpoints@3.3.2": resolution: { - integrity: sha512-3Wm0zGYVCs6qDFAiSSDL+Z+r46EdtCv/2l+UlIdMbAq9hPJBvGu/rZOeuvCaIUjbArkmXac8HnTyQPJFzFWA0Q==, + integrity: sha512-+4HFLpE5u29AbFlTdlKIT7jfOzZ8PDYZKTb3e+AgLz986OYwqTourQ5H+jg79/66DB69Un1+qKecLnkZdAsYcA==, } - engines: { node: ">= 10" } - cpu: [arm64] - os: [linux] + engines: { node: ">=18.0.0" } - "@next/swc-linux-x64-gnu@16.1.4": + "@smithy/util-hex-encoding@4.2.2": resolution: { - integrity: sha512-lWAYAezFinaJiD5Gv8HDidtsZdT3CDaCeqoPoJjeB57OqzvMajpIhlZFce5sCAH6VuX4mdkxCRqecCJFwfm2nQ==, + integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==, } - engines: { node: ">= 10" } - cpu: [x64] - os: [linux] + engines: { node: ">=18.0.0" } - "@next/swc-linux-x64-musl@16.1.4": + "@smithy/util-middleware@4.2.11": resolution: { - integrity: sha512-fHaIpT7x4gA6VQbdEpYUXRGyge/YbRrkG6DXM60XiBqDM2g2NcrsQaIuj375egnGFkJow4RHacgBOEsHfGbiUw==, + integrity: sha512-r3dtF9F+TpSZUxpOVVtPfk09Rlo4lT6ORBqEvX3IBT6SkQAdDSVKR5GcfmZbtl7WKhKnmb3wbDTQ6ibR2XHClw==, } - engines: { node: ">= 10" } - cpu: [x64] - os: [linux] + engines: { node: ">=18.0.0" } - "@next/swc-win32-arm64-msvc@16.1.4": + "@smithy/util-retry@4.2.11": resolution: { - integrity: sha512-MCrXxrTSE7jPN1NyXJr39E+aNFBrQZtO154LoCz7n99FuKqJDekgxipoodLNWdQP7/DZ5tKMc/efybx1l159hw==, + integrity: sha512-XSZULmL5x6aCTTii59wJqKsY1l3eMIAomRAccW7Tzh9r8s7T/7rdo03oektuH5jeYRlJMPcNP92EuRDvk9aXbw==, } - engines: { node: ">= 10" } - cpu: [arm64] - os: [win32] + engines: { node: ">=18.0.0" } - "@next/swc-win32-x64-msvc@16.1.4": + "@smithy/util-stream@4.5.17": resolution: { - integrity: sha512-JSVlm9MDhmTXw/sO2PE/MRj+G6XOSMZB+BcZ0a7d6KwVFZVpkHcb2okyoYFBaco6LeiL53BBklRlOrDDbOeE5w==, + integrity: sha512-793BYZ4h2JAQkNHcEnyFxDTcZbm9bVybD0UV/LEWmZ5bkTms7JqjfrLMi2Qy0E5WFcCzLwCAPgcvcvxoeALbAQ==, } - engines: { node: ">= 10" } - cpu: [x64] - os: [win32] + engines: { node: ">=18.0.0" } - "@nodelib/fs.scandir@2.1.5": + "@smithy/util-uri-escape@4.2.2": resolution: { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + integrity: sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==, } - engines: { node: ">= 8" } + engines: { node: ">=18.0.0" } - "@nodelib/fs.stat@2.0.5": + "@smithy/util-utf8@2.3.0": resolution: { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==, } - engines: { node: ">= 8" } + engines: { node: ">=14.0.0" } - "@nodelib/fs.walk@1.2.8": + "@smithy/util-utf8@4.2.2": resolution: { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + integrity: sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==, } - engines: { node: ">= 8" } + engines: { node: ">=18.0.0" } - "@nolyfill/is-core-module@1.0.39": + "@smithy/util-waiter@4.2.12": resolution: { - integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==, + integrity: sha512-ek5hyDrzS6mBFsNCEX8LpM+EWSLq6b9FdmPRlkpXXhiJE6aIZehKT9clC6+nFpZAA+i/Yg0xlaPeWGNbf5rzQA==, } - engines: { node: ">=12.4.0" } + engines: { node: ">=18.0.0" } - "@rtsao/scc@1.1.0": + "@smithy/uuid@1.1.2": resolution: { - integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==, + integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==, } + engines: { node: ">=18.0.0" } "@so-ric/colorspace@1.1.6": resolution: @@ -2063,6 +2740,12 @@ packages: } engines: { node: ">=18" } + bowser@2.14.1: + resolution: + { + integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==, + } + brace-expansion@1.1.12: resolution: { @@ -2851,6 +3534,19 @@ packages: integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, } + fast-xml-builder@1.1.0: + resolution: + { + integrity: sha512-7mtITW/we2/wTUZqMyBOR2F8xP4CRxMiSEcQxPIqdRWdO2L/HZSOlzoNyghmyDwNB8BDxePooV1ZTJpkOUhdRg==, + } + + fast-xml-parser@5.4.1: + resolution: + { + integrity: sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==, + } + hasBin: true + fastq@1.20.1: resolution: { @@ -4262,6 +4958,13 @@ packages: } engines: { node: ">=8" } + path-expression-matcher@1.1.2: + resolution: + { + integrity: sha512-LXWqJmcpp2BKOEmgt4CyuESFmBfPuhJlAHKJsFzuJU6CxErWk75BrO+Ni77M9OxHN6dCYKM4vj+21Z6cOL96YQ==, + } + engines: { node: ">=14.0.0" } + path-key@3.1.1: resolution: { @@ -4886,6 +5589,12 @@ packages: } engines: { node: ">=8" } + strnum@2.2.0: + resolution: + { + integrity: sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==, + } + styled-jsx@5.1.6: resolution: { @@ -5268,87 +5977,548 @@ packages: integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, } - ws@8.18.3: - resolution: - { - integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==, - } - engines: { node: ">=10.0.0" } - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@8.18.3: + resolution: + { + integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==, + } + engines: { node: ">=10.0.0" } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } + + yaml@2.8.2: + resolution: + { + integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==, + } + engines: { node: ">= 14.6" } + hasBin: true + + yn@3.1.1: + resolution: + { + integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, + } + engines: { node: ">=6" } + + yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } + + zod-validation-error@4.0.2: + resolution: + { + integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==, + } + engines: { node: ">=18.0.0" } + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.3.5: + resolution: + { + integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==, + } + + zustand@5.0.11: + resolution: + { + integrity: sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==, + } + engines: { node: ">=12.20.0" } + peerDependencies: + "@types/react": ">=18.0.0" + immer: ">=9.0.6" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + +snapshots: + "@alloc/quick-lru@5.2.0": {} + + "@aws-crypto/crc32@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.973.5 + tslib: 2.8.1 + + "@aws-crypto/crc32c@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.973.5 + tslib: 2.8.1 + + "@aws-crypto/sha1-browser@5.2.0": + dependencies: + "@aws-crypto/supports-web-crypto": 5.2.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-locate-window": 3.965.5 + "@smithy/util-utf8": 2.3.0 + tslib: 2.8.1 + + "@aws-crypto/sha256-browser@5.2.0": + dependencies: + "@aws-crypto/sha256-js": 5.2.0 + "@aws-crypto/supports-web-crypto": 5.2.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-locate-window": 3.965.5 + "@smithy/util-utf8": 2.3.0 + tslib: 2.8.1 + + "@aws-crypto/sha256-js@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.973.5 + tslib: 2.8.1 + + "@aws-crypto/supports-web-crypto@5.2.0": + dependencies: + tslib: 2.8.1 + + "@aws-crypto/util@5.2.0": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/util-utf8": 2.3.0 + tslib: 2.8.1 + + "@aws-sdk/client-s3@3.1006.0": + dependencies: + "@aws-crypto/sha1-browser": 5.2.0 + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.973.19 + "@aws-sdk/credential-provider-node": 3.972.19 + "@aws-sdk/middleware-bucket-endpoint": 3.972.7 + "@aws-sdk/middleware-expect-continue": 3.972.7 + "@aws-sdk/middleware-flexible-checksums": 3.973.5 + "@aws-sdk/middleware-host-header": 3.972.7 + "@aws-sdk/middleware-location-constraint": 3.972.7 + "@aws-sdk/middleware-logger": 3.972.7 + "@aws-sdk/middleware-recursion-detection": 3.972.7 + "@aws-sdk/middleware-sdk-s3": 3.972.19 + "@aws-sdk/middleware-ssec": 3.972.7 + "@aws-sdk/middleware-user-agent": 3.972.20 + "@aws-sdk/region-config-resolver": 3.972.7 + "@aws-sdk/signature-v4-multi-region": 3.996.7 + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-endpoints": 3.996.4 + "@aws-sdk/util-user-agent-browser": 3.972.7 + "@aws-sdk/util-user-agent-node": 3.973.5 + "@smithy/config-resolver": 4.4.10 + "@smithy/core": 3.23.9 + "@smithy/eventstream-serde-browser": 4.2.11 + "@smithy/eventstream-serde-config-resolver": 4.3.11 + "@smithy/eventstream-serde-node": 4.2.11 + "@smithy/fetch-http-handler": 5.3.13 + "@smithy/hash-blob-browser": 4.2.12 + "@smithy/hash-node": 4.2.11 + "@smithy/hash-stream-node": 4.2.11 + "@smithy/invalid-dependency": 4.2.11 + "@smithy/md5-js": 4.2.11 + "@smithy/middleware-content-length": 4.2.11 + "@smithy/middleware-endpoint": 4.4.23 + "@smithy/middleware-retry": 4.4.40 + "@smithy/middleware-serde": 4.2.12 + "@smithy/middleware-stack": 4.2.11 + "@smithy/node-config-provider": 4.3.11 + "@smithy/node-http-handler": 4.4.14 + "@smithy/protocol-http": 5.3.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + "@smithy/url-parser": 4.2.11 + "@smithy/util-base64": 4.3.2 + "@smithy/util-body-length-browser": 4.2.2 + "@smithy/util-body-length-node": 4.2.3 + "@smithy/util-defaults-mode-browser": 4.3.39 + "@smithy/util-defaults-mode-node": 4.2.42 + "@smithy/util-endpoints": 3.3.2 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-retry": 4.2.11 + "@smithy/util-stream": 4.5.17 + "@smithy/util-utf8": 4.2.2 + "@smithy/util-waiter": 4.2.12 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/core@3.973.19": + dependencies: + "@aws-sdk/types": 3.973.5 + "@aws-sdk/xml-builder": 3.972.10 + "@smithy/core": 3.23.9 + "@smithy/node-config-provider": 4.3.11 + "@smithy/property-provider": 4.2.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/signature-v4": 5.3.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + "@smithy/util-base64": 4.3.2 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/crc64-nvme@3.972.4": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-env@3.972.17": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/types": 3.973.5 + "@smithy/property-provider": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-http@3.972.19": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/types": 3.973.5 + "@smithy/fetch-http-handler": 5.3.13 + "@smithy/node-http-handler": 4.4.14 + "@smithy/property-provider": 4.2.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + "@smithy/util-stream": 4.5.17 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-ini@3.972.18": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/credential-provider-env": 3.972.17 + "@aws-sdk/credential-provider-http": 3.972.19 + "@aws-sdk/credential-provider-login": 3.972.18 + "@aws-sdk/credential-provider-process": 3.972.17 + "@aws-sdk/credential-provider-sso": 3.972.18 + "@aws-sdk/credential-provider-web-identity": 3.972.18 + "@aws-sdk/nested-clients": 3.996.8 + "@aws-sdk/types": 3.973.5 + "@smithy/credential-provider-imds": 4.2.11 + "@smithy/property-provider": 4.2.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-login@3.972.18": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/nested-clients": 3.996.8 + "@aws-sdk/types": 3.973.5 + "@smithy/property-provider": 4.2.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-node@3.972.19": + dependencies: + "@aws-sdk/credential-provider-env": 3.972.17 + "@aws-sdk/credential-provider-http": 3.972.19 + "@aws-sdk/credential-provider-ini": 3.972.18 + "@aws-sdk/credential-provider-process": 3.972.17 + "@aws-sdk/credential-provider-sso": 3.972.18 + "@aws-sdk/credential-provider-web-identity": 3.972.18 + "@aws-sdk/types": 3.973.5 + "@smithy/credential-provider-imds": 4.2.11 + "@smithy/property-provider": 4.2.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-process@3.972.17": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/types": 3.973.5 + "@smithy/property-provider": 4.2.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-sso@3.972.18": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/nested-clients": 3.996.8 + "@aws-sdk/token-providers": 3.1005.0 + "@aws-sdk/types": 3.973.5 + "@smithy/property-provider": 4.2.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-web-identity@3.972.18": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/nested-clients": 3.996.8 + "@aws-sdk/types": 3.973.5 + "@smithy/property-provider": 4.2.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/middleware-bucket-endpoint@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-arn-parser": 3.972.3 + "@smithy/node-config-provider": 4.3.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + "@smithy/util-config-provider": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/middleware-expect-continue@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-flexible-checksums@3.973.5": + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@aws-crypto/crc32c": 5.2.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/core": 3.973.19 + "@aws-sdk/crc64-nvme": 3.972.4 + "@aws-sdk/types": 3.973.5 + "@smithy/is-array-buffer": 4.2.2 + "@smithy/node-config-provider": 4.3.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-stream": 4.5.17 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/middleware-host-header@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-location-constraint@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-logger@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-recursion-detection@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@aws/lambda-invoke-store": 0.2.3 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-sdk-s3@3.972.19": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-arn-parser": 3.972.3 + "@smithy/core": 3.23.9 + "@smithy/node-config-provider": 4.3.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/signature-v4": 5.3.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + "@smithy/util-config-provider": 4.2.2 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-stream": 4.5.17 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/middleware-ssec@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/middleware-user-agent@3.972.20": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-endpoints": 3.996.4 + "@smithy/core": 3.23.9 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + "@smithy/util-retry": 4.2.11 + tslib: 2.8.1 + + "@aws-sdk/nested-clients@3.996.8": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.973.19 + "@aws-sdk/middleware-host-header": 3.972.7 + "@aws-sdk/middleware-logger": 3.972.7 + "@aws-sdk/middleware-recursion-detection": 3.972.7 + "@aws-sdk/middleware-user-agent": 3.972.20 + "@aws-sdk/region-config-resolver": 3.972.7 + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-endpoints": 3.996.4 + "@aws-sdk/util-user-agent-browser": 3.972.7 + "@aws-sdk/util-user-agent-node": 3.973.5 + "@smithy/config-resolver": 4.4.10 + "@smithy/core": 3.23.9 + "@smithy/fetch-http-handler": 5.3.13 + "@smithy/hash-node": 4.2.11 + "@smithy/invalid-dependency": 4.2.11 + "@smithy/middleware-content-length": 4.2.11 + "@smithy/middleware-endpoint": 4.4.23 + "@smithy/middleware-retry": 4.4.40 + "@smithy/middleware-serde": 4.2.12 + "@smithy/middleware-stack": 4.2.11 + "@smithy/node-config-provider": 4.3.11 + "@smithy/node-http-handler": 4.4.14 + "@smithy/protocol-http": 5.3.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + "@smithy/url-parser": 4.2.11 + "@smithy/util-base64": 4.3.2 + "@smithy/util-body-length-browser": 4.2.2 + "@smithy/util-body-length-node": 4.2.3 + "@smithy/util-defaults-mode-browser": 4.3.39 + "@smithy/util-defaults-mode-node": 4.2.42 + "@smithy/util-endpoints": 3.3.2 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-retry": 4.2.11 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/region-config-resolver@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/config-resolver": 4.4.10 + "@smithy/node-config-provider": 4.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/s3-request-presigner@3.1006.0": + dependencies: + "@aws-sdk/signature-v4-multi-region": 3.996.7 + "@aws-sdk/types": 3.973.5 + "@aws-sdk/util-format-url": 3.972.7 + "@smithy/middleware-endpoint": 4.4.23 + "@smithy/protocol-http": 5.3.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/signature-v4-multi-region@3.996.7": + dependencies: + "@aws-sdk/middleware-sdk-s3": 3.972.19 + "@aws-sdk/types": 3.973.5 + "@smithy/protocol-http": 5.3.11 + "@smithy/signature-v4": 5.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@aws-sdk/token-providers@3.1005.0": + dependencies: + "@aws-sdk/core": 3.973.19 + "@aws-sdk/nested-clients": 3.996.8 + "@aws-sdk/types": 3.973.5 + "@smithy/property-provider": 4.2.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/types@3.973.5": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 - yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + "@aws-sdk/util-arn-parser@3.972.3": + dependencies: + tslib: 2.8.1 - yaml@2.8.2: - resolution: - { - integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==, - } - engines: { node: ">= 14.6" } - hasBin: true + "@aws-sdk/util-endpoints@3.996.4": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/types": 4.13.0 + "@smithy/url-parser": 4.2.11 + "@smithy/util-endpoints": 3.3.2 + tslib: 2.8.1 - yn@3.1.1: - resolution: - { - integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, - } - engines: { node: ">=6" } + "@aws-sdk/util-format-url@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/querystring-builder": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 - yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: ">=10" } + "@aws-sdk/util-locate-window@3.965.5": + dependencies: + tslib: 2.8.1 - zod-validation-error@4.0.2: - resolution: - { - integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==, - } - engines: { node: ">=18.0.0" } - peerDependencies: - zod: ^3.25.0 || ^4.0.0 + "@aws-sdk/util-user-agent-browser@3.972.7": + dependencies: + "@aws-sdk/types": 3.973.5 + "@smithy/types": 4.13.0 + bowser: 2.14.1 + tslib: 2.8.1 - zod@4.3.5: - resolution: - { - integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==, - } + "@aws-sdk/util-user-agent-node@3.973.5": + dependencies: + "@aws-sdk/middleware-user-agent": 3.972.20 + "@aws-sdk/types": 3.973.5 + "@smithy/node-config-provider": 4.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 - zustand@5.0.11: - resolution: - { - integrity: sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==, - } - engines: { node: ">=12.20.0" } - peerDependencies: - "@types/react": ">=18.0.0" - immer: ">=9.0.6" - react: ">=18.0.0" - use-sync-external-store: ">=1.2.0" - peerDependenciesMeta: - "@types/react": - optional: true - immer: - optional: true - react: - optional: true - use-sync-external-store: - optional: true + "@aws-sdk/xml-builder@3.972.10": + dependencies: + "@smithy/types": 4.13.0 + fast-xml-parser: 5.4.1 + tslib: 2.8.1 -snapshots: - "@alloc/quick-lru@5.2.0": {} + "@aws/lambda-invoke-store@0.2.3": {} "@babel/code-frame@7.28.6": dependencies: @@ -5793,6 +6963,344 @@ snapshots: "@rtsao/scc@1.1.0": {} + "@smithy/abort-controller@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/chunked-blob-reader-native@4.2.3": + dependencies: + "@smithy/util-base64": 4.3.2 + tslib: 2.8.1 + + "@smithy/chunked-blob-reader@5.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/config-resolver@4.4.10": + dependencies: + "@smithy/node-config-provider": 4.3.11 + "@smithy/types": 4.13.0 + "@smithy/util-config-provider": 4.2.2 + "@smithy/util-endpoints": 3.3.2 + "@smithy/util-middleware": 4.2.11 + tslib: 2.8.1 + + "@smithy/core@3.23.9": + dependencies: + "@smithy/middleware-serde": 4.2.12 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + "@smithy/util-base64": 4.3.2 + "@smithy/util-body-length-browser": 4.2.2 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-stream": 4.5.17 + "@smithy/util-utf8": 4.2.2 + "@smithy/uuid": 1.1.2 + tslib: 2.8.1 + + "@smithy/credential-provider-imds@4.2.11": + dependencies: + "@smithy/node-config-provider": 4.3.11 + "@smithy/property-provider": 4.2.11 + "@smithy/types": 4.13.0 + "@smithy/url-parser": 4.2.11 + tslib: 2.8.1 + + "@smithy/eventstream-codec@4.2.11": + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@smithy/types": 4.13.0 + "@smithy/util-hex-encoding": 4.2.2 + tslib: 2.8.1 + + "@smithy/eventstream-serde-browser@4.2.11": + dependencies: + "@smithy/eventstream-serde-universal": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/eventstream-serde-config-resolver@4.3.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/eventstream-serde-node@4.2.11": + dependencies: + "@smithy/eventstream-serde-universal": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/eventstream-serde-universal@4.2.11": + dependencies: + "@smithy/eventstream-codec": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/fetch-http-handler@5.3.13": + dependencies: + "@smithy/protocol-http": 5.3.11 + "@smithy/querystring-builder": 4.2.11 + "@smithy/types": 4.13.0 + "@smithy/util-base64": 4.3.2 + tslib: 2.8.1 + + "@smithy/hash-blob-browser@4.2.12": + dependencies: + "@smithy/chunked-blob-reader": 5.2.2 + "@smithy/chunked-blob-reader-native": 4.2.3 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/hash-node@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + "@smithy/util-buffer-from": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/hash-stream-node@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/invalid-dependency@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/is-array-buffer@2.2.0": + dependencies: + tslib: 2.8.1 + + "@smithy/is-array-buffer@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/md5-js@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/middleware-content-length@4.2.11": + dependencies: + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/middleware-endpoint@4.4.23": + dependencies: + "@smithy/core": 3.23.9 + "@smithy/middleware-serde": 4.2.12 + "@smithy/node-config-provider": 4.3.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + "@smithy/url-parser": 4.2.11 + "@smithy/util-middleware": 4.2.11 + tslib: 2.8.1 + + "@smithy/middleware-retry@4.4.40": + dependencies: + "@smithy/node-config-provider": 4.3.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/service-error-classification": 4.2.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-retry": 4.2.11 + "@smithy/uuid": 1.1.2 + tslib: 2.8.1 + + "@smithy/middleware-serde@4.2.12": + dependencies: + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/middleware-stack@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/node-config-provider@4.3.11": + dependencies: + "@smithy/property-provider": 4.2.11 + "@smithy/shared-ini-file-loader": 4.4.6 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/node-http-handler@4.4.14": + dependencies: + "@smithy/abort-controller": 4.2.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/querystring-builder": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/property-provider@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/protocol-http@5.3.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/querystring-builder@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + "@smithy/util-uri-escape": 4.2.2 + tslib: 2.8.1 + + "@smithy/querystring-parser@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/service-error-classification@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + + "@smithy/shared-ini-file-loader@4.4.6": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/signature-v4@5.3.11": + dependencies: + "@smithy/is-array-buffer": 4.2.2 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + "@smithy/util-hex-encoding": 4.2.2 + "@smithy/util-middleware": 4.2.11 + "@smithy/util-uri-escape": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/smithy-client@4.12.3": + dependencies: + "@smithy/core": 3.23.9 + "@smithy/middleware-endpoint": 4.4.23 + "@smithy/middleware-stack": 4.2.11 + "@smithy/protocol-http": 5.3.11 + "@smithy/types": 4.13.0 + "@smithy/util-stream": 4.5.17 + tslib: 2.8.1 + + "@smithy/types@4.13.0": + dependencies: + tslib: 2.8.1 + + "@smithy/url-parser@4.2.11": + dependencies: + "@smithy/querystring-parser": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/util-base64@4.3.2": + dependencies: + "@smithy/util-buffer-from": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-body-length-browser@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/util-body-length-node@4.2.3": + dependencies: + tslib: 2.8.1 + + "@smithy/util-buffer-from@2.2.0": + dependencies: + "@smithy/is-array-buffer": 2.2.0 + tslib: 2.8.1 + + "@smithy/util-buffer-from@4.2.2": + dependencies: + "@smithy/is-array-buffer": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-config-provider@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/util-defaults-mode-browser@4.3.39": + dependencies: + "@smithy/property-provider": 4.2.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/util-defaults-mode-node@4.2.42": + dependencies: + "@smithy/config-resolver": 4.4.10 + "@smithy/credential-provider-imds": 4.2.11 + "@smithy/node-config-provider": 4.3.11 + "@smithy/property-provider": 4.2.11 + "@smithy/smithy-client": 4.12.3 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/util-endpoints@3.3.2": + dependencies: + "@smithy/node-config-provider": 4.3.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/util-hex-encoding@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/util-middleware@4.2.11": + dependencies: + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/util-retry@4.2.11": + dependencies: + "@smithy/service-error-classification": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/util-stream@4.5.17": + dependencies: + "@smithy/fetch-http-handler": 5.3.13 + "@smithy/node-http-handler": 4.4.14 + "@smithy/types": 4.13.0 + "@smithy/util-base64": 4.3.2 + "@smithy/util-buffer-from": 4.2.2 + "@smithy/util-hex-encoding": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-uri-escape@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/util-utf8@2.3.0": + dependencies: + "@smithy/util-buffer-from": 2.2.0 + tslib: 2.8.1 + + "@smithy/util-utf8@4.2.2": + dependencies: + "@smithy/util-buffer-from": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-waiter@4.2.12": + dependencies: + "@smithy/abort-controller": 4.2.11 + "@smithy/types": 4.13.0 + tslib: 2.8.1 + + "@smithy/uuid@1.1.2": + dependencies: + tslib: 2.8.1 + "@so-ric/colorspace@1.1.6": dependencies: color: 5.0.3 @@ -6402,6 +7910,8 @@ snapshots: transitivePeerDependencies: - supports-color + bowser@2.14.1: {} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -7052,6 +8562,15 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-xml-builder@1.1.0: + dependencies: + path-expression-matcher: 1.1.2 + + fast-xml-parser@5.4.1: + dependencies: + fast-xml-builder: 1.1.0 + strnum: 2.2.0 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -7844,6 +9363,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.1.2: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -8285,6 +9806,8 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.2.0: {} + styled-jsx@5.1.6(@babel/core@7.28.6)(react@19.2.3): dependencies: client-only: 0.0.1