From ec0e3cadb00b55f6fa7025095264155993ccd320 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 19 Nov 2024 21:37:47 +0000 Subject: [PATCH 01/55] This weeks newsletter (#1218) --- .../page.mdx | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 app/(app)/letters/not-getting-interviews-let-us-help/page.mdx diff --git a/app/(app)/letters/not-getting-interviews-let-us-help/page.mdx b/app/(app)/letters/not-getting-interviews-let-us-help/page.mdx new file mode 100644 index 00000000..89b376b0 --- /dev/null +++ b/app/(app)/letters/not-getting-interviews-let-us-help/page.mdx @@ -0,0 +1,85 @@ +Tue, November 19th, 2024 • Niall Maher + +# 🖥️ Not Getting Interviews? Let us help! + More Useful Articles + +Here's something I've noticed lately while talking to both hiring managers and job seekers: if you're not getting interview responses, it's likely your CV needs work - not your skills. I'm seeing developers with similar experience levels getting vastly different response rates. The difference? How they present their experience. + +For example, instead of:\ +"Built features and fixed bugs for the company website" + +Try:\ +"Led development of the company's checkout process, reducing cart abandonment by 15%" + +It's the same experience, but one shows your actual impact. If you're struggling to get responses, don't get discouraged - your skills aren't the issue. The market is tough, but developers are still getting hired daily. The key is presenting your experience effectively. + +Speaking of which - we've got a great community of developers in the Codú Discord who regularly help review CVs and provide constructive feedback. Anyone who signs up on [www.codu.co](http://www.codu.co) gets a free invite. Drop your CV in the `#career-advice` channel. Sometimes, a fresh pair of eyes is all you need to make your experience shine! + +## 📚 This Week's Picks + +**[Creating QR Codes in React Applications](https://www.codu.co/articles/creating-qr-codes-in-react-applications-el9ri-tn)** (2 min)\ +Do you need QR codes in your app? The `qrcode.react` library is probably the easiest way to add them. + +**[7 AI Open Source Libraries To Build RAG, Agents & AI Search](https://dev.to/vectorpodcast/7-ai-open-source-libraries-to-build-rag-agents-ai-search-27bm)** (5 min)\ +RAG systems have been very popular recently. Here are some great tools to make yours even better. + +**[TypeSpec](https://typespec.io/)** (tool)\ +Describe your data and generate schemas, API specifications, client/server code, docs, etc while not having to keep YAML up to date. + +**[Melt UI](https://www.melt-ui.com/)** (tool)\ +An open-source Svelte library for building high-quality, accessible design systems and web apps. + +**[Syntax Holiday Gift Guide](https://www.youtube.com/watch?v=7uh2ChvlbQg)** (video)\ +Buying for nerds is hard. Thankfully, Syntax created this great episode on a holiday gift guide so you can pick up something fun this year. + +**[How LinkedIn uses Event Driven Architectures to Scale](https://blog.quastor.org/p/how-linkedin-uses-event-driven-architectures-to-scale)** (5 min)\ +An introduction to EDAs and the Actor Model. Plus, how to ship projects at big tech companies, how Coinbase uses ML to predict traffic patterns, and more. + +**[Expo SDK 52](https://expo.dev/changelog/2024/11-12-sdk-52)** (24 min)\ +Read the detailed post about the new Expo v52 release. It is clear that a huge amount of work went into this one. + +## 📖 Book of the Week + +**[Traction: How Any Startup Can Achieve Explosive Customer Growth](https://amzn.to/40W9lPE)** + +A must-read for developers looking to understand how to grow their products beyond just building features. The book breaks down 19 marketing channels and introduces the "Bullseye Framework" for systematically finding which channels work best for your startup. + +What makes it particularly valuable for developers is: + +1. Its data-driven, systematic approach to marketing (similar to how we approach technical problems) + +2. Clear, actionable frameworks for testing different growth channels + +3. Real-world examples from successful startups + +4. Focus on measurable results rather than vague marketing concepts + +The book helps bridge the gap between technical expertise and customer acquisition - something many developers struggle with. It's especially useful if you're working on a side project or startup and need to think beyond the code. + +The most valuable takeaway is that building a great product is only half the battle - you need a deliberate strategy to get it in front of users. This book gives you the tools to do that methodically. + +## 🛠️ Something Cool + +**[Wirebound Pocket Notebook (the one I use)](https://amzn.to/4hYZLBq)** + +I usually have a notebook in my pocket. Recently, I was advised to grab one so that you can tear the pages out easily and remove tasks as you go through your notes. + +It's been a great productivity hack. I work my way through the pages, tear them out, and throw them away when I'm done. + +If my notebook doesn't get smaller each day, I know I'm not focusing on the important things. + +## 🔗 Quick Links + +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +**One more thing:** I'm traveling next week, so I might not be connected to the internet long enough to get out a newsletter.\ +Behave while I'm away... Or don't; I prefer chaos, to be honest. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 2a7e27f7eee33b710a257da16641c133013a250d Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 3 Dec 2024 17:06:06 +0000 Subject: [PATCH 02/55] This weeks newsletter (#1225) --- app/(app)/letters/peepee-poopoo/page.mdx | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 app/(app)/letters/peepee-poopoo/page.mdx diff --git a/app/(app)/letters/peepee-poopoo/page.mdx b/app/(app)/letters/peepee-poopoo/page.mdx new file mode 100644 index 00000000..6df0b005 --- /dev/null +++ b/app/(app)/letters/peepee-poopoo/page.mdx @@ -0,0 +1,73 @@ +Tue, December 3rd, 2024 • Niall Maher + +# PeePee PooPoo + +I didn't forget you all last week... I was on holiday! + +It's the longest break from my laptop in over a decade. I made an executive decision to ignore it, and I hope that most of you will forgive me. + +**And for the subject line:** I'm working off a couple of hours of sleep since I got in this morning, and I'm feeling silly. + +Now, here are all of this week's picks. ⬇ + +## 📚 This Week's Picks + +**[Next-level frosted glass with `backdrop-filter`](https://ishadeed.com/article/css-backdrop-filter)** (10 min)\ +In this post, you'll learn how to make the slickest frosted glass ever ✨. You'll also learn quite a bit about CSS filters along the way! + +**[Tailwind CSS v4.0 Beta 1](https://tailwindcss.com/blog/tailwindcss-v4-beta)** (release)\ +See what's new in the latest Tailwind release and what's coming in Tailwind 4.0. + +**[An Introduction to HTTP Caching](https://www.youtube.com/watch?v=HiBDZgTNpXY)** (video)\ +Caching is the backbone of fast, responsive apps, but when done wrong, things get BAD. Learn all about caching so you can do it right. + +**[The State of Frontend](https://www.youtube.com/watch?v=TZJLhgqj6GY)** (video)\ +Scott and Wes dive into the State of Frontend 2024 Survey, breaking down the latest trends, tools, and frameworks shaping the developer ecosystem. + +**[What is AI Engineering?](https://www.latent.space/p/ai-eng)** (11 min)\ +And what you need to break into the role. + +**[React Data Fetching Patterns](https://www.patents.dev/blog/2024/01/react-data-fetching-patterns)** (5 min)\ +Dive into common data fetching patterns in React.js to pick the best one for your needs. Focusing mainly on fetching the inside of your components. + +## 📖 Book of the Week + +**[Product-Led Growth: How to Build a Product That Sells Itself](https://amzn.to/3vQZ8Xk)** + +If you're tired of building features that users ignore, this book is your gateway to creating self-selling products. Bush breaks down how companies like Slack and Dropbox grew exponentially by making their products their primary growth engine. + +What makes it great for developers: + +- Practical frameworks for instrumenting user onboarding and measuring product engagement +- Clear guidance on building viral loops and network effects into your product architecture +- Real examples of feature prioritization that drives organic user acquisition +- Technical insights into implementing freemium models effectively + +The book is especially valuable if you're working on SaaS products or considering a move into product management. Bush's emphasis on data-driven decision-making and user behavior analysis aligns perfectly with a developer's analytical mindset. + +Learn how to transform your technical features into clear user value, ensuring adoption happens naturally rather than through aggressive sales tactics. + +## 🛠️ Something Cool + +**[Taco Cat Goat Cheese Pizza](https://amzn.to/3TNzR8v)** + +Nope, not another random subject line. It's a game I played a good bit while I was away. +It's a simple card game but great fun. + +Players take turns saying "taco," "cat," "goat," "cheese," or "pizza" while simultaneously flipping cards. When the word matches the card, everyone races to slap the pile. Last hand down draws cards. It's quick with 10-15 minute rounds. + +My stomach hurt from laughter playing this one, so it might be the perfect thing to pick up for the holidays. + +## 🔗 Quick Links + +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 97369d0f800832cc017447209ad1f0afc7f65ac6 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Wed, 4 Dec 2024 12:17:13 +0000 Subject: [PATCH 03/55] Add bing auth xml --- public/BingSiteAuth.xml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 public/BingSiteAuth.xml diff --git a/public/BingSiteAuth.xml b/public/BingSiteAuth.xml new file mode 100644 index 00000000..914a911c --- /dev/null +++ b/public/BingSiteAuth.xml @@ -0,0 +1,4 @@ + + + B9B28C6BDED698D74C50526F4ADE328F + \ No newline at end of file From 79b2e6de507f0816046a9db7780075163ae11740 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 10 Dec 2024 16:02:41 +0000 Subject: [PATCH 04/55] Add this weeks newsletter (#1226) --- .../murder-mystery-for-developers/page.mdx | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 app/(app)/letters/murder-mystery-for-developers/page.mdx diff --git a/app/(app)/letters/murder-mystery-for-developers/page.mdx b/app/(app)/letters/murder-mystery-for-developers/page.mdx new file mode 100644 index 00000000..ea5ddebe --- /dev/null +++ b/app/(app)/letters/murder-mystery-for-developers/page.mdx @@ -0,0 +1,77 @@ +Tue, December 10, 2024 • Niall Maher + +# 🔎 Murder Mystery for Developers + Career Advice + +It's the end of the year season, and a lot of people are doing their end-of-year reviews. + +Remember that fantastic bug fix from six months ago? + +The one that saved the company thousands? + +No??? + +That's the problem. + +Every developer has been there -- it's performance review season, or you are updating a CV, and you're struggling to remember all the amazing work you've done over the past months/years. Projects blend, achievements become fuzzy, and those small but significant wins disappear from memory. + +This is why I started keeping a brag document years ago, and it's transformed how I approach my career development. + +I wrote [this article](https://www.codu.co/articles/building-a-brag-document-rllnfdad) to outline what a "brag document" is and how to get started. + +## 📚 This Week's Picks + +**[Creating An Effective Multistep Form For Better User Experience](https://www.smashingmagazine.com/2024/12/creating-effective-multistep-form-better-user-experience)** (13 min)\ +What we don't often discuss is designing good-form experiences beyond validation. That's what Jima Victor discusses in this article + +**[Using Transformers.js for AI in the Browser](https://www.raymondcamden.com/2024/12/03/using-transformersjs-for-ai-in-the-browser)** (5 min)\ +A practical guide to implementing browser-based AI using Transformers.js, demonstrating sentiment analysis and image object detection with real-world examples and code. + +**[CSS Wrapped 2024](https://chrome.dev/css-wrapped-2024)** (lots of examples in here)\ +The Google Chrome team made this fantastic article/mini-site showcasing all the great features introduced into CSS this year. + +**[React v19](https://react.dev/blog/2024/12/05/react-19)** (release)\ +And what you need to break into the role. + +**[Nine pillars of great Node apps](https://changelog.com/jsparty/347)** (podcast)\ +This podcast lays out nine principles for doing Node.js right in enterprise environments. + +**[Cursify](https://cursify.vercel.app/)** (library)\ +I can't ever see myself using some of these animated cursors, but I do love seeing people's creativity. + +**[Deno v. Oracle: Canceling the JavaScript Trademark](https://deno.com/blog/deno-v-oracle)** (3 min)\ +Did you know Oracle formally owns the 'JavaScript' trademark? Could that change because of Deno? On November 22, 2024, Deno petitioned officially the USPTO to cancel Oracle's trademark for "JavaScript." + +**[Why Open Source UI Sucks](https://www.darrenhorrocks.co.uk/why-open-source-ui-design-sucks/)** (4 min)\ +Explores why open-source software tends to have less polished interfaces than commercial applications, highlighting some key factors. + +## 📖 Book of the Week + +**[The Product-Led Playbook](https://amzn.to/4is4QTc)** + +Last week, I suggested [Product-Led Growth: How to Build a Product That Sells Itself](http://amzn.to/3Vip2gg). Since then, I have found out the second book in the series, "The Product-Led Playbook," is a thing. The playbook focuses on the how rather than the why outlined in the previous book. I read this in a few days because I found it so interesting and useful. + +This is one of the most practical books I have for anyone hoping to launch a SaaS product or improve their thinking about product development for self-service customers. + +## 🛠️ Something Cool + +**[SQL Murder Mystery](https://mystery.knightlab.com/)** + +Yup, you read that right. + +Use your SQL skills to solve a murder mystery. + +It's quite possibly the nerdiest way to test your SQL skills. + +## 🔗 Quick Links + +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 30e84643b0d6d46fd90f618c4777df059df39877 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 17 Dec 2024 13:54:51 +0000 Subject: [PATCH 05/55] This weeks newsletter (#1228) --- .../end-of-year-release-notes/page.mdx | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 app/(app)/letters/end-of-year-release-notes/page.mdx diff --git a/app/(app)/letters/end-of-year-release-notes/page.mdx b/app/(app)/letters/end-of-year-release-notes/page.mdx new file mode 100644 index 00000000..60695840 --- /dev/null +++ b/app/(app)/letters/end-of-year-release-notes/page.mdx @@ -0,0 +1,85 @@ +Tue, December 17, 2024 • Niall Maher + +# ⭐️ git commit -m 'End of Year Release Notes' + +The end of the year is here, and like any good development cycle, it's time for a well-deserved break. We'll pause our weekly newsletters until January 7th to rest, refactor our thoughts, and come back with fresh perspectives for 2025. + +But before we git checkout to holiday mode, **I want to take a moment to thank YOU**. Yes, you reading this right now. You've made 2024 our most impactful year yet at Codú. Together, we've built something truly special: + +✨ 17 in-person events brought together over 2,000 developers\ +✨ Supported emerging talent through 40+ mentorship sessions\ +✨ Watched our knowledge base grow to 900+ articles\ +✨ Celebrated reaching 20,000 monthly readers\ +✨ Had our biggest Hacktoberfest celebration ever\ +✨ Delivered nearly 50 weekly newsletters straight to your inbox\ +✨ Helped countless developers level up through CV reviews & 1-on-1 support + +These aren't just numbers -- they represent real connections, growth, and achievements in our developer community. Whenever you opened a newsletter, attended an event, or shared your knowledge, **you helped make this community.** + +## 📚 This Week's Picks + +**[10 new Git commands you should start using today](https://appwrite.io/blog/post/10-git-commands-you-should-start-using)** (10 min)\ +Learn these Git commands to make your workflow smoother, faster, and flexible. + +**[Fun](https://github.com/vercel/fun)** (GitHub Repo)\ +Another golden resource from Vercel. Fun provides a local development runtime for serverless functions. It supports various runtimes (Node.js, Python, and Go) and closely mimics the AWS Lambda environment. + +**[How Google takes the pain out of code reviews, with 97% dev satisfaction](https://read.engineerscodex.com/p/how-google-takes-the-pain-out-of)**\ +A study of Google's code review tooling (Critique), AI-powered improvements, and recent statistics. + +**[Pure CSS Halftone Effect in 3 Declarations](https://frontendmasters.com/blog/pure-css-halftone-effect-in-3-declarations)** (16 min)\ +Ana shows us how to create an excellent CSS halftone effect with a single div. + +**[State of Node.js Performance 2024](https://nodesource.com/blog/State-of-Nodejs-Performance-2024)** (11 min)\ +This article revisits the State of Node.js performance, with a focus on comparing versions 20 through 22. The goal is to provide a detailed analysis of how the platform has evolved over the past year. + +**[The CSS Display Property is Changing Forever](https://www.youtube.com/watch?v=JY0FN71vCbw)** (video)\ +In this video Kyle will teach you the new way to use the display property as well as what this means going forward for CSS. + +**[Next.js 15.1](https://nextjs.org/blog/next-15-1)** (release)\ +Next.js 15.1 has stable React 19 support in both routing systems and improved error debugging with enhanced source maps. They also added some more tweaks that you can read all about here. + +## 📖 Book of the Week + +**[Staff Engineer: Leadership Beyond the Management Track](https://amzn.to/41AhCsD)** + +If you've ever wondered about growing your career beyond "senior developer" without jumping into management, this book is for you. Will Larson has created the definitive guide to technical leadership, and it's the perfect read while you're taking a break from writing code. + +This book is unique because it breaks down the often mysterious path to Staff Engineer through real stories and practical strategies. Larson interviewed dozens of Staff+ engineers from companies like Stripe, Square, and Slack to understand what this role looks like in practice. + +The book is particularly valuable because it: + +- Demystifies the different types of Staff Engineer roles (Did you know there are four distinct archetypes?) +- Provides concrete examples of what Staff Engineers do day-to-day +- Offers practical guidance on how to operate at this level +- Shows you how to navigate the transition from Senior to Staff Engineer + +Whether you're actively pursuing a Staff Engineer role or just curious about what's beyond Senior Developer, this book gives you a clear map of the terrain ahead. It's one of those rare technical books that's deeply insightful and immediately practical. + +If you've got some downtime over the holidays, this could be the perfect investment in your 2025 career growth. + +## 🛠️ Something Cool + +**[Regex Crossword](https://regexcrossword.com/)** + +Did you enjoy last week's SQL Murder Mystery? Here's another nerdy puzzle to keep your brain ticking over the holiday break. + +Imagine combining the satisfaction of solving a crossword puzzle with the mind-bending challenge of regular expressions. That's exactly what Regex Crossword delivers. Each puzzle presents you with a grid where the clues are regex patterns, and you need to fill in characters that match all the patterns simultaneously. + +Start with tutorials if you're new to regex, or dive straight into progressively harder challenges if you feel confident. Fair warning: what starts as "I'll just try one puzzle" can quickly turn into a hours! + +This might be the most productive procrastination you'll do over the holidays. Just don't blame me if you get addicted to solving `^[CHRS]{4}$` type puzzles! + +## 🔗 Quick Links + +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 5061d17396e30f74b3fd0df5a4ac62f500855035 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 7 Jan 2025 17:37:24 +0000 Subject: [PATCH 06/55] This weeks newsletter (#1231) * This weeks newsletter * This weeks newsletter --- .../page.mdx | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 app/(app)/letters/database-decisions-nextjs-secrets-and-37-pro-frontend-tips/page.mdx diff --git a/app/(app)/letters/database-decisions-nextjs-secrets-and-37-pro-frontend-tips/page.mdx b/app/(app)/letters/database-decisions-nextjs-secrets-and-37-pro-frontend-tips/page.mdx new file mode 100644 index 00000000..f1c619ff --- /dev/null +++ b/app/(app)/letters/database-decisions-nextjs-secrets-and-37-pro-frontend-tips/page.mdx @@ -0,0 +1,67 @@ +Tuesday, Jan 7th, 2025 • Niall Maher + +# 🔥 Database decisions, Next.js secrets, and 37 pro frontend tips + +Hey there! 👋 + +Ready to kick off 2025 with fresh tech insights? + +After our holiday break, we're back with curated resources to help you. + +Whether you're looking to level up your database knowledge, optimize Next.js performance, or explore emerging tech trends -- this week's picks will get you started strong. + +## 📚 This Week's Picks + +[**How to Choose the Right Database (4 min)**](https://www.swequiz.com/blog/how-to-choose-the-right-database-in-a-system-design-interview) +This article discusses how to choose a database for system design interviews. + +[**The amazing, but unsettling future of technology... (video)**](https://www.youtube.com/watch?v=v4H2fTgHGuc) +Take a look at 13 trends in technology that will affect programmers and software engineers in the year 2025. + +[**37 Tips from a Senior Frontend Developer (9 min)**](https://dev.to/_ndeyefatoudiop/37-tips-from-a-senior-frontend-developer-251b)\ +Shares some advice from a senior frontend developer with 5+ years of experience + +[**How to Optimize Next.js Web Apps for Better Performance (15 min)**](https://www.freecodecamp.org/news/optimize-nextjs-web-apps-for-better-performance)\ +Who couldn't use a little more performance in their Next.js apps? + +[**tailwindcss-motion (GitHub Repo)**](https://github.com/romboHQ/tailwindcss-motion)\ +A Tailwind CSS plugin from RomboHQ that provides a simple animation library with an easy syntax. + +[**zizmor (GitHub Repo)**](https://github.com/woodruffw/zizmor)\ +A static analysis tool for GitHub Actions. It can find many common security issues in typical GitHub Actions CI/CD setups. + +[**LogLayer (JavaScript Logging Library)**](https://loglayer.dev/)\ +A layer on top of Javascript logging libraries to provide a consistent logging experience. + +[**Rules for Writing Software Tutorials (25 min)**](https://refactoringenglish.com/chapters/rules-for-software-tutorials/)\ +This article provides guidelines for writing effective software tutorials + +## 📖 Book of the Week + +[Software Architecture: The Hard Parts: Modern Trade-Off Analyses for Distributed Architectures](https://amzn.to/41ZrxbB) + +This book provides expert guidance on navigating complex architectural decisions in distributed systems. Written by veterans Neal Ford, Mark Richards, Pramod Sadalage, and Zhamak Dehghani, this book helps developers tackle challenges like service granularity, data management, and system coupling. + +Perfect for experienced software architects looking to build scalable, maintainable distributed systems. Best suited for readers with significant development experience who want practical approaches to architectural trade-offs. + +## 🛠️ Something Cool + +**[Codewars](https://www.codewars.com/)** + +Codewars offers coding challenges across 55+ languages with a unique leveling system that makes practice engaging yet manageable. Each "kata" (challenge) is community-rated for difficulty, letting you progress naturally from fundamentals to advanced concepts. + +Unlike LeetCode's interview-focused problems, Codewars emphasizes practical programming patterns and creative problem-solving. With solutions visible after completion, it's an excellent platform for learning from others' approaches while building interview-ready skills. + +## 🔗 Quick Links + +- Codú TikTok: [https://www.tiktok.com/@codu.co](https://newsletter.codu.co/l/OKhlNrmpjTTHP763xCz1UNOw/p8DcaDEDbL8FJC5y1tmH4w/EEOHywhMSrHPNxKbF3Ps892Q) +- Our YouTube channel: [https://www.youtube.com/@codu](https://newsletter.codu.co/l/OKhlNrmpjTTHP763xCz1UNOw/iJvccMa1dTBysEZfCVFzkw/EEOHywhMSrHPNxKbF3Ps892Q) +- Find us on Twitch: [https://www.twitch.tv/codudotco](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From d9eca0ce6eaf522f1fc9aee4c5a49ef667debe00 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Thu, 9 Jan 2025 10:47:03 +0000 Subject: [PATCH 07/55] Fix indexing bug (#1232) * This weeks newsletter * Enhance metadata and sitemap configuration - Updated layout metadata to include title, description, and Open Graph properties for better SEO. - Added '/api/og' to the robots.txt file to allow crawling. - Refactored sitemap generation to filter out '/api/og' routes and renamed variable for clarity. --- app/layout.tsx | 16 +++++++++++++++- app/robots.ts | 3 ++- app/sitemap.ts | 8 ++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/layout.tsx b/app/layout.tsx index 0f0fbd37..21002def 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -46,7 +46,21 @@ export const metadata = { ], metadataBase: new URL("https://www.codu.co"), openGraph: { - images: "/images/og/home-og.png", + title: "Codú - The Web Developer Community", + description: + "A free network and community for web developers. Learn and grow together.", + url: "https://www.codu.co", + siteName: "Codú", + images: [ + { + url: "https://www.codu.co/images/og/home-og.png", + width: 1200, + height: 630, + alt: "Codú Community", + }, + ], + locale: "en_US", + type: "website", }, }; diff --git a/app/robots.ts b/app/robots.ts index 5911a1e8..69f1f9ff 100644 --- a/app/robots.ts +++ b/app/robots.ts @@ -15,7 +15,8 @@ export default function robots(): MetadataRoute.Robots { "/notifications/", "/create/", "/my-posts/", - "/hub/", // This should be crawled when completed + "/hub/", + "/api/og", ], }, sitemap: "https://www.codu.co/sitemap.xml", diff --git a/app/sitemap.ts b/app/sitemap.ts index 05ee3c0e..73078690 100644 --- a/app/sitemap.ts +++ b/app/sitemap.ts @@ -38,7 +38,7 @@ export default async function sitemap(): Promise { })); // Shape and connect all the data - const data = [ + const allRoutes = [ { url: BASE_URL, lastModified: new Date(), @@ -46,14 +46,14 @@ export default async function sitemap(): Promise { ...routes, ...articles, ...users, - ]; + ].filter((route) => !route.url.includes("/api/og")); // Filter out OG routes // Capture data as sitemap has been inconsistent and want to test on dev Sentry.captureMessage( - `${JSON.stringify(data)}; Routes Count = ${ + `${JSON.stringify(allRoutes)}; Routes Count = ${ routes.length }, Articles Count = ${articles.length}, Users Count = ${users.length}`, ); - return data; + return allRoutes; } From 255062a832b9b35d82298bb322fa7c7565128148 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 14 Jan 2025 17:30:20 +0000 Subject: [PATCH 08/55] This weeks newsletter (#1233) * This weeks newsletter --- app/(app)/letters/that-moment-when/page.mdx | 95 +++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 app/(app)/letters/that-moment-when/page.mdx diff --git a/app/(app)/letters/that-moment-when/page.mdx b/app/(app)/letters/that-moment-when/page.mdx new file mode 100644 index 00000000..83a5f032 --- /dev/null +++ b/app/(app)/letters/that-moment-when/page.mdx @@ -0,0 +1,95 @@ +Tue, Jan 14, 2025 • Niall Maher + +# ⚡ That moment when 270,000 users hit deploy at once... + +Something I've been excited about recently (and think you should be too) is AI Agents. + +AI agents are changing how our apps handle user input. Previously, users had to fill out forms exactly right, or the app would break. Agents can understand messy, natural input and still get the job done. + +Here's a real example: Say you type 'remind me to call Dave from the backend team about the database next Thursday.' An agent is smart enough to: + +- Create a calendar invite (since it seems you want to meet) +- Find Dave in your work directory and add him +- Put the details in the invite +- Set up a reminder +- Mark it as a tech meeting + +Before agents, we had to write many rigid rules to handle this. We'd need code to check if something should be a task or a calendar event, find the right person, and set everything up. It was like building a huge decision tree where everything had to be spelled out. Now agents can figure this stuff out on their own, making our apps much more flexible and user-friendly. + +The best part? You don't need to wait to start building with agents. You can build your own multi-agent systems with tools like [AutoGen](https://microsoft.github.io/autogen/stable//index.html), [LangChain](https://www.langchain.com/), and [CrewA](https://www.crewai.com/)I today. + +Trust me, you'll have a blast seeing how flexible they can be. + +Now after my little bit of excitement, here's the rest of the newsletter. + +## 📚 This Week's Picks + +[**Your Journey to the Tech Stage: A Speaker's Guide (13 min)**](link)\ +​​​​​​​Something I wrote this week: A practical roadmap for developers wanting to share their knowledge through conference speaking. From crafting a compelling proposal to delivering your talk with confidence, this guide breaks down every step of becoming a tech conference speaker. Whether you're submitting your first CFP or looking to improve your speaking game, you'll find actionable insights to help you succeed. + +[**Node's new built-in support for TypeScript (4 min)**](https://2ality.com/2025/01/nodejs-strip-type.html)\ +Big news for TypeScript developers: Node.js v23.6.0 now supports TypeScript out of the box without transpilation. Learn about the experimental type-stripping feature, which extensions to use (.mts, .cts, .ts), and important limitations like no JSX support or decorators. Perfect for teams considering dropping their TypeScript build step. + +[**Rombo: Tailwind Animation Made Simple (Tool)**](https://rombo.co/tailwind/) A game-changing toolkit that makes creating smooth UI animations with Tailwind CSS a breeze. Perfect for developers looking to add polished motion design to their projects without the complexity of custom animation code. Their visual editor makes it easy to experiment with animations and export production-ready Tailwind code.[](link) + +[**The State of LLMs: 2024 in Review (27 min)**](link) A comprehensive deep dive into how Large Language Models evolved in 2024. From breakthrough architectures to surprising capabilities, this analysis covers the pivotal moments that shaped AI development. Essential reading for anyone working with or interested in the future of AI technology - exploring both technical advances and their practical implications.**[](https://surfingcomplexity.blog/2024/12/21/the-canva-outage-another-tale-of-saturation-and-resilience/)** + +**[Canva's December 2024 Outage Analysis (13 min)](https://surfingcomplexity.blog/2024/12/21/the-canva-outage-another-tale-of-saturation-and-resilience/)**\ +A masterclass in modern system failures - see how a stale CDN rule combined with high latency created a "thundering herd" of 1.5 million requests per second. Features insights about:\ + +- How CDN caching turned into an unexpected synchronization barrier\ +- Why load balancers sometimes make overload situations worse\ +- The battle between autoscaling and the Linux OOM killer Perfect for anyone working with distributed systems or handling high-scale deployments. + +## 🧠 AI Crush CFP + +I'm hosting my first conference! + +It's called AI Crush and it's in Belfast. We are looking for presenters to share their insights on May 9th, 2025. This inaugural event represents a unique opportunity to be part of something special in Northern Ireland's growing tech scene. + +Whether you're building AI-powered applications, exploring machine learning architectures, or implementing practical AI solutions, we want to hear your story. As a first-year conference, speakers have the rare opportunity to help shape the event's direction and be part of its founding moment. + +Think you've got something valuable to share? Know someone who does? The CFP (Call for Presentations) is open now - don't miss your chance to be part of this groundbreaking event! + +It's dual track (one stage for developers and one for leadership) so we need talks for both stages. + +Here's the link: [https://www.crushconf.com/cfp](https://www.crushconf.com/cfp) + +## 📖 Book of the Week + +[​​​​​​**​Run and Jump: The Meaning of the 2D Platformer (Playful Thinking)**](https://amzn.to/3WeH1EX) + +A fascinating exploration of how 2D platform games created lasting impact through seemingly simple design choices. Author Peter D. McDonald deconstructs over 40 years of gaming history to reveal how elements like character movement, level design, and even coin collection communicate deeper meaning to players. + +Perfect for game developers, designers, and anyone interested in understanding the psychology behind engaging game mechanics. Best suited for readers who want to explore the intersection of game design theory and practical implementation, whether they're creating their own games or just fascinated by how games communicate with players. + +## 🛠️ Something Cool\ + +[**AWS Community Builders Program (Applications Open!)**](https://aws.amazon.com/developer/community/community-builders/) + +For the AWS folks in my network: the AWS Community Builders program is currently accepting applications until January 20th, 2025. This 12-month program offers developers unique access to AWS product teams, technical resources, and a global community of cloud practitioners. + +Community Builders get exclusive perks like: + +- Direct access to AWS service teams for technical deep-dives +- Credits for AWS services to experiment with new technologies +- Early access to AWS launches and beta features +- Swag + +Whether you're building side projects on AWS or architecting enterprise solutions, this program is perfect for developers looking to deepen their cloud expertise while connecting with fellow builders. With only a few days left to apply, now's the time to throw your hat in the ring. + +I've been a community builder for a few years and really enjoy having access to such a smart community! + +## 🔗 Quick Links + +- Codú TikTok: [https://www.tiktok.com/@codu.co](https://www.tiktok.com/@codu.co) +- Our YouTube channel: [https://www.youtube.com/@codu](https://www.youtube.com/@codu) +- Find us on Twitch: [https://www.twitch.tv/codudotco](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From a35f54f4b752d31593dfd672ea6d9aac617f5963 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 14 Jan 2025 17:41:20 +0000 Subject: [PATCH 09/55] Fix typos (#1234) --- app/(app)/letters/that-moment-when/page.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/(app)/letters/that-moment-when/page.mdx b/app/(app)/letters/that-moment-when/page.mdx index 83a5f032..57994e08 100644 --- a/app/(app)/letters/that-moment-when/page.mdx +++ b/app/(app)/letters/that-moment-when/page.mdx @@ -24,15 +24,15 @@ Now after my little bit of excitement, here's the rest of the newsletter. ## 📚 This Week's Picks -[**Your Journey to the Tech Stage: A Speaker's Guide (13 min)**](link)\ -​​​​​​​Something I wrote this week: A practical roadmap for developers wanting to share their knowledge through conference speaking. From crafting a compelling proposal to delivering your talk with confidence, this guide breaks down every step of becoming a tech conference speaker. Whether you're submitting your first CFP or looking to improve your speaking game, you'll find actionable insights to help you succeed. +[**Your Journey to the Tech Stage: A Speaker's Guide (13 min)**](https://www.crushconf.com/blog/becoming-a-tech-conference-speaker-from-submission-to-stage)\ +Something I wrote this week: A practical roadmap for developers wanting to share their knowledge through conference speaking. From crafting a compelling proposal to delivering your talk with confidence, this guide breaks down every step of becoming a tech conference speaker. Whether you're submitting your first CFP or looking to improve your speaking game, you'll find actionable insights to help you succeed. [**Node's new built-in support for TypeScript (4 min)**](https://2ality.com/2025/01/nodejs-strip-type.html)\ Big news for TypeScript developers: Node.js v23.6.0 now supports TypeScript out of the box without transpilation. Learn about the experimental type-stripping feature, which extensions to use (.mts, .cts, .ts), and important limitations like no JSX support or decorators. Perfect for teams considering dropping their TypeScript build step. [**Rombo: Tailwind Animation Made Simple (Tool)**](https://rombo.co/tailwind/) A game-changing toolkit that makes creating smooth UI animations with Tailwind CSS a breeze. Perfect for developers looking to add polished motion design to their projects without the complexity of custom animation code. Their visual editor makes it easy to experiment with animations and export production-ready Tailwind code.[](link) -[**The State of LLMs: 2024 in Review (27 min)**](link) A comprehensive deep dive into how Large Language Models evolved in 2024. From breakthrough architectures to surprising capabilities, this analysis covers the pivotal moments that shaped AI development. Essential reading for anyone working with or interested in the future of AI technology - exploring both technical advances and their practical implications.**[](https://surfingcomplexity.blog/2024/12/21/the-canva-outage-another-tale-of-saturation-and-resilience/)** +[**The State of LLMs: 2024 in Review (27 min)**](https://simonwillison.net/2024/Dec/31/llms-in-2024/) A comprehensive deep dive into how Large Language Models evolved in 2024. From breakthrough architectures to surprising capabilities, this analysis covers the pivotal moments that shaped AI development. Essential reading for anyone working with or interested in the future of AI technology - exploring both technical advances and their practical implications.**[](https://surfingcomplexity.blog/2024/12/21/the-canva-outage-another-tale-of-saturation-and-resilience/)** **[Canva's December 2024 Outage Analysis (13 min)](https://surfingcomplexity.blog/2024/12/21/the-canva-outage-another-tale-of-saturation-and-resilience/)**\ A masterclass in modern system failures - see how a stale CDN rule combined with high latency created a "thundering herd" of 1.5 million requests per second. Features insights about:\ @@ -57,7 +57,7 @@ Here's the link: [https://www.crushconf.com/cfp](https://www.crushconf.com/cfp) ## 📖 Book of the Week -[​​​​​​**​Run and Jump: The Meaning of the 2D Platformer (Playful Thinking)**](https://amzn.to/3WeH1EX) +[**Run and Jump: The Meaning of the 2D Platformer (Playful Thinking)**](https://amzn.to/3WeH1EX) A fascinating exploration of how 2D platform games created lasting impact through seemingly simple design choices. Author Peter D. McDonald deconstructs over 40 years of gaming history to reveal how elements like character movement, level design, and even coin collection communicate deeper meaning to players. From 1160784f5d981ea5ad138801df15dbdc04b5ffea Mon Sep 17 00:00:00 2001 From: aakashgujar <109903705+AakashGujar@users.noreply.github.com> Date: Mon, 20 Jan 2025 01:43:46 +0530 Subject: [PATCH 10/55] Fix: Moved Sonner inside ThemeProvider to adapt dark/light theme (#1236) --- app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/layout.tsx b/app/layout.tsx index 21002def..0b53506d 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -81,11 +81,11 @@ export default async function RootLayout({ - + {children} From 4c90bedb0e5ddefa0d293258c98e4b1159e88db7 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 21 Jan 2025 19:06:32 +0000 Subject: [PATCH 11/55] This weeks newsletter (#1237) --- .../css-magic-ai-breakthroughs/page.mdx | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 app/(app)/letters/css-magic-ai-breakthroughs/page.mdx diff --git a/app/(app)/letters/css-magic-ai-breakthroughs/page.mdx b/app/(app)/letters/css-magic-ai-breakthroughs/page.mdx new file mode 100644 index 00000000..e7b051aa --- /dev/null +++ b/app/(app)/letters/css-magic-ai-breakthroughs/page.mdx @@ -0,0 +1,77 @@ +Tuesday, Jan 21st, 2025 • Niall Maher + +# 🪄 CSS Magic, AI Breakthroughs, and My Big Announcement! + +I've been busy ramping things up for [AI Crush](https://www.crushconf.com/)! + +I'm really excited to start announcing speakers and partnerships as we aim to build our first conference. It's an incredible experience so far, and I can't wait to share more soon. + +For now, here are some great reads and tools to brighten your week. Let's get into it! + +## 📚 This Week's Picks + +**[DeepSeek's Reasoning Model Beats OpenAI's O1 (5 min)](https://techcrunch.com/2025/01/20/deepseek-claims-its-reasoning-model-beats-openais-o1-on-certain-benchmarks/)** +DeepSeek has made a model that can think and reason better than OpenAI's O1 in some tests. This could be a big step forward for AI tools. + +**[Think Twice Before Using GitHub Actions (7 min)](https://ninkovic.dev/blog/2025/think-twice-before-using-github-actions)** +GitHub Actions are great, but they can also bring problems. This article explains what to watch out for and how to avoid common issues. + +**[CSS `text-box-trim` Is Here! (4 min)](https://developer.chrome.com/blog/css-text-box-trim/)** +A new CSS tool makes text layout easier and more predictable. This is great for frontend developers looking to save time and fix common design problems. + +**[The Challenge of Secure Memory in Modern Systems (10 min)](https://lwn.net/Articles/1003780/)** +This article talks about how computers can keep memory safe while still working fast. It's a good read for anyone interested in how computers really work. + +**[Accessibility Essentials for Front-End Developers (8 min)](https://martijnhols.nl/blog/accessibility-essentials-every-front-end-developer-should-know/)** +Learn the basics of making websites that everyone can use, including people with disabilities. These tips are simple to follow and can make a big difference. + +**[Searchlight (repo)](https://github.com/ravelantunes/Searchlight)** +A search engine you can customize to fit your needs. It's open-source and great for trying out new ideas in search technology. + +## 📖 Book of the Week + +**[Feel-Good Productivity: How to Do More of What Matters to You](https://amzn.to/4hnL2PA)** +The secret to productivity isn't discipline. It's joy. + +Most people think productivity is all about hard work, frustration, and grind. But Dr. Ali Abdaal shows a happier way to success. + +In this book, he shares research-backed ideas to help you get more done while feeling good about it. You'll learn: + +- The three things that make productivity enjoyable +- How to beat procrastination and stay focused +- Ways to avoid burnout and find lasting happiness + +With stories of founders, athletes, and Nobel winners, this book shows how to work smarter, not harder. It's full of easy tips you can start using today to live better and accomplish more. + +## 🛠️ Something Cool + +**[ARIA DevTools](https://chromewebstore.google.com/detail/aria-devtools/dneemiigcbbgbdjlcdjjnianlikimpck)** +This Chrome extension makes it easy to check how accessible your website is. It shows the roles, states, and properties of elements on your page. + +## 🧠 AI Crush CFP + +I'm hosting my first conference! + +It's called AI Crush, and it's in Belfast. We're looking for presenters to share their insights on **May 9th, 2025**. This inaugural event is a unique opportunity to be part of something special in Northern Ireland's growing tech scene. + +Whether you're building AI-powered applications, exploring machine learning architectures, or implementing practical AI solutions, we want to hear your story. As a first-year conference, speakers have the rare opportunity to help shape the event's direction and be part of its founding moment. + +Think you've got something valuable to share? Know someone who does? The CFP (Call for Presentations) is open now—don't miss your chance to be part of this groundbreaking event! + +It's dual-track (one stage for developers and one for leadership), so we need talks for both stages. + +[Submit your proposal here](https://www.crushconf.com/cfp) + +## 🔗 Quick Links + +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +**If you have any ideas or feedback, reply to this email.** + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From d73835929585c9e1750251718f013503f87d7663 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 21 Jan 2025 19:09:19 +0000 Subject: [PATCH 12/55] Fix typo --- app/(app)/letters/css-magic-ai-breakthroughs/page.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/(app)/letters/css-magic-ai-breakthroughs/page.mdx b/app/(app)/letters/css-magic-ai-breakthroughs/page.mdx index e7b051aa..0b06e35f 100644 --- a/app/(app)/letters/css-magic-ai-breakthroughs/page.mdx +++ b/app/(app)/letters/css-magic-ai-breakthroughs/page.mdx @@ -26,7 +26,7 @@ This article talks about how computers can keep memory safe while still working Learn the basics of making websites that everyone can use, including people with disabilities. These tips are simple to follow and can make a big difference. **[Searchlight (repo)](https://github.com/ravelantunes/Searchlight)** -A search engine you can customize to fit your needs. It's open-source and great for trying out new ideas in search technology. +​​​​​​​Searchlight is a native macOS, open-source PostgreSQL client designed to be simple, lightweight, and developer-friendly. It offers a clean and intuitive interface for managing databases and running queries without the complexity of full-scale database management tools. ## 📖 Book of the Week From d3f1d39e4b6c5f094a5c7da1355e5d3aa0fe0854 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 28 Jan 2025 16:56:19 +0000 Subject: [PATCH 13/55] This weeks newsletter (#1238) --- .../page.mdx | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 app/(app)/letters/are-you-letting-ai-make-you-a-worse-developer/page.mdx diff --git a/app/(app)/letters/are-you-letting-ai-make-you-a-worse-developer/page.mdx b/app/(app)/letters/are-you-letting-ai-make-you-a-worse-developer/page.mdx new file mode 100644 index 00000000..37726ab7 --- /dev/null +++ b/app/(app)/letters/are-you-letting-ai-make-you-a-worse-developer/page.mdx @@ -0,0 +1,78 @@ +Tuesday, January 28th, 2025 • Niall Maher + +# ⚠️ Are you letting AI make you a worse developer? + +It’s easier than ever to generate code with AI tools. But here’s the catch: if you don’t understand the basics of HTML, CSS, and JavaScript, you could end up with bad or broken code. AI isn’t a replacement for solid knowledge. + +Think of AI as your helper, not your teacher. You should guide and correct it, not depend on it to fill gaps in your skills. When you truly know the fundamentals, you’ll spot mistakes, write cleaner code, and build better websites. + +The tools we use will keep changing, but the core of web development stays the same. + +Mastering the basics is how you stay ready for anything. + +## 📚 **This Week's Picks** + +[**TypeScript Enum Patterns (7 min)**](https://2ality.com/2025/01/typescript-enum-patterns.html)Learn how to use enums effectively in TypeScript with this guide. It’s packed with practical tips and examples to level up your coding. + +[**React Scan (GitHub)**](https://github.com/aidenybai/react-scan)Automatically find performance issues in your React app with React Scan. It's open-source and super handy for optimizing your projects. + +[**AI is Creating a Generation of Illiterate Programmers (5 min)**](https://nmn.gl/blog/ai-illiterate-programmers)This article dives into the risks of relying too much on AI tools as a developer and why staying sharp with core skills still matters. + +[**The Cookie Sandwich Technique: A Web Security Lesson (6 min)**](https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique)A clever (but scary) technique to steal cookies! This research explains how attackers exploit vulnerabilities and how you can protect your apps. + +[**HTML: Your Best Investment as a Developer (8 min)**](https://christianheilmann.com/2025/01/15/learning-html-is-the-best-investment-i-ever-did/)Christian Heilmann reflects on how mastering HTML can set you up for long-term success. A great reminder that fundamentals matter! + +[**7 Lessons from building a small-scale AI application (7 min)**](https://www.thelis.org/blog/lessons-from-ai)Explore what we can learn from AI breakthroughs and how they might inspire creativity, problem-solving, and a deeper understanding of tech. + +[**Did DeepSeek R1 just pop the AI bubble? (video)**](https://youtu.be/Nl7aCUsWykg?si=iB_ruRFTQ78wrJmj)DeepSeek R1 AI model has proven that it is possible to train and run state-of-the-art reasoning models with minimal hardware. Let's find out why China's latest AI model has big tech and wall street in panic mode. + +## 📖 **Book of the Week** + +[**The Lean Startup: Continuous Innovation for Radical Success**](https://amzn.to/42w4c1d)Eric Ries' classic is a must-read for developers and entrepreneurs. It’s all about building better products faster by embracing feedback and continuous improvement. + +I revisit this book every year because its principles apply to both coding and problem-solving. If you're serious about creating something impactful, this book will keep you focused and adaptable. + +## 🛠️ **Something Cool** + +[**CSS Battle**](https://cssbattle.dev/)Battle your coding skills in a multiplayer game where you replicate images using CSS! Compete with over 300,000 developers to write the shortest, cleanest code possible. It’s addictive, fun, and a fantastic way to sharpen your CSS game. + +## 🧠 AI Crush CFP + +I'm hosting my first conference! + +It's called AI Crush and it's in Belfast. We are looking for presenters to share their insights on May 9th, 2025. This inaugural event represents a unique opportunity to be part of something special in Northern Ireland's growing tech scene. + +Whether you're building AI-powered applications, exploring machine learning architectures, or implementing practical AI solutions, we want to hear your story. As a first-year conference, speakers have the rare opportunity to help shape the event's direction and be part of its founding moment. + +Think you've got something valuable to share? Know someone who does? The CFP (Call for Presentations) is open now - don't miss your chance to be part of this groundbreaking event! + +It's dual track (one stage for developers and one for leadership) so we need talks for both stages. + +Here's the link: [https://www.crushconf.com/cfp](https://www.crushconf.com/cfp) + +## 🎉 **Dublin Event** + +Kick off 2025 with an awesome evening of tech talks, food, and hanging out with developers! + +We've got two exciting talks lined up, including one that will show you some amazing tricks to make your coding faster and easier using Cursor AI. + +👉 [RSVP here](https://www.meetup.com/codu-community/events/305723649) + +Don't miss out—it's going to be a great way to start the year! + +## 🔗 Quick Links + +- [Codú Facebook](https://www.facebook.com/profile.php?id=61570877292755) +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) + +If you don't want to receive future editions of Codú Weekly, [click here to unsubscribe]([unsubscribe]). From f3be84100db38d331a1b8c7583e72a472cff0fd0 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 4 Feb 2025 20:20:47 +0000 Subject: [PATCH 14/55] This weeks article (#1241) --- app/(app)/letters/cornhub-and-more/page.mdx | 82 +++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 app/(app)/letters/cornhub-and-more/page.mdx diff --git a/app/(app)/letters/cornhub-and-more/page.mdx b/app/(app)/letters/cornhub-and-more/page.mdx new file mode 100644 index 00000000..28cc5249 --- /dev/null +++ b/app/(app)/letters/cornhub-and-more/page.mdx @@ -0,0 +1,82 @@ +Tuesday, Feb 4th, 2025 • Niall Maher + +# 🌽 CornHub Controversy & Why Dropping F-Bombs Beats AI Search Results + +We kicked off 2025 with a bang at our first Codú event of the year, packing the house with eager developers ready to dive into some seriously cool tech. + +Hubspot's own [Evan Burbidge](https://www.linkedin.com/in/evan-burbidge-a0823361/) took us on a mind-bending journey through the world of 3D drag-and-drop form wizards. Who knew form building could be so spatial? Evan shared the actual tools his team uses at Hubspot, giving us a peek behind the curtain at how they're revolutionizing multi-step forms. + +Then things got... corny. In my live coding session with Cursor.com's AI pair programmer, we attempted to build "CornHub" -- a totally innocent website for locating quality corn in your area. + +While some AI models (from Anthropic and OpenAI) seemed oddly hesitant to help with our wholesome agricultural endeavor (wink), Deepseek stepped up to the plate, helping us create a beautiful hub for all things corn. + +Who knew finding local corn could be so controversial? + +## 📚 This Week's Picks + +**[Help, My Node Image Has Python! (7 min)](https://labs.iximiuz.com/tutorials/how-to-choose-nodejs-container-image)**\ +Not all Node.js container images are created equal. This guide explains why some images include Python (and other extras) and how to choose the right one to keep your containers lean and efficient. + +**[Once You're Laid Off, You'll Never Be the Same Again (13 min)](https://mertbulan.com/2025/01/26/once-you-are-laid-off-you-will-never-be-the-same-again/)**\ +Getting laid off changes more than just your job---it reshapes how you view work, stability, and career growth. This personal reflection explores the emotional and professional impact of layoffs. + +**[DeepSeek Stole Our Tech... Says OpenAI (video)](https://www.youtube.com/watch?v=hpwoGjpYygI)**\ +OpenAI and AI investor David Sacks claim DeepSeek illegally used OpenAI's technology to train its new R1 model. Microsoft allegedly provided hard evidence. Meanwhile, Alibaba has dropped Qwen 2.5 with some eye-catching benchmark scores. + +**[How Are Images REALLY Stored? (42 min)](https://cefboud.com/posts/image-formats/)**\ +Ever wondered how images are actually stored? This article explains the pixel-based structure of images, how different formats like PNG and JPEG optimize storage, and the techniques behind image compression. A must-read for developers working with graphics. + +**[Add F\*cking to Your Google Searches to Neutralize AI Summaries (9 min)](https://gizmodo.com/add-fcking-to-your-google-searches-to-neutralize-ai-summaries-2000557710)**\ +Tired of Google's AI-generated search summaries? Adding an expletive to your search prevents them from showing up. It's a weird but effective trick---at least until Google patches it. + +**[Open-Closed Principle in React: Building Extensible Components (6 min)](https://cekrem.github.io/posts/open-closed-principle-in-react/)**\ +Writing flexible React components is easier when you follow the Open-Closed Principle (OCP). This article compares rigid, modification-heavy components with a cleaner, composition-based approach that makes extensions seamless. + +**[why-did-you-render by Welldone (tool)](https://github.com/welldone-software/why-did-you-render)**\ +A debugging tool for React that helps identify unnecessary re-renders. It monkey-patches React to notify you when components render unnecessarily, improving performance in both React and React Native apps. + +## 📖 Book of the Week + +**[Radical Candor: How to Get What You Want by Saying What You Mean](https://amzn.to/40ADtxW)**\ +Great communication makes great developers. + +In this book, Kim Scott introduces _Radical Candor_, a simple but powerful approach to communication: _care personally while challenging directly_. This helps teams give honest feedback, avoid misunderstandings, and work better together. + +For web developers, clear and direct communication leads to better teamwork, fewer mistakes, and stronger projects. Whether you're working with designers, PMs, or other engineers, the ability to speak openly while staying respectful is a game-changer. + +If you want to improve how you give and receive feedback, this is a must-read. + +## 🛠️ Something Cool + +[**Checkbox Race!**](https://checkboxrace.com/) + +A oddly competitive game where you race to check boxes. Simple concept, but shows how basic HTML elements can be turned into something fun. + +## 🧠 AI Crush CFP + +I'm hosting my first conference! + +It's called AI Crush and it's in Belfast. We are looking for presenters to share their insights on May 9th, 2025. This inaugural event represents a unique opportunity to be part of something special in Northern Ireland's growing tech scene. + +Whether you're building AI-powered applications, exploring machine learning architectures, or implementing practical AI solutions, we want to hear your story. As a first-year conference, speakers have the rare opportunity to help shape the event's direction and be part of its founding moment. + +Think you've got something valuable to share? Know someone who does? The CFP (Call for Presentations) is open now - don't miss your chance to be part of this groundbreaking event! + +It's dual track (one stage for developers and one for leadership) so we need talks for both stages. + +Here's the link: [https://www.crushconf.com/cfp](https://www.crushconf.com/cfp) + +## 🔗 Quick Links + +- [Codú Facebook](https://www.facebook.com/profile.php?id=61570877292755) +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 5ad9c596674a6b6c3a0e2a61505d632b4755e3bf Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Sun, 9 Feb 2025 13:20:33 +0000 Subject: [PATCH 15/55] fix: package.json & package-lock.json to reduce vulnerabilities (#1240) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-SENTRYNEXTJS-8664888 - https://snyk.io/vuln/SNYK-JS-SENTRYNODE-8664889 Co-authored-by: snyk-bot Co-authored-by: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> --- package-lock.json | 888 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 518 insertions(+), 372 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83625f05..9b51352b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@next/mdx": "^14.2.7", "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-switch": "^1.1.0", - "@sentry/nextjs": "^8.33.0", + "@sentry/nextjs": "^8.49.0", "@t3-oss/env-nextjs": "^0.11.1", "@tailwindcss/forms": "^0.5.8", "@tanstack/react-query": "^4.36.1", @@ -5214,20 +5214,22 @@ } }, "node_modules/@opentelemetry/api-logs": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", - "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.56.0.tgz", + "integrity": "sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" }, "engines": { "node": ">=14" } }, "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.26.0.tgz", - "integrity": "sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", + "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "license": "Apache-2.0", "engines": { "node": ">=14" }, @@ -5236,11 +5238,12 @@ } }, "node_modules/@opentelemetry/core": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz", - "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "1.27.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -5250,11 +5253,12 @@ } }, "node_modules/@opentelemetry/instrumentation": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", - "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz", + "integrity": "sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/api-logs": "0.56.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", @@ -5269,12 +5273,13 @@ } }, "node_modules/@opentelemetry/instrumentation-amqplib": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.42.0.tgz", - "integrity": "sha512-fiuU6OKsqHJiydHWgTRQ7MnIrJ2lEqsdgFtNIH4LbAUJl/5XmrIeoDzDnox+hfkgWK65jsleFuQDtYb5hW1koQ==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.45.0.tgz", + "integrity": "sha512-SlKLsOS65NGMIBG1Lh/hLrMDU9WzTUF25apnV6ZmWZB1bBmUwan7qrwwrTu1cL5LzJWCXOdZPuTaxP7pC9qxnQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5285,12 +5290,13 @@ } }, "node_modules/@opentelemetry/instrumentation-connect": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.39.0.tgz", - "integrity": "sha512-pGBiKevLq7NNglMgqzmeKczF4XQMTOUOTkK8afRHMZMnrK3fcETyTH7lVaSozwiOM3Ws+SuEmXZT7DYrrhxGlg==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.42.0.tgz", + "integrity": "sha512-bOoYHBmbnq/jFaLHmXJ55VQ6jrH5fHDMAPjFM0d3JvR0dvIqW7anEoNC33QqYGFYUfVJ50S0d/eoyF61ALqQuA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.36" }, @@ -5302,11 +5308,12 @@ } }, "node_modules/@opentelemetry/instrumentation-dataloader": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.12.0.tgz", - "integrity": "sha512-pnPxatoFE0OXIZDQhL2okF//dmbiWFzcSc8pUg9TqofCLYZySSxDCgQc69CJBo5JnI3Gz1KP+mOjS4WAeRIH4g==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.15.0.tgz", + "integrity": "sha512-5fP35A2jUPk4SerVcduEkpbRAIoqa2PaP5rWumn01T1uSbavXNccAr3Xvx1N6xFtZxXpLJq4FYqGFnMgDWgVng==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -5316,12 +5323,13 @@ } }, "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.42.0.tgz", - "integrity": "sha512-YNcy7ZfGnLsVEqGXQPT+S0G1AE46N21ORY7i7yUQyfhGAL4RBjnZUqefMI0NwqIl6nGbr1IpF0rZGoN8Q7x12Q==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.46.0.tgz", + "integrity": "sha512-BCEClDj/HPq/1xYRAlOr6z+OUnbp2eFp18DSrgyQz4IT9pkdYk8eWHnMi9oZSqlC6J5mQzkFmaW5RrKb1GLQhg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5332,12 +5340,13 @@ } }, "node_modules/@opentelemetry/instrumentation-fastify": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.39.0.tgz", - "integrity": "sha512-SS9uSlKcsWZabhBp2szErkeuuBDgxOUlllwkS92dVaWRnMmwysPhcEgHKB8rUe3BHg/GnZC1eo1hbTZv4YhfoA==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.43.0.tgz", + "integrity": "sha512-Lmdsg7tYiV+K3/NKVAQfnnLNGmakUOFdB0PhoTh2aXuSyCmyNnnDvhn2MsArAPTZ68wnD5Llh5HtmiuTkf+DyQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5348,12 +5357,13 @@ } }, "node_modules/@opentelemetry/instrumentation-fs": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.15.0.tgz", - "integrity": "sha512-JWVKdNLpu1skqZQA//jKOcKdJC66TWKqa2FUFq70rKohvaSq47pmXlnabNO+B/BvLfmidfiaN35XakT5RyMl2Q==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.18.0.tgz", + "integrity": "sha512-kC40y6CEMONm8/MWwoF5GHWIC7gOdF+g3sgsjfwJaUkgD6bdWV+FgG0XApqSbTQndICKzw3RonVk8i7s6mHqhA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -5363,11 +5373,12 @@ } }, "node_modules/@opentelemetry/instrumentation-generic-pool": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.39.0.tgz", - "integrity": "sha512-y4v8Y+tSfRB3NNBvHjbjrn7rX/7sdARG7FuK6zR8PGb28CTa0kHpEGCJqvL9L8xkTNvTXo+lM36ajFGUaK1aNw==", + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.42.0.tgz", + "integrity": "sha512-J4QxqiQ1imtB9ogzsOnHra0g3dmmLAx4JCeoK3o0rFes1OirljNHnO8Hsj4s1jAir8WmWvnEEQO1y8yk6j2tog==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -5377,11 +5388,12 @@ } }, "node_modules/@opentelemetry/instrumentation-graphql": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.43.0.tgz", - "integrity": "sha512-aI3YMmC2McGd8KW5du1a2gBA0iOMOGLqg4s9YjzwbjFwjlmMNFSK1P3AIg374GWg823RPUGfVTIgZ/juk9CVOA==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.46.0.tgz", + "integrity": "sha512-tplk0YWINSECcK89PGM7IVtOYenXyoOuhOQlN0X0YrcDUfMS4tZMKkVc0vyhNWYYrexnUHwNry2YNBNugSpjlQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -5391,12 +5403,13 @@ } }, "node_modules/@opentelemetry/instrumentation-hapi": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.41.0.tgz", - "integrity": "sha512-jKDrxPNXDByPlYcMdZjNPYCvw0SQJjN+B1A+QH+sx+sAHsKSAf9hwFiJSrI6C4XdOls43V/f/fkp9ITkHhKFbQ==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.44.0.tgz", + "integrity": "sha512-4HdNIMNXWK1O6nsaQOrACo83QWEVoyNODTdVDbUqtqXiv2peDfD0RAPhSQlSGWLPw3S4d9UoOmrV7s2HYj6T2A==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5407,13 +5420,15 @@ } }, "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.53.0.tgz", - "integrity": "sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.56.0.tgz", + "integrity": "sha512-/bWHBUAq8VoATnH9iLk5w8CE9+gj+RgYSUphe7hry472n6fYl7+4PvuScoQMdmSUTprKq/gyr2kOWL6zrC7FkQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/instrumentation": "0.53.0", - "@opentelemetry/semantic-conventions": "1.27.0", + "@opentelemetry/core": "1.29.0", + "@opentelemetry/instrumentation": "0.56.0", + "@opentelemetry/semantic-conventions": "1.28.0", + "forwarded-parse": "2.1.2", "semver": "^7.5.2" }, "engines": { @@ -5423,12 +5438,28 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.29.0.tgz", + "integrity": "sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, "node_modules/@opentelemetry/instrumentation-ioredis": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.43.0.tgz", - "integrity": "sha512-i3Dke/LdhZbiUAEImmRG3i7Dimm/BD7t8pDDzwepSvIQ6s2X6FPia7561gw+64w+nx0+G9X14D7rEfaMEmmjig==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.46.0.tgz", + "integrity": "sha512-sOdsq8oGi29V58p1AkefHvuB3l2ymP1IbxRIX3y4lZesQWKL8fLhBmy8xYjINSQ5gHzWul2yoz7pe7boxhZcqQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/redis-common": "^0.36.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, @@ -5440,11 +5471,12 @@ } }, "node_modules/@opentelemetry/instrumentation-kafkajs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.3.0.tgz", - "integrity": "sha512-UnkZueYK1ise8FXQeKlpBd7YYUtC7mM8J0wzUSccEfc/G8UqHQqAzIyYCUOUPUKp8GsjLnWOOK/3hJc4owb7Jg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.6.0.tgz", + "integrity": "sha512-MGQrzqEUAl0tacKJUFpuNHJesyTi51oUzSVizn7FdvJplkRIdS11FukyZBZJEscofSEdk7Ycmg+kNMLi5QHUFg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5454,13 +5486,30 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-koa": { + "node_modules/@opentelemetry/instrumentation-knex": { "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.43.0.tgz", - "integrity": "sha512-lDAhSnmoTIN6ELKmLJBplXzT/Jqs5jGZehuG22EdSMaTwgjMpxMDI1YtlKEhiWPWkrz5LUsd0aOO0ZRc9vn3AQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.43.0.tgz", + "integrity": "sha512-mOp0TRQNFFSBj5am0WF67fRO7UZMUmsF3/7HSDja9g3H4pnj+4YNvWWyZn4+q0rGrPtywminAXe0rxtgaGYIqg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.46.0.tgz", + "integrity": "sha512-RcWXMQdJQANnPUaXbHY5G0Fg6gmleZ/ZtZeSsekWPaZmQq12FGk0L1UwodIgs31OlYfviAZ4yTeytoSUkgo5vQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5471,11 +5520,12 @@ } }, "node_modules/@opentelemetry/instrumentation-lru-memoizer": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.40.0.tgz", - "integrity": "sha512-21xRwZsEdMPnROu/QsaOIODmzw59IYpGFmuC4aFWvMj6stA8+Ei1tX67nkarJttlNjoM94um0N4X26AD7ff54A==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.43.0.tgz", + "integrity": "sha512-fZc+1eJUV+tFxaB3zkbupiA8SL3vhDUq89HbDNg1asweYrEb9OlHIB+Ot14ZiHUc1qCmmWmZHbPTwa56mVVwzg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -5485,12 +5535,12 @@ } }, "node_modules/@opentelemetry/instrumentation-mongodb": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.47.0.tgz", - "integrity": "sha512-yqyXRx2SulEURjgOQyJzhCECSh5i1uM49NUaq9TqLd6fA7g26OahyJfsr9NE38HFqGRHpi4loyrnfYGdrsoVjQ==", + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.50.0.tgz", + "integrity": "sha512-DtwJMjYFXFT5auAvv8aGrBj1h3ciA/dXQom11rxL7B1+Oy3FopSpanvwYxJ+z0qmBrQ1/iMuWELitYqU4LnlkQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", - "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5501,12 +5551,13 @@ } }, "node_modules/@opentelemetry/instrumentation-mongoose": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.42.0.tgz", - "integrity": "sha512-AnWv+RaR86uG3qNEMwt3plKX1ueRM7AspfszJYVkvkehiicC3bHQA6vWdb6Zvy5HAE14RyFbu9+2hUUjR2NSyg==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.45.0.tgz", + "integrity": "sha512-zHgNh+A01C5baI2mb5dAGyMC7DWmUpOfwpV8axtC0Hd5Uzqv+oqKgKbVDIVhOaDkPxjgVJwYF9YQZl2pw2qxIA==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5517,11 +5568,12 @@ } }, "node_modules/@opentelemetry/instrumentation-mysql": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.41.0.tgz", - "integrity": "sha512-jnvrV6BsQWyHS2qb2fkfbfSb1R/lmYwqEZITwufuRl37apTopswu9izc0b1CYRp/34tUG/4k/V39PND6eyiNvw==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.44.0.tgz", + "integrity": "sha512-al7jbXvT/uT1KV8gdNDzaWd5/WXf+mrjrsF0/NtbnqLa0UUFGgQnoK3cyborgny7I+KxWhL8h7YPTf6Zq4nKsg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/mysql": "2.15.26" }, @@ -5533,11 +5585,12 @@ } }, "node_modules/@opentelemetry/instrumentation-mysql2": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.41.0.tgz", - "integrity": "sha512-REQB0x+IzVTpoNgVmy5b+UnH1/mDByrneimP6sbDHkp1j8QOl1HyWOrBH/6YWR0nrbU3l825Em5PlybjT3232g==", + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.44.0.tgz", + "integrity": "sha512-e9QY4AGsjGFwmfHd6kBa4yPaQZjAq2FuxMb0BbKlXCAjG+jwqw+sr9xWdJGR60jMsTq52hx3mAlE3dUJ9BipxQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@opentelemetry/sql-common": "^0.40.1" }, @@ -5549,11 +5602,12 @@ } }, "node_modules/@opentelemetry/instrumentation-nestjs-core": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.40.0.tgz", - "integrity": "sha512-WF1hCUed07vKmf5BzEkL0wSPinqJgH7kGzOjjMAiTGacofNXjb/y4KQ8loj2sNsh5C/NN7s1zxQuCgbWbVTGKg==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.43.0.tgz", + "integrity": "sha512-NEo4RU7HTjiaXk3curqXUvCb9alRiFWxQY//+hvDXwWLlADX2vB6QEmVCeEZrKO+6I/tBrI4vNdAnbCY9ldZVg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -5564,12 +5618,14 @@ } }, "node_modules/@opentelemetry/instrumentation-pg": { - "version": "0.44.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.44.0.tgz", - "integrity": "sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==", + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.49.0.tgz", + "integrity": "sha512-3alvNNjPXVdAPdY1G7nGRVINbDxRK02+KAugDiEpzw0jFQfU8IzFkSWA4jyU4/GbMxKvHD+XIOEfSjpieSodKw==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", - "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "1.27.0", "@opentelemetry/sql-common": "^0.40.1", "@types/pg": "8.6.1", "@types/pg-pool": "2.0.6" @@ -5581,10 +5637,20 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/instrumentation-pg/node_modules/@types/pg": { "version": "8.6.1", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", "dependencies": { "@types/node": "*", "pg-protocol": "*", @@ -5595,6 +5661,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -5610,6 +5677,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -5618,6 +5686,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5626,6 +5695,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5634,6 +5704,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -5642,11 +5713,12 @@ } }, "node_modules/@opentelemetry/instrumentation-redis-4": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.42.0.tgz", - "integrity": "sha512-NaD+t2JNcOzX/Qa7kMy68JbmoVIV37fT/fJYzLKu2Wwd+0NCxt+K2OOsOakA8GVg8lSpFdbx4V/suzZZ2Pvdjg==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.45.0.tgz", + "integrity": "sha512-Sjgym1xn3mdxPRH5CNZtoz+bFd3E3NlGIu7FoYr4YrQouCc9PbnmoBcmSkEdDy5LYgzNildPgsjx9l0EKNjKTQ==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation": "^0.56.0", "@opentelemetry/redis-common": "^0.36.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, @@ -5657,13 +5729,31 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.17.0.tgz", + "integrity": "sha512-yRBz2409an03uVd1Q2jWMt3SqwZqRFyKoWYYX3hBAtPDazJ4w5L+1VOij71TKwgZxZZNdDBXImTQjii+VeuzLg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, "node_modules/@opentelemetry/instrumentation-undici": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.6.0.tgz", - "integrity": "sha512-ABJBhm5OdhGmbh0S/fOTE4N69IZ00CsHC5ijMYfzbw3E5NwLgpQk5xsljaECrJ8wz1SfXbO03FiSuu5AyRAkvQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.9.0.tgz", + "integrity": "sha512-lxc3cpUZ28CqbrWcUHxGW/ObDpMOYbuxF/ZOzeFZq54P9uJ2Cpa8gcrC9F716mtuiMaekwk8D6n34vg/JtkkxQ==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.53.0" + "@opentelemetry/instrumentation": "^0.56.0" }, "engines": { "node": ">=14" @@ -5676,17 +5766,19 @@ "version": "0.36.2", "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", "engines": { "node": ">=14" } }, "node_modules/@opentelemetry/resources": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.26.0.tgz", - "integrity": "sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/semantic-conventions": "1.27.0" + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -5695,29 +5787,15 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.26.0.tgz", - "integrity": "sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==", - "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/resources": "1.26.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz", - "integrity": "sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==", + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.26.0", - "@opentelemetry/resources": "1.26.0", - "@opentelemetry/semantic-conventions": "1.27.0" + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -5727,9 +5805,10 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", - "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5738,6 +5817,7 @@ "version": "0.40.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^1.1.0" }, @@ -5796,19 +5876,21 @@ } }, "node_modules/@prisma/instrumentation": { - "version": "5.19.1", - "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.19.1.tgz", - "integrity": "sha512-VLnzMQq7CWroL5AeaW0Py2huiNKeoMfCH3SUxstdzPrlWQi6UQ9UrfcbUkNHlVFqOMacqy8X/8YtE0kuKDpD9w==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.22.0.tgz", + "integrity": "sha512-LxccF392NN37ISGxIurUljZSh1YWnphO34V5a0+T7FVQG2u9bhAXRTJpgmQ3483woVhkraQZFF7cbRrpbw/F4Q==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.8", - "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51 || ^0.52.0", + "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51 || ^0.52.0 || ^0.53.0", "@opentelemetry/sdk-trace-base": "^1.22" } }, "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/api-logs": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", - "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.0.0" }, @@ -5817,12 +5899,13 @@ } }, "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", - "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@types/shimmer": "^1.0.2", + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", @@ -6363,16 +6446,18 @@ "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==" }, "node_modules/@rollup/plugin-commonjs": { - "version": "26.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.1.tgz", - "integrity": "sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==", + "version": "28.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.1.tgz", + "integrity": "sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==", + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", - "glob": "^10.4.1", + "fdir": "^6.2.0", "is-reference": "1.2.1", - "magic-string": "^0.30.3" + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" }, "engines": { "node": ">=16.0.0 || 14 >= 14.17" @@ -6389,16 +6474,44 @@ "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", - "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -6415,7 +6528,20 @@ "node_modules/@rollup/pluginutils/node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -6455,92 +6581,89 @@ } }, "node_modules/@sentry-internal/browser-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.33.1.tgz", - "integrity": "sha512-TW6/r+Gl5jiXv54iK1xZ3mlVgTS/jaBp4vcQ0xGMdgiQ3WchEPcFSeYovL+YHT3tSud0GZqVtDQCz+5i76puqA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.49.0.tgz", + "integrity": "sha512-XkPHHdFqsN7EPaB+QGUOEmpFqXiqP67t2rRZ1HG1UwJoe0PhJEKNy7b4+WRwmT7ODSt+PvFk1gNBlJBpThwH7Q==", + "license": "MIT", "dependencies": { - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" + "@sentry/core": "8.49.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.33.1.tgz", - "integrity": "sha512-qauMRTm3qDaLqZ3ibI03cj4gLF40y0ij65nj+cns6iWxGCtPrO8tjvXFWuQsE7Aye9dGMnBgmv7uN+NTUtC3RA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.49.0.tgz", + "integrity": "sha512-v/wf7WvPxEvZUB7xrCnecI3fhevVo84hw8WlxgZIz6mLUHXEIX8xYWc9H8Yet/KKJ2uEB8GQ8aDsY6S1hVEIUA==", + "license": "MIT", "dependencies": { - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" + "@sentry/core": "8.49.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.33.1.tgz", - "integrity": "sha512-fm4coIOjmanU29NOVN9MyaP4fUCOYytbtFqVSKRFNZQ/xAgNeySiBIbUd6IjujMmnOk9bY0WEUMcdm3Uotjdog==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.49.0.tgz", + "integrity": "sha512-BDiiCBxskkktTd6FNplBc9V8l14R4T/AwRIZj2itX4xnuHewTTDjVbeyvGol4roA4r+V0Mzoi31hLEGI6yFQ5Q==", + "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.33.1", - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" + "@sentry-internal/browser-utils": "8.49.0", + "@sentry/core": "8.49.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.33.1.tgz", - "integrity": "sha512-nsxTFTPCT10Ty/v6+AiST3+yotGP1sUb8xqfKB9fPnS1hZHFryp0NnEls7xFjBsBbZPU1GpFkzrk/E6JFzixDQ==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.49.0.tgz", + "integrity": "sha512-/yXxI7f+Wu24FIYoRE7A0AidNxORuhAyPzb5ey1wFqMXP72nG8dXhOpcl0w+bi554FkqkLjdeUDhSOBWYZXH9g==", + "license": "MIT", "dependencies": { - "@sentry-internal/replay": "8.33.1", - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" + "@sentry-internal/replay": "8.49.0", + "@sentry/core": "8.49.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/babel-plugin-component-annotate": { - "version": "2.22.3", - "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.3.tgz", - "integrity": "sha512-OlHA+i+vnQHRIdry4glpiS/xTOtgjmpXOt6IBOUqynx5Jd/iK1+fj+t8CckqOx9wRacO/hru2wfW/jFq0iViLg==", + "version": "2.22.7", + "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.7.tgz", + "integrity": "sha512-aa7XKgZMVl6l04NY+3X7BP7yvQ/s8scn8KzQfTLrGRarziTlMGrsCOBQtCNWXOPEbtxAIHpZ9dsrAn5EJSivOQ==", + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/@sentry/browser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.33.1.tgz", - "integrity": "sha512-c6zI/igexkLwZuGk+u8Rj26ChjxGgkhe6ZbKFsXCYaKAp5ep5X7HQRkkqgbxApiqlC0LduHdd/ymzh139JLg8w==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.49.0.tgz", + "integrity": "sha512-dS4Sw2h8EixHeXOIR++XEVMTen6xCGcIQ/XhJbsjqvddXeIijW0WkxSeTfPkfs0dsqFHSisWmlmo0xhHbXvEsQ==", + "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.33.1", - "@sentry-internal/feedback": "8.33.1", - "@sentry-internal/replay": "8.33.1", - "@sentry-internal/replay-canvas": "8.33.1", - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" + "@sentry-internal/browser-utils": "8.49.0", + "@sentry-internal/feedback": "8.49.0", + "@sentry-internal/replay": "8.49.0", + "@sentry-internal/replay-canvas": "8.49.0", + "@sentry/core": "8.49.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/bundler-plugin-core": { - "version": "2.22.3", - "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.3.tgz", - "integrity": "sha512-DeoUl0WffcqZZRl5Wy9aHvX4WfZbbWt0QbJ7NJrcEViq+dRAI2FQTYECFLwdZi5Gtb3oyqZICO+P7k8wDnzsjQ==", + "version": "2.22.7", + "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.7.tgz", + "integrity": "sha512-ouQh5sqcB8vsJ8yTTe0rf+iaUkwmeUlGNFi35IkCFUQlWJ22qS6OfvNjOqFI19e6eGUXks0c/2ieFC4+9wJ+1g==", + "license": "MIT", "dependencies": { "@babel/core": "^7.18.5", - "@sentry/babel-plugin-component-annotate": "2.22.3", - "@sentry/cli": "^2.33.1", + "@sentry/babel-plugin-component-annotate": "2.22.7", + "@sentry/cli": "2.39.1", "dotenv": "^16.3.1", "find-up": "^5.0.0", "glob": "^9.3.2", @@ -6555,6 +6678,7 @@ "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -6572,6 +6696,7 @@ "version": "0.30.8", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -6583,6 +6708,7 @@ "version": "8.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6597,15 +6723,17 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/@sentry/cli": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.37.0.tgz", - "integrity": "sha512-fM3V4gZRJR/s8lafc3O07hhOYRnvkySdPkvL/0e0XW0r+xRwqIAgQ5ECbsZO16A5weUiXVSf03ztDL1FcmbJCQ==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.39.1.tgz", + "integrity": "sha512-JIb3e9vh0+OmQ0KxmexMXg9oZsR/G7HMwxt5BUIKAXZ9m17Xll4ETXTRnRUBT3sf7EpNGAmlQk1xEmVN9pYZYQ==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.7", @@ -6620,19 +6748,20 @@ "node": ">= 10" }, "optionalDependencies": { - "@sentry/cli-darwin": "2.37.0", - "@sentry/cli-linux-arm": "2.37.0", - "@sentry/cli-linux-arm64": "2.37.0", - "@sentry/cli-linux-i686": "2.37.0", - "@sentry/cli-linux-x64": "2.37.0", - "@sentry/cli-win32-i686": "2.37.0", - "@sentry/cli-win32-x64": "2.37.0" + "@sentry/cli-darwin": "2.39.1", + "@sentry/cli-linux-arm": "2.39.1", + "@sentry/cli-linux-arm64": "2.39.1", + "@sentry/cli-linux-i686": "2.39.1", + "@sentry/cli-linux-x64": "2.39.1", + "@sentry/cli-win32-i686": "2.39.1", + "@sentry/cli-win32-x64": "2.39.1" } }, "node_modules/@sentry/cli-darwin": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.37.0.tgz", - "integrity": "sha512-CsusyMvO0eCPSN7H+sKHXS1pf637PWbS4rZak/7giz/z31/6qiXmeMlcL3f9lLZKtFPJmXVFO9uprn1wbBVF8A==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.39.1.tgz", + "integrity": "sha512-kiNGNSAkg46LNGatfNH5tfsmI/kCAaPA62KQuFZloZiemTNzhy9/6NJP8HZ/GxGs8GDMxic6wNrV9CkVEgFLJQ==", + "license": "BSD-3-Clause", "optional": true, "os": [ "darwin" @@ -6642,12 +6771,13 @@ } }, "node_modules/@sentry/cli-linux-arm": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.37.0.tgz", - "integrity": "sha512-Dz0qH4Yt+gGUgoVsqVt72oDj4VQynRF1QB1/Sr8g76Vbi+WxWZmUh0iFwivYVwWxdQGu/OQrE0tx946HToCRyA==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.39.1.tgz", + "integrity": "sha512-DkENbxyRxUrfLnJLXTA4s5UL/GoctU5Cm4ER1eB7XN7p9WsamFJd/yf2KpltkjEyiTuplv0yAbdjl1KX3vKmEQ==", "cpu": [ "arm" ], + "license": "BSD-3-Clause", "optional": true, "os": [ "linux", @@ -6658,12 +6788,13 @@ } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.37.0.tgz", - "integrity": "sha512-2vzUWHLZ3Ct5gpcIlfd/2Qsha+y9M8LXvbZE26VxzYrIkRoLAWcnClBv8m4XsHLMURYvz3J9QSZHMZHSO7kAzw==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.39.1.tgz", + "integrity": "sha512-5VbVJDatolDrWOgaffsEM7znjs0cR8bHt9Bq0mStM3tBolgAeSDHE89NgHggfZR+DJ2VWOy4vgCwkObrUD6NQw==", "cpu": [ "arm64" ], + "license": "BSD-3-Clause", "optional": true, "os": [ "linux", @@ -6674,13 +6805,14 @@ } }, "node_modules/@sentry/cli-linux-i686": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.37.0.tgz", - "integrity": "sha512-MHRLGs4t/CQE1pG+mZBQixyWL6xDZfNalCjO8GMcTTbZFm44S3XRHfYJZNVCgdtnUP7b6OHGcu1v3SWE10LcwQ==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.39.1.tgz", + "integrity": "sha512-pXWVoKXCRrY7N8vc9H7mETiV9ZCz+zSnX65JQCzZxgYrayQPJTc+NPRnZTdYdk5RlAupXaFicBI2GwOCRqVRkg==", "cpu": [ "x86", "ia32" ], + "license": "BSD-3-Clause", "optional": true, "os": [ "linux", @@ -6691,12 +6823,13 @@ } }, "node_modules/@sentry/cli-linux-x64": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.37.0.tgz", - "integrity": "sha512-k76ClefKZaDNJZU/H3mGeR8uAzAGPzDRG/A7grzKfBeyhP3JW09L7Nz9IQcSjCK+xr399qLhM2HFCaPWQ6dlMw==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.39.1.tgz", + "integrity": "sha512-IwayNZy+it7FWG4M9LayyUmG1a/8kT9+/IEm67sT5+7dkMIMcpmHDqL8rWcPojOXuTKaOBBjkVdNMBTXy0mXlA==", "cpu": [ "x64" ], + "license": "BSD-3-Clause", "optional": true, "os": [ "linux", @@ -6707,13 +6840,14 @@ } }, "node_modules/@sentry/cli-win32-i686": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.37.0.tgz", - "integrity": "sha512-FFyi5RNYQQkEg4GkP2f3BJcgQn0F4fjFDMiWkjCkftNPXQG+HFUEtrGsWr6mnHPdFouwbYg3tEPUWNxAoypvTw==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.39.1.tgz", + "integrity": "sha512-NglnNoqHSmE+Dz/wHeIVRnV2bLMx7tIn3IQ8vXGO5HWA2f8zYJGktbkLq1Lg23PaQmeZLPGlja3gBQfZYSG10Q==", "cpu": [ "x86", "ia32" ], + "license": "BSD-3-Clause", "optional": true, "os": [ "win32" @@ -6723,12 +6857,13 @@ } }, "node_modules/@sentry/cli-win32-x64": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.37.0.tgz", - "integrity": "sha512-nSMj4OcfQmyL+Tu/jWCJwhKCXFsCZW1MUk6wjjQlRt9SDLfgeapaMlK1ZvT1eZv5ZH6bj3qJfefwj4U8160uOA==", + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.39.1.tgz", + "integrity": "sha512-xv0R2CMf/X1Fte3cMWie1NXuHmUyQPDBfCyIt6k6RPFPxAYUgcqgMPznYwVMwWEA1W43PaOkSn3d8ZylsDaETw==", "cpu": [ "x64" ], + "license": "BSD-3-Clause", "optional": true, "os": [ "win32" @@ -6738,34 +6873,30 @@ } }, "node_modules/@sentry/core": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.33.1.tgz", - "integrity": "sha512-3SS41suXLFzxL3OQvTMZ6q92ZapELVq2l2SoWlZopcamWhog2Ru0dp2vkunq97kFHb2TzKRTlFH4+4gbT8SJug==", - "dependencies": { - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" - }, + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.49.0.tgz", + "integrity": "sha512-/OAm6LdHhh8TvfDAucWfSJV7M03IOHrJm5LVjrrKr4gwQ1HKd4CDbARsBbPwHIzSRAle0IgG3sbJxEvv52JUIw==", + "license": "MIT", "engines": { "node": ">=14.18" } }, "node_modules/@sentry/nextjs": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-8.33.1.tgz", - "integrity": "sha512-XLUyib6bCv2iynKaoYIotVKzLsGc9lr6QI4ZV3/PstiiXKwtTm1TPdBfIlrDJMGIMxH7Z/DmkvJNSESV19Ui6Q==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-8.49.0.tgz", + "integrity": "sha512-Spr/cp/ztJwZHOUjfSG8T51cLttCcfEoZvfmCQMAku7tLtUowzdTofUCw3DGPLAKY6aM8KUHVTVvUw2pFu91Ig==", + "license": "MIT", "dependencies": { - "@opentelemetry/instrumentation-http": "0.53.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@rollup/plugin-commonjs": "26.0.1", - "@sentry-internal/browser-utils": "8.33.1", - "@sentry/core": "8.33.1", - "@sentry/node": "8.33.1", - "@sentry/opentelemetry": "8.33.1", - "@sentry/react": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1", - "@sentry/vercel-edge": "8.33.1", - "@sentry/webpack-plugin": "2.22.3", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@rollup/plugin-commonjs": "28.0.1", + "@sentry-internal/browser-utils": "8.49.0", + "@sentry/core": "8.49.0", + "@sentry/node": "8.49.0", + "@sentry/opentelemetry": "8.49.0", + "@sentry/react": "8.49.0", + "@sentry/vercel-edge": "8.49.0", + "@sentry/webpack-plugin": "2.22.7", "chalk": "3.0.0", "resolve": "1.22.8", "rollup": "3.29.5", @@ -6775,89 +6906,82 @@ "node": ">=14.18" }, "peerDependencies": { - "next": "^13.2.0 || ^14.0 || ^15.0.0-rc.0", - "webpack": ">=5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } + "next": "^13.2.0 || ^14.0 || ^15.0.0-rc.0" } }, "node_modules/@sentry/node": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.33.1.tgz", - "integrity": "sha512-0Xmlrl5nU5Bx6YybaIfztyOIiIXW5X64vcK0u94Sg4uHcDO7YvEbhflKjp669ds2I6ZQ/czqxnaAY8gM6P2SCA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.49.0.tgz", + "integrity": "sha512-ui/X6AsHEc+TzgegW8Lq2dZvLHm2npaPMzeICdTotoR8S7LUgTXWfxpzKNra7K13QWY2A2AmabxKOSZJSnPHyQ==", + "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.25.1", - "@opentelemetry/core": "^1.25.1", - "@opentelemetry/instrumentation": "^0.53.0", - "@opentelemetry/instrumentation-amqplib": "^0.42.0", - "@opentelemetry/instrumentation-connect": "0.39.0", - "@opentelemetry/instrumentation-dataloader": "0.12.0", - "@opentelemetry/instrumentation-express": "0.42.0", - "@opentelemetry/instrumentation-fastify": "0.39.0", - "@opentelemetry/instrumentation-fs": "0.15.0", - "@opentelemetry/instrumentation-generic-pool": "0.39.0", - "@opentelemetry/instrumentation-graphql": "0.43.0", - "@opentelemetry/instrumentation-hapi": "0.41.0", - "@opentelemetry/instrumentation-http": "0.53.0", - "@opentelemetry/instrumentation-ioredis": "0.43.0", - "@opentelemetry/instrumentation-kafkajs": "0.3.0", - "@opentelemetry/instrumentation-koa": "0.43.0", - "@opentelemetry/instrumentation-lru-memoizer": "0.40.0", - "@opentelemetry/instrumentation-mongodb": "0.47.0", - "@opentelemetry/instrumentation-mongoose": "0.42.0", - "@opentelemetry/instrumentation-mysql": "0.41.0", - "@opentelemetry/instrumentation-mysql2": "0.41.0", - "@opentelemetry/instrumentation-nestjs-core": "0.40.0", - "@opentelemetry/instrumentation-pg": "0.44.0", - "@opentelemetry/instrumentation-redis-4": "0.42.0", - "@opentelemetry/instrumentation-undici": "0.6.0", - "@opentelemetry/resources": "^1.26.0", - "@opentelemetry/sdk-trace-base": "^1.26.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@prisma/instrumentation": "5.19.1", - "@sentry/core": "8.33.1", - "@sentry/opentelemetry": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1", - "import-in-the-middle": "^1.11.0" + "@opentelemetry/context-async-hooks": "^1.29.0", + "@opentelemetry/core": "^1.29.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/instrumentation-amqplib": "^0.45.0", + "@opentelemetry/instrumentation-connect": "0.42.0", + "@opentelemetry/instrumentation-dataloader": "0.15.0", + "@opentelemetry/instrumentation-express": "0.46.0", + "@opentelemetry/instrumentation-fastify": "0.43.0", + "@opentelemetry/instrumentation-fs": "0.18.0", + "@opentelemetry/instrumentation-generic-pool": "0.42.0", + "@opentelemetry/instrumentation-graphql": "0.46.0", + "@opentelemetry/instrumentation-hapi": "0.44.0", + "@opentelemetry/instrumentation-http": "0.56.0", + "@opentelemetry/instrumentation-ioredis": "0.46.0", + "@opentelemetry/instrumentation-kafkajs": "0.6.0", + "@opentelemetry/instrumentation-knex": "0.43.0", + "@opentelemetry/instrumentation-koa": "0.46.0", + "@opentelemetry/instrumentation-lru-memoizer": "0.43.0", + "@opentelemetry/instrumentation-mongodb": "0.50.0", + "@opentelemetry/instrumentation-mongoose": "0.45.0", + "@opentelemetry/instrumentation-mysql": "0.44.0", + "@opentelemetry/instrumentation-mysql2": "0.44.0", + "@opentelemetry/instrumentation-nestjs-core": "0.43.0", + "@opentelemetry/instrumentation-pg": "0.49.0", + "@opentelemetry/instrumentation-redis-4": "0.45.0", + "@opentelemetry/instrumentation-tedious": "0.17.0", + "@opentelemetry/instrumentation-undici": "0.9.0", + "@opentelemetry/resources": "^1.29.0", + "@opentelemetry/sdk-trace-base": "^1.29.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@prisma/instrumentation": "5.22.0", + "@sentry/core": "8.49.0", + "@sentry/opentelemetry": "8.49.0", + "import-in-the-middle": "^1.11.2" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/opentelemetry": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.33.1.tgz", - "integrity": "sha512-D2aE2G0DUHLLnfbOXrTjiNJKAs/RZfOBJMidI4fC2AIwqCmrp55Aex4dRq4hxd8MPLR92Kt/ikHeJxlzWB15KA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.49.0.tgz", + "integrity": "sha512-Ffasnpat8WhqvRB/DFbcGp+J+xh76NCztTDi6f3a1jBCONTJypHt2p5l9lJuu1O/UPN1vIJjOpUMOvdd0FHGVA==", + "license": "MIT", "dependencies": { - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" + "@sentry/core": "8.49.0" }, "engines": { "node": ">=14.18" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/core": "^1.25.1", - "@opentelemetry/instrumentation": "^0.53.0", - "@opentelemetry/sdk-trace-base": "^1.26.0", - "@opentelemetry/semantic-conventions": "^1.27.0" + "@opentelemetry/core": "^1.29.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/sdk-trace-base": "^1.29.0", + "@opentelemetry/semantic-conventions": "^1.28.0" } }, "node_modules/@sentry/react": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.33.1.tgz", - "integrity": "sha512-SsEX05xfcfOvo7/pK1UyeyTAYWH8iSIsXXlsjvnSRsbuJkjb0c+q6yiZpj3A2PRdbcx43nTVE1n0lSpgaqj2HA==", - "dependencies": { - "@sentry/browser": "8.33.1", - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.49.0.tgz", + "integrity": "sha512-yBMEqiUcN05Sv9CCb4YkvgyIvgLdgecBoZOazJLBiSQ6znoP4oiUfFNDi2TUk46gzqrttuOU0jfT1AVBJ2xgKQ==", + "license": "MIT", + "dependencies": { + "@sentry/browser": "8.49.0", + "@sentry/core": "8.49.0", "hoist-non-react-statics": "^3.3.2" }, "engines": { @@ -6867,44 +6991,26 @@ "react": "^16.14.0 || 17.x || 18.x || 19.x" } }, - "node_modules/@sentry/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.33.1.tgz", - "integrity": "sha512-GjoAMvwtpIemoF/IiwZ7A60g4nQv3qwzR21GvJqDVUoKD0e8pv9OLX+HyXoUat4wEDGSuDUcUyUKD2G+od73QA==", - "engines": { - "node": ">=14.18" - } - }, - "node_modules/@sentry/utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.33.1.tgz", - "integrity": "sha512-uzuYpiiJuFY3N4WNHMBWUQX5oNv2t/TbG0OHRp3Rr7yeu+HSfD542TIp9/gMZ+G0Cxd8AmVO3wkKIFbk0TL4Qg==", - "dependencies": { - "@sentry/types": "8.33.1" - }, - "engines": { - "node": ">=14.18" - } - }, "node_modules/@sentry/vercel-edge": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-8.33.1.tgz", - "integrity": "sha512-YKAsFAm4ctsKRdoS3LkYF4oG5BD1chT4Uqy4AaBhlz0s5iHxBI7YzZFbcW4YiNnDWT80tdF+FS7AvUAjy+npoA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@sentry/vercel-edge/-/vercel-edge-8.49.0.tgz", + "integrity": "sha512-zVdvAH2piiWFSzeNYvclzVmGQNfvpgqsMcr+yzH0n/hFZWBKUD7mJjqOPBR9YhElJZu7IrQb4tRvSXDvrM9NYw==", + "license": "MIT", "dependencies": { - "@sentry/core": "8.33.1", - "@sentry/types": "8.33.1", - "@sentry/utils": "8.33.1" + "@opentelemetry/api": "^1.9.0", + "@sentry/core": "8.49.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/webpack-plugin": { - "version": "2.22.3", - "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-2.22.3.tgz", - "integrity": "sha512-Sq1S6bL3nuoTP5typkj+HPjQ13dqftIE8kACAq4tKkXOpWO9bf6HtqcruEQCxMekbWDTdljsrknQ17ZBx2q66Q==", + "version": "2.22.7", + "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-2.22.7.tgz", + "integrity": "sha512-j5h5LZHWDlm/FQCCmEghQ9FzYXwfZdlOf3FE/X6rK6lrtx0JCAkq+uhMSasoyP4XYKL4P4vRS6WFSos4jxf/UA==", + "license": "MIT", "dependencies": { - "@sentry/bundler-plugin-core": "2.22.3", + "@sentry/bundler-plugin-core": "2.22.7", "unplugin": "1.0.1", "uuid": "^9.0.0" }, @@ -8616,6 +8722,7 @@ "version": "3.4.36", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8715,6 +8822,7 @@ "version": "2.15.26", "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8750,6 +8858,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "license": "MIT", "dependencies": { "@types/pg": "*" } @@ -8807,7 +8916,17 @@ "node_modules/@types/shimmer": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "license": "MIT" + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/trusted-types": { "version": "2.0.7", @@ -9220,6 +9339,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -10302,9 +10422,10 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" }, "node_modules/cli-cursor": { "version": "5.0.0", @@ -10485,7 +10606,8 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -11084,9 +11206,10 @@ } }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -12455,6 +12578,12 @@ "node": ">= 6" } }, + "node_modules/forwarded-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", + "license": "MIT" + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -12952,6 +13081,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" } @@ -13010,6 +13140,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -13065,9 +13196,10 @@ } }, "node_modules/import-in-the-middle": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.2.tgz", - "integrity": "sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.12.0.tgz", + "integrity": "sha512-yAgSE7GmtRcu4ZUSFX/4v69UGXwugFFSdIQJ14LHPOPPQrWv8Y7O9PHsw8Ovk7bKCLe4sjXMbZFqGFcLHpZ89w==", + "license": "Apache-2.0", "dependencies": { "acorn": "^8.8.2", "acorn-import-attributes": "^1.9.5", @@ -13468,6 +13600,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -14388,9 +14521,10 @@ } }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -15284,7 +15418,8 @@ "node_modules/module-details-from-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==", + "license": "MIT" }, "node_modules/mrmime": { "version": "2.0.0", @@ -15551,6 +15686,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -16679,6 +16815,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -16891,7 +17028,8 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", @@ -17312,9 +17450,10 @@ "dev": true }, "node_modules/require-in-the-middle": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", - "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.0.tgz", + "integrity": "sha512-/Tvpny/RVVicqlYTKwt/GtpZRsPG1CmJNhxVKGz+Sy/4MONfXCVNK69MFgGKdUt0/324q3ClI2dICcPgISrC8g==", + "license": "MIT", "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", @@ -17467,6 +17606,7 @@ "version": "3.29.5", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -17759,7 +17899,8 @@ "node_modules/shimmer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "license": "BSD-2-Clause" }, "node_modules/side-channel": { "version": "1.0.6", @@ -18615,7 +18756,8 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/trim-lines": { "version": "3.0.1", @@ -18949,6 +19091,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.0.1.tgz", "integrity": "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==", + "license": "MIT", "dependencies": { "acorn": "^8.8.1", "chokidar": "^3.5.3", @@ -19160,7 +19303,8 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/webpack": { "version": "5.95.0", @@ -19253,7 +19397,8 @@ "node_modules/webpack-virtual-modules": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==" + "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", + "license": "MIT" }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", @@ -19323,6 +19468,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" diff --git a/package.json b/package.json index 283aba71..7dff22fa 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@next/mdx": "^14.2.7", "@radix-ui/react-popover": "^1.1.1", "@radix-ui/react-switch": "^1.1.0", - "@sentry/nextjs": "^8.33.0", + "@sentry/nextjs": "^8.49.0", "@t3-oss/env-nextjs": "^0.11.1", "@tailwindcss/forms": "^0.5.8", "@tanstack/react-query": "^4.36.1", From 25e89d2c68b9b6889becf6d8f955cbf329ed225d Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Sun, 9 Feb 2025 14:47:22 +0000 Subject: [PATCH 16/55] fix: upgrade tailwind-merge from 2.5.3 to 2.5.4 (#1224) Snyk has created this PR to upgrade tailwind-merge from 2.5.3 to 2.5.4. See this package in npm: tailwind-merge See this project in Snyk: https://app.snyk.io/org/nialljoemaher/project/8ac19f6c-c7f2-4720-acd1-09701979877c?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot Co-authored-by: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9b51352b..dc9f38a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -89,7 +89,7 @@ "sharp": "^0.33.5", "sonner": "^1.5.0", "superjson": "^2.2.1", - "tailwind-merge": "^2.5.2", + "tailwind-merge": "^2.5.4", "tiptap-markdown": "^0.8.10", "zod": "^3.23.8" }, @@ -18484,9 +18484,10 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "node_modules/tailwind-merge": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.3.tgz", - "integrity": "sha512-d9ZolCAIzom1nf/5p4LdD5zvjmgSxY0BGgdSvmXIoMYAiPdAW/dSpP7joCDYFY7r/HkEa2qmPtkgsu0xjQeQtw==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" diff --git a/package.json b/package.json index 7dff22fa..8f093319 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "sharp": "^0.33.5", "sonner": "^1.5.0", "superjson": "^2.2.1", - "tailwind-merge": "^2.5.2", + "tailwind-merge": "^2.5.4", "tiptap-markdown": "^0.8.10", "zod": "^3.23.8" }, From 31ebc8240ec200ff5c31a4ca593d0e9c54519841 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Sun, 9 Feb 2025 15:09:40 +0000 Subject: [PATCH 17/55] fix: upgrade drizzle-orm from 0.34.1 to 0.36.0 (#1220) Snyk has created this PR to upgrade drizzle-orm from 0.34.1 to 0.36.0. See this package in npm: drizzle-orm See this project in Snyk: https://app.snyk.io/org/nialljoemaher/project/8ac19f6c-c7f2-4720-acd1-09701979877c?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot Co-authored-by: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> --- package-lock.json | 15 ++++++++++----- package.json | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index dc9f38a3..27bfb34b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "algoliasearch": "^5.7.0", "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", - "drizzle-orm": "^0.34.1", + "drizzle-orm": "^0.36.0", "fathom-client": "^3.7.2", "framer-motion": "^11.11.7", "highlight.js": "^11.10.0", @@ -11233,14 +11233,16 @@ } }, "node_modules/drizzle-orm": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.34.1.tgz", - "integrity": "sha512-t+zCwyWWt8xTqtYV4doE/xYmT7hpv1L8pQ66zddEz+3VWyedBBtctjMAp22mAJPfyWurRQXUJ1nrTtqLq+DqNA==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.36.0.tgz", + "integrity": "sha512-6BETYPdKSR7cDHC0ZfqZk2VrKJ8n/Rfd3ajFPsAbc69gi87nwZ6oBA2wUGMELHA0tQE4kUKN0Ds00LUZQ6Z69A==", + "license": "Apache-2.0", "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=3", - "@electric-sql/pglite": ">=0.1.1", + "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.1", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", @@ -11278,6 +11280,9 @@ "@libsql/client": { "optional": true }, + "@libsql/client-wasm": { + "optional": true + }, "@neondatabase/serverless": { "optional": true }, diff --git a/package.json b/package.json index 8f093319..40078f8d 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "algoliasearch": "^5.7.0", "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", - "drizzle-orm": "^0.34.1", + "drizzle-orm": "^0.36.0", "fathom-client": "^3.7.2", "framer-motion": "^11.11.7", "highlight.js": "^11.10.0", From 50eb9e9a65b9761008110d35d7e8b8f7392c1906 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Mon, 10 Feb 2025 09:13:51 +0000 Subject: [PATCH 18/55] fix: upgrade posthog-js from 1.167.0 to 1.180.0 (#1221) Snyk has created this PR to upgrade posthog-js from 1.167.0 to 1.180.0. See this package in npm: posthog-js See this project in Snyk: https://app.snyk.io/org/nialljoemaher/project/8ac19f6c-c7f2-4720-acd1-09701979877c?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot Co-authored-by: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> --- package-lock.json | 23 ++++++++++++++++++----- package.json | 2 +- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27bfb34b..62c27586 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,7 +74,7 @@ "nodemailer": "^6.9.14", "pg": "^8.12.0", "postgres": "^3.4.4", - "posthog-js": "^1.166.1", + "posthog-js": "^1.180.0", "prismjs": "^1.29.0", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -10659,6 +10659,17 @@ "toggle-selection": "^1.0.6" } }, + "node_modules/core-js": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", + "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.38.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", @@ -16663,13 +16674,15 @@ "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==" }, "node_modules/posthog-js": { - "version": "1.167.0", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.167.0.tgz", - "integrity": "sha512-/zXQ6tuJgiF1d4mgg3UsAi/uoyg7UnfFNQtikuALmaE53xFExpcAKbMfHPG/f54QgTvLxSHyGL1kFl/1uspkGg==", + "version": "1.180.0", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.180.0.tgz", + "integrity": "sha512-a+LTbmDUaHuskdIlRlTWWV1YOgQdfhhJJ8sSoW8+sCa+UrE8miD2B4Q2PtCj7mTcyNENu/ZR1VqkbfzIWRNWmQ==", + "license": "MIT", "dependencies": { + "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", - "web-vitals": "^4.0.1" + "web-vitals": "^4.2.0" } }, "node_modules/posthog-js/node_modules/preact": { diff --git a/package.json b/package.json index 40078f8d..ff8c671c 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "nodemailer": "^6.9.14", "pg": "^8.12.0", "postgres": "^3.4.4", - "posthog-js": "^1.166.1", + "posthog-js": "^1.180.0", "prismjs": "^1.29.0", "react": "^18.3.1", "react-dom": "^18.3.1", From 1e518e1e27ba02593c521a809cf8971784e25275 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Mon, 10 Feb 2025 10:15:32 +0000 Subject: [PATCH 19/55] fix: package.json & package-lock.json to reduce vulnerabilities (#1230) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-NEXT-8602067 Co-authored-by: snyk-bot Co-authored-by: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> --- package-lock.json | 99 ++++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 56 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 62c27586..8ebf05d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,7 +67,7 @@ "lowlight": "^3.1.0", "lucide-react": "^0.451.0", "nanoid": "^5.0.7", - "next": "^14.2.10", + "next": "^14.2.21", "next-auth": "^4.24.9", "next-safe-action": "^7.9.4", "next-themes": "^0.3.0", @@ -4956,9 +4956,10 @@ } }, "node_modules/@next/env": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.14.tgz", - "integrity": "sha512-/0hWQfiaD5//LvGNgc8PjvyqV50vGK0cADYzaoOOGN8fxzBn3iAiaq3S0tCRnFBldq0LVveLcxCTi41ZoYgAgg==" + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.21.tgz", + "integrity": "sha512-lXcwcJd5oR01tggjWJ6SrNNYFGuOOMB9c251wUNkjCpkoXOPkDeF/15c3mnVlBqrW4JJXb2kVxDFhC4GduJt2A==", + "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { "version": "14.2.14", @@ -5030,12 +5031,13 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.14.tgz", - "integrity": "sha512-bsxbSAUodM1cjYeA4o6y7sp9wslvwjSkWw57t8DtC8Zig8aG8V6r+Yc05/9mDzLKcybb6EN85k1rJDnMKBd9Gw==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.21.tgz", + "integrity": "sha512-HwEjcKsXtvszXz5q5Z7wCtrHeTTDSTgAbocz45PHMUjU3fBYInfvhR+ZhavDRUYLonm53aHZbB09QtJVJj8T7g==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -5045,12 +5047,13 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.14.tgz", - "integrity": "sha512-cC9/I+0+SK5L1k9J8CInahduTVWGMXhQoXFeNvF0uNs3Bt1Ub0Azb8JzTU9vNCr0hnaMqiWu/Z0S1hfKc3+dww==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.21.tgz", + "integrity": "sha512-TSAA2ROgNzm4FhKbTbyJOBrsREOMVdDIltZ6aZiKvCi/v0UwFmwigBGeqXDA97TFMpR3LNNpw52CbVelkoQBxA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -5060,12 +5063,13 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.14.tgz", - "integrity": "sha512-RMLOdA2NU4O7w1PQ3Z9ft3PxD6Htl4uB2TJpocm+4jcllHySPkFaUIFacQ3Jekcg6w+LBaFvjSPthZHiPmiAUg==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.21.tgz", + "integrity": "sha512-0Dqjn0pEUz3JG+AImpnMMW/m8hRtl1GQCNbO66V1yp6RswSTiKmnHf3pTX6xMdJYSemf3O4Q9ykiL0jymu0TuA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -5075,12 +5079,13 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.14.tgz", - "integrity": "sha512-WgLOA4hT9EIP7jhlkPnvz49iSOMdZgDJVvbpb8WWzJv5wBD07M2wdJXLkDYIpZmCFfo/wPqFsFR4JS4V9KkQ2A==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.21.tgz", + "integrity": "sha512-Ggfw5qnMXldscVntwnjfaQs5GbBbjioV4B4loP+bjqNEb42fzZlAaK+ldL0jm2CTJga9LynBMhekNfV8W4+HBw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -5090,12 +5095,13 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.14.tgz", - "integrity": "sha512-lbn7svjUps1kmCettV/R9oAvEW+eUI0lo0LJNFOXoQM5NGNxloAyFRNByYeZKL3+1bF5YE0h0irIJfzXBq9Y6w==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.21.tgz", + "integrity": "sha512-uokj0lubN1WoSa5KKdThVPRffGyiWlm/vCc/cMkWOQHw69Qt0X1o3b2PyLLx8ANqlefILZh1EdfLRz9gVpG6tg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -5105,12 +5111,13 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.14.tgz", - "integrity": "sha512-7TcQCvLQ/hKfQRgjxMN4TZ2BRB0P7HwrGAYL+p+m3u3XcKTraUFerVbV3jkNZNwDeQDa8zdxkKkw2els/S5onQ==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.21.tgz", + "integrity": "sha512-iAEBPzWNbciah4+0yI4s7Pce6BIoxTQ0AGCkxn/UBuzJFkYyJt71MadYQkjPqCQCJAFQ26sYh7MOKdU+VQFgPg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -5120,12 +5127,13 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.14.tgz", - "integrity": "sha512-8i0Ou5XjTLEje0oj0JiI0Xo9L/93ghFtAUYZ24jARSeTMXLUx8yFIdhS55mTExq5Tj4/dC2fJuaT4e3ySvXU1A==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.21.tgz", + "integrity": "sha512-plykgB3vL2hB4Z32W3ktsfqyuyGAPxqwiyrAi2Mr8LlEUhNn9VgkiAl5hODSBpzIfWweX3er1f5uNpGDygfQVQ==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -5135,12 +5143,13 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.14.tgz", - "integrity": "sha512-2u2XcSaDEOj+96eXpyjHjtVPLhkAFw2nlaz83EPeuK4obF+HmtDJHqgR1dZB7Gb6V/d55FL26/lYVd0TwMgcOQ==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.21.tgz", + "integrity": "sha512-w5bacz4Vxqrh06BjWgua3Yf7EMDb8iMcVhNrNx8KnJXt8t+Uu0Zg4JHLDL/T7DkTCEEfKXO/Er1fcfWxn2xfPA==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -5150,12 +5159,13 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.14.tgz", - "integrity": "sha512-MZom+OvZ1NZxuRovKt1ApevjiUJTcU2PmdJKL66xUPaJeRywnbGGRWUlaAOwunD6dX+pm83vj979NTC8QXjGWg==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.21.tgz", + "integrity": "sha512-sT6+llIkzpsexGYZq8cjjthRyRGe5cJVhqh12FmlbxHqna6zsDDK8UNaV7g41T6atFHCJUPeLb3uyAwrBwy0NA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -15490,11 +15500,12 @@ "peer": true }, "node_modules/next": { - "version": "14.2.14", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.14.tgz", - "integrity": "sha512-Q1coZG17MW0Ly5x76shJ4dkC23woLAhhnDnw+DfTc7EpZSGuWrlsZ3bZaO8t6u1Yu8FVfhkqJE+U8GC7E0GLPQ==", + "version": "14.2.21", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.21.tgz", + "integrity": "sha512-rZmLwucLHr3/zfDMYbJXbw0ZeoBpirxkXuvsJbk7UPorvPYZhP7vq7aHbKnU7dQNCYIimRrbB2pp3xmf+wsYUg==", + "license": "MIT", "dependencies": { - "@next/env": "14.2.14", + "@next/env": "14.2.21", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -15509,15 +15520,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.14", - "@next/swc-darwin-x64": "14.2.14", - "@next/swc-linux-arm64-gnu": "14.2.14", - "@next/swc-linux-arm64-musl": "14.2.14", - "@next/swc-linux-x64-gnu": "14.2.14", - "@next/swc-linux-x64-musl": "14.2.14", - "@next/swc-win32-arm64-msvc": "14.2.14", - "@next/swc-win32-ia32-msvc": "14.2.14", - "@next/swc-win32-x64-msvc": "14.2.14" + "@next/swc-darwin-arm64": "14.2.21", + "@next/swc-darwin-x64": "14.2.21", + "@next/swc-linux-arm64-gnu": "14.2.21", + "@next/swc-linux-arm64-musl": "14.2.21", + "@next/swc-linux-x64-gnu": "14.2.21", + "@next/swc-linux-x64-musl": "14.2.21", + "@next/swc-win32-arm64-msvc": "14.2.21", + "@next/swc-win32-ia32-msvc": "14.2.21", + "@next/swc-win32-x64-msvc": "14.2.21" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", diff --git a/package.json b/package.json index ff8c671c..56744cd9 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "lowlight": "^3.1.0", "lucide-react": "^0.451.0", "nanoid": "^5.0.7", - "next": "^14.2.10", + "next": "^14.2.21", "next-auth": "^4.24.9", "next-safe-action": "^7.9.4", "next-themes": "^0.3.0", From a72f2f56b6df8c145060fae61a79277097893de6 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 11 Feb 2025 19:20:59 +0000 Subject: [PATCH 20/55] this weeks newsletter (#1244) --- .../page.mdx | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 app/(app)/letters/want-to-level-up-start-writing-about-code/page.mdx diff --git a/app/(app)/letters/want-to-level-up-start-writing-about-code/page.mdx b/app/(app)/letters/want-to-level-up-start-writing-about-code/page.mdx new file mode 100644 index 00000000..87daac5f --- /dev/null +++ b/app/(app)/letters/want-to-level-up-start-writing-about-code/page.mdx @@ -0,0 +1,83 @@ +Tue, Feb 11, 2025 • Niall Maher + +# Want to Level Up? Start Writing About Code + +Writing about coding might not seem important, but it can help you learn and grow as a developer. When you write about what you learn, you remember it better. You also get better at solving problems because you have to explain your thinking clearly. + +Writing is also a great way to track your progress. You can look back and see how much you've learned over time. It also helps you explain ideas better, which is useful when working with a team or in job interviews. + +Sharing your writing can also help your career. When people read what you write, they see you as someone who knows a lot. This can lead to job offers, speaking opportunities, and new connections. Many developers grow faster in their careers because they share what they learn. + +You don’t have to publish everything. You can keep notes for yourself using apps like Notion or Evernote. But if you want to share, you can use a blog or platforms like Codú, Dev.to, or Medium. Even posting short insights on LinkedIn or X (Twitter) can help you connect with others in tech. + +The key is to keep things simple. If you can explain something in a way that anyone can understand, it means you really know it well. + +Want to dive deeper? Read the full article here: [Full Article](https://www.codu.co/articles/why-writing-about-coding-improves-your-learning-journey-afcri7zg) + +## 📚 **This Week's Picks** + +**[Building an "Easy" Web Application (6 min)](https://rudyfaile.com/2020/07/06/building-an-easy-web-application)** +What does it really take to build a simple web app? This post explores the challenges that developers face when trying to make something "easy." + +**[On Product-Market Fit (9 min)](https://cra.mr/on-product-market-fit/)** +A deep dive into the journey of Sentry over the last 15 years. The author shares honest insights on the challenges of finding product-market fit and the endurance needed to succeed. + +**[Create React App Deprecation (Issue Open)](https://github.com/facebook/create-react-app/issues/17004)** +Create React App (CRA) is being deprecated. If you're still using it, now's the time to start looking for alternatives. + +**[Cloudflare Incident on February 6, 2025 (7 min)](https://blog.cloudflare.com/cloudflare-incident-on-february-6-2025/)** +Cloudflare's R2 storage and other services were down for nearly an hour. This post breaks down what happened and how it impacted developers. + +**[Dexie.js (tool)](https://dexie.org/)** +Dexie.js is a lightweight wrapper for IndexedDB that makes working with client-side databases much easier. If you're storing data in the browser, this tool is worth checking out. + +**[Oracle Justified Its JavaScript Trademark with Node.js (4 min)](https://deno.com/blog/deno-v-oracle2)** +Oracle’s legal battle over the "JavaScript" trademark just took a new turn. They’re using Node.js as part of their defense—this post explains what’s going on and why it matters. + +**[The Vatican Has Some Thoughts on AI (9 min)](https://every.to/napkin-math/the-vatican-has-some-thoughts-on-ai)** +Here's something I definitely wasn't expecting a statement on. The Catholic Church has released a statement on AI, sharing its thoughts on the differences between human and machine intelligence and how AI should be used. + +## 📖 **Book of the Week** + +**[The Coming Wave: AI, Power and Our Future](https://amzn.to/40ADtxW)** + +Most AI books today are rushed cash grabs, but this one stands apart. Written by Mustafa Suleyman, co-founder of DeepMind (now part of Google), _The Coming Wave_ offers an insider’s perspective on how AI and other emerging technologies—synthetic biology, quantum computing, and autonomous systems—will transform society. + +Suleyman explores how these breakthroughs will bring immense prosperity but also unprecedented risks, challenging global stability and governance. The book introduces _the containment problem_: how do we keep these powerful technologies under control while maximizing their benefits? + +For developers, this book is an essential read. AI is no longer an abstract concept—it’s shaping the tools we build and the decisions we make. Understanding the broader impact of this technology will help you navigate the future, both as a creator and as a citizen. + +## 🛠️ **Something Cool** + +**[Use the Index, Luke!](https://use-the-index-luke.com/)** + +A great guide that explains SQL indexing to developers, focusing on query optimization and performance tuning. + +## 🧠 AI Crush CFP + +I'm hosting my first conference! + +It's called AI Crush and it's in Belfast. We are looking for presenters to share their insights on May 9th, 2025. This inaugural event represents a unique opportunity to be part of something special in Northern Ireland's growing tech scene. + +Whether you're building AI-powered applications, exploring machine learning architectures, or implementing practical AI solutions, we want to hear your story. As a first-year conference, speakers have the rare opportunity to help shape the event's direction and be part of its founding moment. + +Think you've got something valuable to share? Know someone who does? The CFP (Call for Presentations) is open now - don't miss your chance to be part of this groundbreaking event! + +It's dual track (one stage for developers and one for leadership) so we need talks for both stages. + +Here's the link: [https://www.crushconf.com/cfp](https://www.crushconf.com/cfp) + +## 🔗 Quick Links + +- [Codú Facebook](https://www.facebook.com/profile.php?id=61570877292755) +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From e75f79160d54333858e31484d68cb70b5401765e Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Wed, 12 Feb 2025 20:29:41 +0000 Subject: [PATCH 21/55] fix: package.json & package-lock.json to reduce vulnerabilities (#1227) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-NANOID-8492085 Co-authored-by: snyk-bot Co-authored-by: Carolina Cobo Co-authored-by: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> --- package-lock.json | 9 +++++---- package.json | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ebf05d2..ae403ebf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,7 +66,7 @@ "isomorphic-dompurify": "^2.16.0", "lowlight": "^3.1.0", "lucide-react": "^0.451.0", - "nanoid": "^5.0.7", + "nanoid": "^5.0.9", "next": "^14.2.21", "next-auth": "^4.24.9", "next-safe-action": "^7.9.4", @@ -15471,15 +15471,16 @@ } }, "node_modules/nanoid": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", - "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.js" }, diff --git a/package.json b/package.json index 56744cd9..326d7747 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "isomorphic-dompurify": "^2.16.0", "lowlight": "^3.1.0", "lucide-react": "^0.451.0", + "nanoid": "^5.0.9", "nanoid": "^5.0.7", "next": "^14.2.21", "next-auth": "^4.24.9", From 787ecd4434a9e51a91c81f1915c2463174e88077 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Wed, 12 Feb 2025 21:15:31 +0000 Subject: [PATCH 22/55] fix: cdk/package.json & cdk/package-lock.json to reduce vulnerabilities (#1239) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JS-AWSCDKLIB-8647962 Co-authored-by: snyk-bot Co-authored-by: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> --- cdk/package-lock.json | 131 +++++++++++++++++++++--------------------- cdk/package.json | 2 +- 2 files changed, 66 insertions(+), 67 deletions(-) diff --git a/cdk/package-lock.json b/cdk/package-lock.json index 8419ce1c..08ef9214 100644 --- a/cdk/package-lock.json +++ b/cdk/package-lock.json @@ -8,7 +8,7 @@ "name": "cdk-pipeline-codu", "version": "0.1.0", "dependencies": { - "aws-cdk-lib": "^2.148.0", + "aws-cdk-lib": "^2.177.0", "constructs": "^10.4.2", "source-map-support": "^0.5.21" }, @@ -41,19 +41,36 @@ } }, "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.202", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz", - "integrity": "sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg==" + "version": "2.2.221", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.221.tgz", + "integrity": "sha512-+Vu2cMvgtkaHwNezrTVng4+FAMAWKJTkC/2ZQlgkbY05k0lHHK/2eWKqBhTeA7EpxVrx9uFN7GdBFz3mcThpxg==", + "license": "Apache-2.0" }, "node_modules/@aws-cdk/asset-kubectl-v20": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz", - "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", + "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==", + "license": "Apache-2.0" }, "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.3.tgz", - "integrity": "sha512-twhuEG+JPOYCYPx/xy5uH2+VUsIEhPTzDY0F1KuB+ocjWWB/KEDiOVL19nHvbPCB6fhWnkykXEMJ4HHcKvjtvg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", + "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==", + "license": "Apache-2.0" + }, + "node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "39.2.10", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-39.2.10.tgz", + "integrity": "sha512-TpMEalAybKtRKoKUsJsg1Jp27jIaQUwwjNniZEVLDRDn/ATEMBkcTnUOSbCePSk5fJNmp5wHew0Z03eNxDsjkQ==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "~1.4.1", + "semver": "^7.7.0" + } }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", @@ -2998,9 +3015,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.148.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.148.0.tgz", - "integrity": "sha512-Pa0pyIHlhnsqtMkPJS3tnptYhoOSNDOgoFurNB4Qfa0vnAkjYQ+JKQkR1tNNr8+UtO9jUfXRklQgjEqlFlrgBA==", + "version": "2.177.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.177.0.tgz", + "integrity": "sha512-nTnHAwjZaPJ5gfJjtzE/MyK6q0a66nWthoJl7l8srucRb+I30dczhbbXor6QCdVpJaTRAEliMOMq23aglsAQbg==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -3016,18 +3033,19 @@ ], "license": "Apache-2.0", "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.202", - "@aws-cdk/asset-kubectl-v20": "^2.1.2", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.3", + "@aws-cdk/asset-awscli-v1": "^2.2.208", + "@aws-cdk/asset-kubectl-v20": "^2.1.3", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-schema": "^39.2.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^11.2.0", - "ignore": "^5.3.1", + "ignore": "^5.3.2", "jsonschema": "^1.4.1", "mime-types": "^2.1.35", "minimatch": "^3.1.2", "punycode": "^2.3.1", - "semver": "^7.6.2", + "semver": "^7.6.3", "table": "^6.8.2", "yaml": "1.10.2" }, @@ -3159,14 +3177,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.3.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "inBundle": true, @@ -3250,17 +3260,6 @@ "node": ">=0.10.0" } }, - "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.6.2", - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/aws-cdk-lib/node_modules/slice-ansi": { "version": "4.0.0", "inBundle": true, @@ -5397,7 +5396,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -5983,19 +5981,28 @@ } }, "@aws-cdk/asset-awscli-v1": { - "version": "2.2.202", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz", - "integrity": "sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg==" + "version": "2.2.221", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.221.tgz", + "integrity": "sha512-+Vu2cMvgtkaHwNezrTVng4+FAMAWKJTkC/2ZQlgkbY05k0lHHK/2eWKqBhTeA7EpxVrx9uFN7GdBFz3mcThpxg==" }, "@aws-cdk/asset-kubectl-v20": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz", - "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", + "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==" }, "@aws-cdk/asset-node-proxy-agent-v6": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.3.tgz", - "integrity": "sha512-twhuEG+JPOYCYPx/xy5uH2+VUsIEhPTzDY0F1KuB+ocjWWB/KEDiOVL19nHvbPCB6fhWnkykXEMJ4HHcKvjtvg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", + "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==" + }, + "@aws-cdk/cloud-assembly-schema": { + "version": "39.2.10", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-39.2.10.tgz", + "integrity": "sha512-TpMEalAybKtRKoKUsJsg1Jp27jIaQUwwjNniZEVLDRDn/ATEMBkcTnUOSbCePSk5fJNmp5wHew0Z03eNxDsjkQ==", + "requires": { + "jsonschema": "~1.4.1", + "semver": "^7.7.0" + } }, "@aws-crypto/crc32": { "version": "5.2.0", @@ -8405,22 +8412,23 @@ } }, "aws-cdk-lib": { - "version": "2.148.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.148.0.tgz", - "integrity": "sha512-Pa0pyIHlhnsqtMkPJS3tnptYhoOSNDOgoFurNB4Qfa0vnAkjYQ+JKQkR1tNNr8+UtO9jUfXRklQgjEqlFlrgBA==", - "requires": { - "@aws-cdk/asset-awscli-v1": "^2.2.202", - "@aws-cdk/asset-kubectl-v20": "^2.1.2", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.3", + "version": "2.177.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.177.0.tgz", + "integrity": "sha512-nTnHAwjZaPJ5gfJjtzE/MyK6q0a66nWthoJl7l8srucRb+I30dczhbbXor6QCdVpJaTRAEliMOMq23aglsAQbg==", + "requires": { + "@aws-cdk/asset-awscli-v1": "^2.2.208", + "@aws-cdk/asset-kubectl-v20": "^2.1.3", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-schema": "^39.2.0", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^11.2.0", - "ignore": "^5.3.1", + "ignore": "^5.3.2", "jsonschema": "^1.4.1", "mime-types": "^2.1.35", "minimatch": "^3.1.2", "punycode": "^2.3.1", - "semver": "^7.6.2", + "semver": "^7.6.3", "table": "^6.8.2", "yaml": "1.10.2" }, @@ -8506,10 +8514,6 @@ "version": "4.2.11", "bundled": true }, - "ignore": { - "version": "5.3.1", - "bundled": true - }, "is-fullwidth-code-point": { "version": "3.0.0", "bundled": true @@ -8560,10 +8564,6 @@ "version": "2.0.2", "bundled": true }, - "semver": { - "version": "7.6.2", - "bundled": true - }, "slice-ansi": { "version": "4.0.0", "bundled": true, @@ -10138,8 +10138,7 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "shebang-command": { "version": "2.0.0", diff --git a/cdk/package.json b/cdk/package.json index 519f6fc5..022aad8e 100644 --- a/cdk/package.json +++ b/cdk/package.json @@ -22,7 +22,7 @@ "typescript": "^5.5.3" }, "dependencies": { - "aws-cdk-lib": "^2.148.0", + "aws-cdk-lib": "^2.177.0", "constructs": "^10.4.2", "source-map-support": "^0.5.21" } From e332aa9db2e0d79f7bbeb1e8a5a15f216d2601e2 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 18 Feb 2025 16:01:32 +0000 Subject: [PATCH 23/55] This weeks newsletter (#1246) --- app/(app)/letters/nasas-dev-rules/page.mdx | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 app/(app)/letters/nasas-dev-rules/page.mdx diff --git a/app/(app)/letters/nasas-dev-rules/page.mdx b/app/(app)/letters/nasas-dev-rules/page.mdx new file mode 100644 index 00000000..6f3b7f1d --- /dev/null +++ b/app/(app)/letters/nasas-dev-rules/page.mdx @@ -0,0 +1,80 @@ +Tue, Feb 18, 2025 • Niall Maher + +# 🆕 AI insights, NASA’s dev rules, and free mentorship! + +Kickstart your week with mentorship, insights, and community support! + +Every Monday at **10:30 AM (GMT)**, we host **free mentor sessions** on the Codú Discord—a space to ask questions, get real-world guidance, and level up your web dev journey. + +It’s been over a year since I last mentioned this in the newsletter, so here’s your reminder! If you’ve got coding roadblocks, career questions, or just want to hang out with other developers, this is the place to be. + +Not in the Discord or missing your invite? **Just reply to this email, and I’ll get you sorted!** + +## 📚 **This Week's Picks** + +**[JavaScript Temporal is Coming (5 min)](https://developer.mozilla.org/en-US/blog/javascript-temporal-is-coming)** +Say goodbye to JavaScript’s painful date handling! The new `Temporal` API is rolling out in experimental browser releases, bringing a modern, robust way to work with dates and times. No more `Date` object headaches—this is a big deal for web developers. + +**[Want to Understand How AI Like ChatGPT Really Works? (Video)](https://www.youtube.com/watch?v=7xTGNNLPyMI)** +Andrej Karpathy breaks down how AI language models like ChatGPT actually function. He covers how they learn from massive datasets, process language, and generate responses. If you’ve ever wondered what’s happening under the hood, this deep dive (3.5 hours long) is one of the best explanations out there. + +**[Replace Your JavaScript Animation Library with View Transitions (15 min)](https://www.builder.io/blog/view-transitions)** +The new View Transitions API in Chrome and Safari makes web animations way easier. Instead of juggling animation libraries, you can now create smooth transitions with just HTML, CSS, and a bit of JavaScript. This is a game-changer for web performance and maintainability. + +**[Emittery (GitHub Repo)](https://github.com/sindresorhus/emittery)** +A modern, simple async event emitter for both Node.js and the browser. Great for when you need decoupled, scalable event handling without blocking the main thread. Perfect for high-performance apps. + +**[A Guide to Modern Frontend Architecture Patterns (9 min)](https://blog.logrocket.com/guide-modern-frontend-architecture-patterns)** +Frontend architectures keep evolving, and this guide breaks down the latest patterns—component-driven, micro-frontends, server components, and more. If you’re wondering which approach fits your next project, this is a solid read. + +**[The Popover API is Now Baseline Newly Available (2 min)](https://web.dev/blog/popover-baseline)** +The Popover API finally gets full browser support! After some confusion over its official release, it’s now officially part of the Baseline set of web standards. A handy built-in way to create tooltips, modals, and popups without extra JavaScript. + +**[NASA Has a List of 10 Rules for Software Development (17 min)](https://www.cs.otago.ac.nz/cosc345/resources/nasa-10-rules.htm)** +NASA’s software rules were made for space missions, but are they useful for regular dev work? Some are overly strict (no dynamic memory allocation?!), but there are still valuable takeaways. Worth a read to see what works and what doesn’t for modern projects. + +**[We Replaced Our React Frontend with Go and WebAssembly (9 min)](https://dagger.io/blog/replaced-react-with-go)** +Dagger swapped its React frontend for a Go + WebAssembly solution, reducing complexity and improving performance. Instead of maintaining two codebases (Go for the CLI, React for the UI), they unified everything under Go. A bold move—will more teams follow? + +## 📖 **Book of the Week** + +**[The Innovators: How a Group of Hackers, Geniuses, and Geeks Created the Digital Revolution](https://amzn.to/4hEIj4Q) – Walter Isaacson** + +Just finished this, and it’s an incredible deep dive into the history of computer science and the people who built the digital world we live in today. Isaacson does a great job highlighting not just the big names like Alan Turing and Steve Jobs, but also the often-overlooked engineers, programmers, and visionaries who shaped modern computing. + +If you’re a developer, this book is a must-read—it’s packed with stories of creativity, collaboration, and technical breakthroughs that remind us why innovation isn’t just about lone geniuses but about teams pushing boundaries together. Highly recommended! + +## 🛠️ **Something Cool** + +**[Doom on WebAssembly](https://silentspacemarine.com/)** + +Someone got classic Doom running in WebAssembly. Because of course they did. Relive the 90s, directly in your browser! + +## 🧠 AI Crush CFP + +I'm hosting my first conference! + +It's called AI Crush and it's in Belfast. We are looking for presenters to share their insights on May 9th, 2025. This inaugural event represents a unique opportunity to be part of something special in Northern Ireland's growing tech scene. + +Whether you're building AI-powered applications, exploring machine learning architectures, or implementing practical AI solutions, we want to hear your story. As a first-year conference, speakers have the rare opportunity to help shape the event's direction and be part of its founding moment. + +Think you've got something valuable to share? Know someone who does? The CFP (Call for Presentations) is open now - don't miss your chance to be part of this groundbreaking event! + +It's dual track (one stage for developers and one for leadership) so we need talks for both stages. + +Here's the link: [https://www.crushconf.com/cfp](https://www.crushconf.com/cfp) + +## 🔗 Quick Links + +- [Codú Facebook](https://www.facebook.com/profile.php?id=61570877292755) +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 43f9845f1e5ed4c73d5021997c2f3561a845727d Mon Sep 17 00:00:00 2001 From: Carolina Cobo <58437550+CarolinaCobo@users.noreply.github.com> Date: Fri, 28 Feb 2025 22:15:45 +0000 Subject: [PATCH 24/55] Add ninedots (#1251) --- app/(app)/company/[slug]/config.ts | 10 ++++ app/(app)/company/[slug]/page.tsx | 76 ++++++++++++++++++++++++++++ app/(app)/sponsorship/page.tsx | 14 +++-- public/images/sponsors/ninedots.png | Bin 0 -> 11459 bytes 4 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 app/(app)/company/[slug]/config.ts create mode 100644 app/(app)/company/[slug]/page.tsx create mode 100644 public/images/sponsors/ninedots.png diff --git a/app/(app)/company/[slug]/config.ts b/app/(app)/company/[slug]/config.ts new file mode 100644 index 00000000..62878ee4 --- /dev/null +++ b/app/(app)/company/[slug]/config.ts @@ -0,0 +1,10 @@ +export const companies = [ + { + slug: "ninedots", + name: "Ninedots", + bio: "Trusted talent partner based in Dublin and Bahrain. We specialise in everything within the tech ecosystem, including marketing and tech sales. However, if we can’t assist, we won’t tell you we can. What we CAN do is steer you in the right direction - we believe it doesn’t cost to be helpful!", + note: "We’re incredibly grateful to Ninedots for supporting our tech community since April! Your generosity has helped us grow, bring people together, and create amazing learning opportunities through events, workshops, and networking sessions. Your support means the world to us, and we couldn’t do this without you.Thanks for believing in our mission and being a part of our journey—we’re excited for what’s ahead!", + image: "/images/sponsors/ninedots.png", + url: "https://ninedots.io", + }, +]; diff --git a/app/(app)/company/[slug]/page.tsx b/app/(app)/company/[slug]/page.tsx new file mode 100644 index 00000000..a951a5e5 --- /dev/null +++ b/app/(app)/company/[slug]/page.tsx @@ -0,0 +1,76 @@ +import { notFound } from "next/navigation"; +import { companies } from "./config"; + +export const metadata = { + title: "Ninedots Recruitment | Codu", + description: + "Explore our community sponsors. Ninedots Recruitment connects top talent with leading companies in the tech industry.", +}; + +type Props = { params: { slug: string } }; + +export default async function Page({ params }: Props) { + const { slug } = params; + + const company = companies.find((item) => item.slug === slug.toLowerCase()); + + if (!company) return notFound(); + + return ( +
+
+ {/* Sponsor Header */} +
+
+
+ {`${company.name} +
+ +
+

+ {company.name} +

+

+ {company.bio} +

+ + {company.url && ( + + Visit website + + + + + )} +
+
+
+ +
+
+ ); +} diff --git a/app/(app)/sponsorship/page.tsx b/app/(app)/sponsorship/page.tsx index f88d581c..b7c7b23a 100644 --- a/app/(app)/sponsorship/page.tsx +++ b/app/(app)/sponsorship/page.tsx @@ -1,3 +1,5 @@ +import Link from "next/link"; + export const metadata = { title: "Sponsor Codú - And Reach More Developers!", description: @@ -60,11 +62,13 @@ const Sponsorship = () => {
- StaticKit + + StaticKit +
1OGYh9#t7L29X` zbBTAqzxR)upF4Bs%$+kc&vWh#_|Q;3(I0wEkZ8bsbvvfVerjHt+|y? z3$2<^ZX^0KBe%M>)7KzX#p8}p(AN8_el!kmyEgSWj5e_R1UZc zzb{)3bDz$6{)-7a7AJ~%8SRyeF!x4 zezw3cyjOAP59=OA0m5)Ioya^UukMwhZYVH9#tV&DZ@BuFyCg8pnH`|EWIz(UGxG zGQX$_^v$0RDFx+)V;AIiC4f(bZ%J!y#8E9H8r5!pq&H%^a`2F5ywm89b~@WWMbo=T=h!f8D5e_a;d2{SOJxk%Y;Qy3w-UZ%mmx4CSsaDygtGz8b*)` zZYO4XYqkwpy;0#bgYvkz9?h7(jk@$aIJAH#B7!bL+ z|K+_fv~Wz}_Gy$02pKW=$3Cyl0Tk`l>)Ig6@dpU)iN0_sl_qOi2sh&f(KAjVXBRRv zf$f*fVa9Ip`!)%m+H=n`0@Ds&GM<}SuqV)u)+?4uO1pg?^p>nU$+ zaD#6v9@pqJ=K0>p_Fv$Yqimz<(usH&AY!tFZUgIFvu^D~S|FgR2;OusBwvk<8-MXj zC`w=DMFK`FnNi%C`4(2D^IY_^&JW?fKs@KwSl7AtNnx$zE%(;{2@u1*CfyHT6J@Z6 zO-+OmNol=~1CI9>$eO0edAalf^8S1sP~AzAv@Hmm?8Lf!Pwi~>N+{yQ#7ZN<{xFU2 zr+xy4o8dKjWJpWZhkw2a7L1^NNqI?|+IA&ebp)vt*`Eyl$~!@r42f z^F_qy9qnXwPba97wa3MPTFEUtIg_crENkcwtF(p|N|kB>LcAG|0g zDJ_zNllU0uyo{m)#eg3O{Xl!4AfPQy!*lE+ zzDgb2m%koMqu?c7=#PRbL8aj)M$hY@oY~rU;c}wE6YaV#xn`apG+hXmcb9EK+=bEl z8DDcM;%!q{?2&)Z%sF)FUEql!w^!hV_Hz0u0Lzc&4w&C-RPH>clGqo@JsUmg>U~60 zufaDUu&u0;wU7B0KYrgiUL{Bv;~nR%PTUW;HHPdIoa^F8Xaq4Vm;q{P81jZDZj)BO z+G2dv=xL9ocz^0aji1EZklr*dT+%RYx6-0Sj@WNn0f&94moJNJA5_@PYN6}9_DMgK z->fPu@EzFDUI((4eZya@FTWdaLGcw_cUs=;FHY62tR6Ib2iJ(=kN^EXKUG&-(#R4e z$1V;)s8&*_aJ3SCcJW$uh|Kkj;O?%N$sE7BtGU`*FV13lbgRs=J~HoRnHGKj6=l-Soqi7G4RYx}dp?)!v;Z9{qLanB_bpJ|`~HDEdGF{~!m+ zn-q{o)8hcQOnTb5C#d@`_`#>@TNc3_(PH=Jmkf$Hezb6#iE&;d@RCcacn>Ln%>IpZ(z;aW&XC2qVhLdssw>mnrnpH)+^8S z4;Z`+y%Bk?VurSFOx)LIK6VZHCrnk5JXy{RDU?LDq%cTa zTZC8}`z>6$mu*J9m6cL^*EmKzDE@%YpJgDOxHmV2GTv`}q%G>{xiwTbT;nd3|DR1C`3R6OGr>%ebjPNXZu?>xr*wFG1I6dm;_gyoLH%(E%)T$ z_sPyc1^ls%?47h%PDXzyr3=#I8e{6!bz%aBYnOb^xvxW|<1`p3p7~?xcm~$y-D@YY zOzupRCZ!1$*-QY!uZW81vxgDDm(TAf?us%B49ydRH-ll&bU8!LzauR)3wnMJW!Px_ z<}`Y}(%GVuMMfa~-|zcQ2Fs#`;wLIc>Ph&R83cy%wSB)x`H0ZJUl5%-zQM|i_J7w` z5KS4)(VlbP^1!4J8b4m$ zuzhq~)KYpgS!vckZISdJ@fh)o;oa5{JYB(qL|e`-r78F6Ipe<6BDdbnne4~nL#QK6 ztz+vwx~uU1`nQNYS-uQc3-_9-6xo-G#;>YZiKq-edVu!ck~e<(D%Y(Y$Fz|wwK52T z+i^nRG}Q6;%8a6_>=@Axgy?v&H=-YEPh7y84@{`}(ekg+4{_?(tw(B6QjbU^>}p|T zcMS0Tq>f2{g4Y{KMF406T<=-GIKmN5WX$7~EJwRdiXX|eF~!WM&u{sW$A768dGBMz zVAMeTSn9loaqC=!9L&1(kykV@sp5eKvC2cwa-MzAgJXwgztXP;6`>5J z&6>>yXFve-Ljzk~3f~lVvHh*fph2N+Li@NT=4NpV++8`Qof&PV^)U2B$}|WKTE~99 z1pYh7SX~PCRdbP`C5Ny@9dInA1qz5v(r&A-h~B+djmf>8Z;|Jw*wKJHO;iU|#K-^+?&~q_y0$G68j2Hy&j61qZSSp# zIAn_UiMlV4wC6l-6?*uM(Dz%+Ojy|y$QN(2aEY#Tbga&YmRjL@lZ$=%I5&k&d{;CK)V8|smS9tG%-XO$u4;m>b!e3{Rkdl5MLzwhEtd-T= z0v>urj}ZUn{!dzk2?X>=u$@(S5#Hhdn}ve5e-5C(lpO+Gk1rnGJg`YnJ(8uR3S!vK zqTKHmjBGmnMToPb2rsvK_KG^fHD;1sC?p<3blrdW>7bI{-?WER69nV6J@z9#ZF{#A z#7z<|K1SC{Sg6DdbbLh$781LHKZf$qL@8E1ga|zFEG}kD>Ik-KjjH96=x!%ZTOcs` z@N)b4i8v{EI?k=FF5|cDde(hkeZJ^dZ8A#riY3!JWh50vqC){ABp}3~@x+eVAj;Sz zt2T^iF-k%ISK^^2z^+>LNs}zCgz?c(OTPj7s>MUa1H`{$L zCwb^L3M=|sq%<@|Y~wwF*N^Tb9Az#Ex81)BGFFj8viY>hvRyj(Swdi15&TF=T%36` zGfZw0P`zMB_OMRsX7n8?zqU)E_A$DVz#yo8Cade)9YdJ~Z4$gmX07qf&^_1qgWpJ0 zKCExnayzTeRv5C3WG*wEm^%}=q6%79xL+W{{5p)e{b-*&TV#Ph=Z-wHfg3cun13Vk zKHfN4lkv$@nE5}m@$qNDC4_-w>_>L|Svc2U8{SW<(D(TwVF*c!<}@&c?|ch3AuZ`qau)9hu9`eAvM;~i zSnS!$alQghqTJP~>yIu}!T4CP3iaIgReniK@8xe_#L^=x;~Y~yw!H}_+Ws7QC}H^I z$?xC~6@!zu4~Jf^$(e(Fc#qQaL{<_;ysP@O^_xnWzpWev0n9XS=nJbBd#7z50j?k- z&GwA|U(jdlU(bc{PYaWkheTN8pJi@$r&S!#f<6)QD)N))>8tP5Z_Zo-0Xa3m0n6pW za8{uM+Eq{f0~-n$pt;CS(O=IK%?22B>5Pp#3dgB)o@f zOvFjH!b|w~OYK+abAF25rNXo*?WoanamVy_`|Vxg+rmGT!~nP4|AY>@o}O#PmWSNq zOzz=259@69>}|U`wDFQs@fHn?&~m6|&0#C&UxoCMSrAD)@qzPE{FfSuCRncSrqOp` ziXZnji>MbVEuV;#=X(Q-h}F^-MD+4UrR-B==1D!+L>$e2qNzI*+afqnUtH)fR?N}N zBsm1Qbkoh?K5E^~D~7>3L{e{WGF@t&P=nEz#DZM0s}bWGROrS~A3p0Mk2T46bifmD zv4Iw!I~pJHKkPf?NGhAL+ z5kQhNQg5_~7B}g0B6Alnc_}u^&E(u*57@(e+rBYjC%zO|q1Q&?>}BcFT{UgRuEB4W z@m~*wQQ^v&c-yCJ>|;tLVo!pzLTb$(*|>=EJ*WplmGQ}={QlSODJBq(S-#33)$Ea5 zh%raj^0KU`dij7o=P)?JwO#Np{Ba;$mMwL`uJeZ4tGTm= z5~kZ%Rnp(tOv^UOXjFoyxV3JsQO#w#5n{!I4zEj>mV@0Eve^k_$%$@BPvO<3iElK1 zRAOM89IZ_YCZ>Wnb+hwnm|B2#et5w7=3;&}Zl;W~XG5)inxcl5J%$t_DYi@UshK-` zcE{XSGED+=v;*LGQP+xTHjm|(wF5gFw|WHN#Z%H3zs{a|p<*1q9n&o?Y53YC*^rv? zUL{vs zZ9noabusFuWG4U)Y&JP_8?hzx$yPelk#V<( zKm7Y@s$lAC4zIq&4^i{@!#Tgd%M6PR@u2BYj22P;-0vR@-vnBhSY!sv{Slhmv0^|l?n`*nkhvbg2 zYXRtUd^3_%?TMnR?H|tAFH3wIm5sQ`&e}LoeqS!Vm;$Jq2x-*bjx;`VbcWUc#;LNZOcxJq zQesx0i{VzD1`k&mGVNNz$zL)5bT6DjtWu`U{I(JxC%6#~#6|=} zaw3Koad+Pg_PJV;oUiVeT5{C>=U|b6(r}j*s}*K49)w`%z(FUoMY|{MS-;EH(L31E z>Uhxat^^F$jt1?nyXR83iRr31@ssi-l#lYId!#(z@8zO4y@OhgF)UY_9$I1-x+55~ z@*u&^VUZpSDRvmY+7qfa-K=NWg?;1eQ)IyN%;11+9+##cCbp3QsNT5D0$#MG$s{BxbDekA~MpKVwrEdW=t zI(L3IzM9!E`Og-u-ZvTjy_kTc^9s3hul}TFaZyC?nW`w=sMf`701b`g#YGboYBaZ9 z0E9?{HI*$oEN>FwPe4yV6Q2jFNXR31`p0u@2r`6t1oJn^dS`7zH8GHZbdtKWr{|`c zd#i8$KAY3JFaiL^RB;OOdm!Ru48Jqa_G3u5$R(IP-L9nODP?>!{IWRTY0;q}NoPOZ zEOiXW5CV|p@nY>!tJ~ca=9U67_@I6y^Hrpl6^lfSRfl+y0)ReI+v{GH8;iQ5%oN|C z=FbIHQ+u7AML1)(SBYOZW9aU(yg39&kntxThU;O19XqlRAZUE-=VZ=Y@|dCek1o$r z!!Ac5IM&ycl#94q}}_b!`z{usuN`a#rIb53AH(txZN@Nl&ljKKs-U_RpW%=UTBux zihnv`DJd5DTmm2wb859V>IM-U3jjjC#=^96-xw}}_e{8{C^Z5z%f5!ft>J(+osiZ?c zVoqE55*hiTUG|yr$v{c7=KM4kJ_3&~mR~YV>aY@@lx3%@v;xt*E#j zZ}~yatAW)SIo#|ME9H_oG{Z7!S6lk{t|50lnk^^nU|T8isrGDqTv`eB+hLbrbH{u$lZ6-HlBA&x$|>6Fr0VB zB6>Cap6fwLIfC3v8MP&zg)46$;rM`Oj4> zBz=nFy2@YA95)@Ydex8HUhpC0p7CrP^1R`W+;&?jD=)|RA{3wa?gjoqI1sBg9@qQv zWHN)HcZ7;xoU&5rnaJHln@KwpKPAhfvz~_~km+4UU#{8zqj!978&8dZjxqHA=#Qg- zO{uTfnwXSc$7`G$w~3u-PT^vLbQj87)ZsjgxRdJXd2zS-lS!goRsM$h-2GYV8$?|y za+<8mzkIXT91M^k%pbN9{G=yI^ZX0*WL#9Mh$yZy(whumnh?&EL|;v!no z_5=eCb*OX?;Z4b$J+|o*pXi_ND@f$-OaPAtk@#8zLs->b(n1@sZ z2nDcS*DT=Zg7IurHpO$bP>3cRY^lJ~M&9}~&H#A##Q6U5(xwok)E2U^#7hQ{(5(CB z^n^-kJglPQD{~5re_^-NQk?wHb(TcmA@L$&CfSr$5~0~X?VaGWN5hY8?UOB36MI&J zfwpwOm1og8@R_UJe*@-PjBP>6Y5}C)2lPfX;cZIJ?16CE++zic6 zP+*FO1R2U>1v4V2uCoMDqI$Yr6ZFLUmAnAlkbtL`+=x`4KHlgyirCN-BCqB+5m}wP z#TC5au^R4{AQb8v)ygM`bmA7j1Ws|Nwpqs3d}gaX5-LfQtG6-uqH$1%KI4c#KM-&s z;^MUnagma*fKLX2DZ-Ve-7OQI2e=4EDgP-RDrMabxS>Z2Pti}U&eX*#O(Sa$lD5J% z!ewLgwr&<$MmcM>XB4n_j??|E>)%PQUAsA@jJ^CLYlPj4JjU3M`B7}u{2No_d;b}; z^<*(*1`g#x@VmxcN4vtGF&gHI9M|p}i<~I`xQco0`g$4EYC#@ggS=j}zVn!=e;PFA zN{;ni2M2f@dEJ~_kM7-3TQ&2PF!oqWH|<9OAq*UogvqHri%P1kJH77FJT+fQA^byL z{eC{NWir+GK|))N%vGb3c@!cLzr6Q62GVx@OXuHUS~gNDt>GcMYZv5RA=r)8AdzVH zv;{L#&8wm5rJ>f*m*;cMclptO*VVmaJwnC!WZ+WO*irI~a$Lz#Kfg1V=spWOsjv?? z?t3?|icW%iAf*G^JV=bw&u${(!8=_7z*ZvW|$`acs z{V8%^QpRI}UrYxX|8^7H&AY@LXFp=)! z`KkPGxuTvR^W+MtUs5Ws9X5IMjpP$0iFy_d-03H*5oa@^vk_Vm-sIsnC?6ftYZ}T8 z0>&ZQUm_ttM7;96-HoN|sG<3<|1$T;7Ap9Iy?e|Z^BF%*uGr`rrjTUKrOHVGAdxVZ zs4C6bzlXN8PYE)}1P&&Gbp#F!7S1X|UjK4<*zkpzr#HtE@v1ikyw{adyN!F{Ir_mr zisRAeF%*lOAiHm}S@RMJe$`D%0XRO#Vx$4Q*ZIBiC_DO&-w$dFnWiPkI6HjIT2qxz z=V7zFX;DIr9UIi`5o0Fxe7FawUoXFQPOLk(gHK44URQk1oLbOi@dd3{r35P2$mUlT zg#ym=A6Hk9U?L^i`CLtN;!p;#^8&-BV&r(2~SJMUdebMu)D!@wuKoH^#f=gDG{ql%*ho zjL(&g8S3vn;3gCqxDRO7s+)PM&>}yHG>VGu4RY-HpG=%mKE5ZXw=1pMm>~sCG)$`r zcs;o^Is`rOuROIe1EO)c_9idnt3QbnKqCJe7#`tm4pMx^k96v5XCb(0K*?23GNBcp z;cVwp?9latn_O72_)2{=Gp1eQ+QUV7JgjYwq$gG7u$-Bog&TN+vz zt1mDug;s*Psfyi~Bmp`8=}pF0Dqg~@*Tgv{ts!q(bD$uoI$fXcwk1c%rF+{u86o>sq(Q08NgGlKZX=xVdJMam}Y-VuP>&DwV z-QCesvuXcWb`?No{htG}YA4ybrOaO%S&O>wS$fts;`wEpXcL3B?4f<)$M;DX^Z-|k zfZtgrH>L=E7X;}>s0=}dymj@mm`;4Rf9cc=YQUKPdtUi$nu5%7XPYN^mT846Kb1K*tmPUFyCxB40I0v~xMOCZoUXsr)b)sL zp*C(up8dzHB%yqP1VPkd1`FCPrj=f&QWr-m`TwOb&mZs-Uqbi2Sl` zQz;E*>NAKUISBvoOZ0y=n5{f@^J|@8%|RD~ueUfKch@=gL214WfkMF7mRblvg4B&5 z(r(SXoiXXz=5!Ja8eC>|_~;`vD`)lwpCBXL9~(}}MFiThS$=k24E_67DJc~pIkFfL zw{ZBdq%!Mh6GPi@@{&{l*?Sm}p}u(i#G$p;65#u^rVjd)1zcTKQh!V2GHvbdv)(010N>6^9tFJ`cL?b!IIceo)P9 zEQ}@Ghw~)8wijwoan;2HQC;mN~U!_=`HHtN4!0}Z- zZIWdr5(cU@4D<&Yf<_M{1NSG9;?6OjjV`RJu}&IXiTBm_YHNqrq1tR$Rte_v`I@dM;Jsl)#GG z`nEul@l|9&0mp1NHKzsX*QgDCgn<;q!-xA$E8wYwjQgFqlmoiW4AC+gd~m{vV~JVS zdqt6fx6%X|7^E~a%Gmex2EBY#E?ykK?3EJ|uFF7=u8G@MJr|iodhF+#>#7PMi){fg zTqa;S%T0ErVWUAyRrfJAIiTYur^Rt;*l8v12Hi{Fz0Qcv5A9?4Y-|Ic9=4R0yvB{} zyg{12I2#LcC*9V^-p>AhctZ8#y_u!{eNKwy06WqQkHDVF9px_k5cYt31Dlniw`cR8FoCsCD@uXfAEPDeIWDBmJUm z)~)a#uJG9yUpR@SJS!HtkJyh%Q1S=e0=Gr&T|Yg4D{UamGj+a!8+`5!N#Lj)_B!^$ zP(fyxU794YE!%od#YOqn8^vuQ-11x?W#88;96*o}JKK)3C`t^=;v{yA`sxImX&WW-5*OZ z=O6zxxmeUZ3o*=u`D#oyaBpZBb4)U}w<7(D;@F5g*rL`|HIiLfHK>ojiLz-NichbJ zIKRsT+~Q_$)FWlm>jiG$iVMY3up&mYDC)Hgvke>JG0W8q_sLxZT8rVOB1M~9`Cm~l z(g6HZ|4p3J=L4a&OHKKrxZCDz_ zJ?G~p&r2{b8XoK+svb<(eJbc>_Kg`pJ>elY@EGCQn|J;+Z)^=f)%o_tghW@kcq;WL zMK3UcJ_}8>Tl{}dtdTmv7|NE$tJ;R14+hiJj+DnKgVzH&;*8%%t*ez@(fo5d5leo% zu){O0-$qk~Tjf{2oI&?iJ(fqUTYb8IItYZmy*fsrHNTqnGUnN6Pt64D6qx7?=iRw5 zPSrbGHF0fm?Rd@e1KHmO&(XLI*-5*4nG)8VPJyWCf#4DMM|Zx?%!)f~N;FBNe2JZWKYrAAZSULgUW+W_<8^g;AB^V; zHkBLdv5^gH`(L*!ocii_?SoNx+SJpITO;Cd=g!Og`Lb8D=;ModW*MY2lN;=G*T#i1 zvNhSEPh~*vrwI9jfa;9;7q$@`x6XJ!NT)T$p`p42`>kl}ltA)=kSS$DT$UYoNbQ@C?zdpgCZOsj0 z&Mm&g%dY1nA400mBQqImbcb8q9?+v3A-c_GMeo;=;)Rsmg)UpBoGPaeB;V#W-btK6 z4EJ=~N0$@R50 zvJ^(@0Z`ks{+A0{e;Kz!E*K(Q^|5KY5q{87ptRN&nl9QxRygsDBmkhv8I>y4DG$*` zB?YT~kZ9wG2aY68H}cr#X;zCYQOKlK&qVvZUb`vw{3xdy7h5anmLxe`K+8LApXIWZ zFmm_i`VxMF_09BeKjKCN^}iSj0}b$L)9zHdFX-5)t50Qa3tGbyX}8|0Eb6++S6`*_ z6!!>QP^Mth?2zL+*}R&++;cC5L-N(g$2ZTYP7fLzUF8bXxgBQLw3Z<7Na5lQ!BlYr zkXg)_wcOQhU$B@>npaj2vAo$|4SQ9((CHj-%uG^EUWK1#CP#Ug*M|3wU+xQ%H`%+> ztOf5DA-E1y9($j2lGKsKNyk6oL(*xT$$;mOUKjcXJ3qfzaNBte)4sV{yI~+q{uynV zrDTyvl2oq}gad9AqCvYVGTZAZr_?y+>`f0rfWMmVvC@EX?$r2t3yvjwlZl$(3~}>o zqP_Yge8~GdE+En(nQ5sP7;IJ$w&Blgbbl!+EaW5kw~XV=*h@JaInxt$6bmxTo@OUt z0FBpR{YUG05TN^HS_7fx8t&B`CO^qs{dGQ29;RmsaO8eYbg9C@!1S|3Xt!@|A6K83 zlXl)zp{`VXv(>r=hZv0`U*S;Sdc= z=X5T11M`pCOObaJ#t@D<9(!C5P6bONO12yucC(M9R;uf)HKr@m|xz?*AdqcGbW9t|qfCMEa zjUDo}!>8uc5!~NfqGxw2m{v6C`1Gz!=^t_D-M#R4^7af}eYk&&@$l4?v=qzaErb6L DC3(aF literal 0 HcmV?d00001 From 8d6c2124ccc3470f798ad6398c6eb18a2e007444 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 4 Mar 2025 20:42:47 +0000 Subject: [PATCH 25/55] This weeks newsletter (#1253) --- .../page.mdx | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 app/(app)/letters/are-ai-tools-making-young-devs-lazy/page.mdx diff --git a/app/(app)/letters/are-ai-tools-making-young-devs-lazy/page.mdx b/app/(app)/letters/are-ai-tools-making-young-devs-lazy/page.mdx new file mode 100644 index 00000000..dc646455 --- /dev/null +++ b/app/(app)/letters/are-ai-tools-making-young-devs-lazy/page.mdx @@ -0,0 +1,78 @@ +Tuesday, March 4th, 2025 • Niall Maher + +# Why We Abandoned Next.js + Other Developer Confessions This Week + +_Sorry for the radio silence – I've been busy building._ + +I know I missed sending out last week's newsletter, but I had a good reason – I was heads down launching my very first product with plans to be profitable! Say hello to [Eventson](https://www.eventson.co/), a platform I've been pouring my heart and soul into. More details on that journey soon! + +## **🎟️ AI Crush Conference – Your Early Support Deserves a Reward!** + +I want to sincerely thank all of you for your incredible interest and support as we've been getting AI Crush off the ground. It's been my first conference, and I won't lie – it's been stressful! But seeing your enthusiasm has made it all worthwhile. + +After weeks of stress, late nights, and endless emails, I'm thrilled to announce that tickets for AI Crush are officially on sale! The CFP closes tonight, and over the next two weeks, we'll be announcing our incredible lineup of speakers and the full agenda. + +**Codú community early discount**: Use code _EARLYCRUSH_ for 30% off your ticket! This discount is only available for the next 12 days, so don't wait too long. + +This is the absolute best price we will release so if you are going to buy I recommend doing it now! + +I'll be sending a separate reminder tomorrow as well for the first time so apologies if it's too much, but I want to make sure that folks get this offer while they can. + +Checkout the [website here](https://www.crushconf.com/) for the current speaker list and you can buy tickets on Eventson [here](https://www.eventson.co/219e4b9a-228e-4b58-878b-6c77fda837c0). + +## **This Week's Picks** + +📝 [**Using AI in the Browser for Typo Rewriting** (8 min)](https://www.raymondcamden.com/2025/02/27/using-ai-in-the-browser-for-typo-rewriting)Chrome’s new built-in AI APIs can now fix typos in user input. This post explores the Prompt API (which improves clarity but slightly alters text) and the Rewriter API (which stays true to the original but isn’t perfect). Includes hands-on code examples! + +⚡️ [**Why We Ditched Next.js and Never Looked Back** (8 min)](https://northflank.com/blog/why-we-ditched-next-js-and-never-looked-back)Northflank dropped Next.js after facing SEO issues, performance slowdowns at scale, and frustrating debugging. They switched to a custom React SSR setup with Express. Interesting read for anyone reconsidering their frontend stack. + +🎮 [**I Struggled with Git, So I’m Making a Game to Spare Others the Pain** (15 min)](https://initialcommit.com/blog/im-making-a-git-game)After battling Git’s learning curve, this dev built **Git-Sim** to visualize commands. But they didn’t stop there—now they’re creating **Devlands**, a voxel-based game where you explore Git concepts interactively. A fresh take on learning version control! + +🎨 [**Knowing CSS Is Mastery in Frontend Development** (4 min)](https://helloanselm.com/writings/knowing-css-is-mastery-to-frontend-development)A solid grasp of CSS is key to frontend mastery. Instead of overcomplicating things with JavaScript, this article argues that native CSS solutions are often cleaner, faster, and more maintainable. + +💨 [**They Just Tagged Tailwind CSS v4.0** (13 min)](https://tailwindcss.com/blog/tailwindcss-v4)Tailwind v4 brings major performance boosts, a revamped configuration system, and better support for modern web features. If you use Tailwind, this is a must-read. + +🤖 [**A New AI Worry: Young Coders No Longer Know How Their Code Works** (3 min)](https://www.inc.com/kit-eaton/a-new-ai-worry-many-young-coders-no-longer-know-how-their-code-really-works/91151569)Are AI coding assistants making devs too reliant? New research suggests younger engineers might be losing critical problem-solving skills by relying on AI-generated code without fully understanding it. + +🔗 [**Introducing the Model Context Protocol** (3 min)](https://www.anthropic.com/news/model-context-protocol)Anthropic open-sourced the **Model Context Protocol (MCP)**, a standard that helps AI assistants connect to live business tools, dev environments, and content repositories. If you're interested in making AI responses more context-aware, this is worth exploring. + +🛠️ [**Agents.json: Translate OpenAPI into LLM Tools** (Repo)](https://github.com/wild-card-ai/agents-json)**Agents.json** is a new spec that brings structure to AI-agent interactions using OpenAPI. If you're working on AI-driven workflows, this could be a game-changer. + +📡 [**The Differences Between WebSocket and Socket.IO** (4 min)](https://jsdev.space/websocket-socketio)WebSockets and Socket.IO both power real-time web applications, but they work in different ways. This guide explains when to use each, their strengths and weaknesses, and how they fit into modern web development. + +## **Dublin Event Tomorrow** + +Join us this Wednesday, March 5th at 6:00 PM for an evening of tech talks, free food, drinks, and networking with fellow developers in Dublin! + +**TWO EXCITING TALKS**: + +1️⃣ **"Async Serverless Communication with MQTT"** by Brendan Scullion Learn how asynchronous communication enhances serverless websites, enabling efficient multitasking and real-time notifications. Brendan will share insights on their decision to adopt MQTT and AWS IoT Core for all async communications. + +2️⃣ **"Agents Without the Fluff: What Actually Works in Production"** by me, Cut through the AI agent hype and discover practical, real-world applications. Learn about different types of agents, their capabilities, and how to build and deploy them effectively in production. + +Come hungry for knowledge (and pizza)! It's the perfect way to level up your coding skills while having fun with other developers. + +🔗 **RSVP HERE**: [https://www.meetup.com/codu-community/events/306456598/](https://www.meetup.com/codu-community/events/306456598/) + +See you there! 👋 + +### **Something Cool** + +🔍 [**Refactoring.Guru**](https://refactoring.guru/) + +If you've ever wanted a clear, no-nonsense guide to refactoring, design patterns, and SOLID principles, this site has you covered. It breaks down complex programming concepts into simple, digestible explanations with visuals and real-world examples. Whether you're improving legacy code or just leveling up your skills, this is an awesome resource! + +## Quick Links + +- [Codú Facebook](https://www.facebook.com/profile.php?id=61570877292755) +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 1664ee37a4c4d34b7f216507e1a7319c6d87ea6b Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 11 Mar 2025 21:05:12 +0000 Subject: [PATCH 26/55] This weeks newsletter (#1254) --- .../webllm-css-functions-and-more/page.mdx | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 app/(app)/letters/webllm-css-functions-and-more/page.mdx diff --git a/app/(app)/letters/webllm-css-functions-and-more/page.mdx b/app/(app)/letters/webllm-css-functions-and-more/page.mdx new file mode 100644 index 00000000..844133f5 --- /dev/null +++ b/app/(app)/letters/webllm-css-functions-and-more/page.mdx @@ -0,0 +1,96 @@ +Tue, March 11, 2025 • Niall Maher + +# 🚀 AI Crush Goes Global & FREE: Plus WebLLM, CSS Functions & More + +I had a lot of fun last week talking about agents at the Codú web developer Meetup! We also had a fantastic talk from [Brendan Scullion](https://www.linkedin.com/in/brendansculllion/) on Async serverless communication with MQTT. + +Brendan always impresses me so I'm lucky to be able to get such phenomenal talent to our events. + +In other news, I've had a few hiccups with partners on AI Crush but I think it will ultimately be a good thing for everyone because: + +## 🚀 AI Crush is Going Global: Now Free & Online for Everyone! + +Big news, AI community! We're excited to announce that AI Crush 2025 is transforming into a FREE global online experience on May 9th. + +While we originally planned to gather in Belfast, circumstances beyond my control have led us to pivot. + +As with all new ventures, adaptability is key! This evolution allows us to open our doors to thousands of AI practitioners worldwide who were previously on our waitlist. No more venue capacity limitations, travel barriers, or ticket costs – just pure implementation-focused AI content accessible to everyone. + +[You can register for free here](https://www.eventson.co/9da9808c-b861-45e4-86ba-652033454c20). + +### ❌ What's Not Changing: + +➡️ Our commitment to real-world AI implementation + +➡️ Our "Building > Talking" philosophy + +➡️ Our incredible lineup of global AI implementation experts + +➡️ Our dual Leadership & Development tracks packed with practical insights + +➡️ Our focus on connecting builders and decision-makers + +### ✅ What's Getting Better: + +➡️ Global accessibility – participate from anywhere + +➡️ Free registration – removing financial barriers + +➡️ Expanded reach – connect with thousands of AI practitioners + +➡️ Extended access – content available after the event + +➡️ Launch of the AI Crush Community – continuing the conversation beyond May 9th + +This shift allows us to fulfill our mission in an even more impactful way, bringing practical AI implementation knowledge to a truly global audience. + +## This Week's Picks + +[**What is WebLLM?**](https://techhub.iodigital.com/articles/what-is-webllm) **(4 min)** - WebLLM brings AI models directly into the browser, making them fully client-side and more accessible. As AI evolves, this approach could be a game-changer for privacy and performance in web applications. + +[**Tips for Building AI Agents**](https://www.youtube.com/) **(Video)** - Anthropic's Barry Zhang, Erik Schluntz, and Alex Albert discuss the future of AI agents, common mistakes to avoid, and how developers can prepare for what's next. + +[**CodeTracer**](https://github.com/metacraft-labs/codetracer) **(Repo)** - A time-traveling debugger that records program execution into a sharable trace file. You can step forward and backward through the execution history, making debugging more intuitive across multiple languages. + +[**What is Model Context Protocol (MCP)?**](https://norahsakal.com/blog/mcp-vs-api-model-context-protocol-explained/) **(7 min)** - A great breakdown of how MCP simplifies AI integrations compared to traditional APIs. If you're working with AI-powered apps, this is worth understanding. + +[**Kibo UI**](https://www.kibo-ui.com/overview) **(Library)** - A component library built on top of shadcn/ui, providing flexible, responsive UI building blocks designed to reduce boilerplate while maintaining customization. + +[**Functions in CSS?!**](https://css-tricks.com/functions-in-css/) **(9 min)** - CSS is getting native function support! Currently experimental in Chrome Canary, these functions allow for argument passing, type checking, and return values—opening up new possibilities for dynamic styling. + +[**Mistral OCR**](https://mistral.ai/fr/news/mistral-ocr) - Mistral AI introduces what they claim to be the world's best document understanding API. Their release article breaks down its capabilities. + +[**The Art of Tech Interviewing**](https://addyosmani.com/blog/art-tech-interviews/) **(4 min)** - A look at how top candidates approach technical interviews—thinking out loud, demonstrating structured problem-solving, and turning uncertainty into an advantage. + +[**Expo's AI Strategy**](https://expo.dev/ai/strategy) **(4 min)** - Expo is evolving into a key player in AI-assisted app development, providing the foundational framework and infrastructure for companies building AI-powered tools. + +## Book of the Week + +[**Clean Architecture: A Craftsman's Guide to Software Structure and Design**](https://amzn.to/4kIwhZT) + +Robert C. Martin (Uncle Bob) lays out timeless principles for designing software that is scalable, maintainable, and resilient to change. + +This book breaks down what makes software architecture "clean" and how to structure applications in a way that avoids complexity traps. Whether you're building small apps or large systems, the insights here will help you write code that stands the test of time. A must-read for developers serious about crafting high-quality software. + +## Something Cool + +I've been completely hooked on [_Severance_](https://tv.apple.com/ie/show/severance/umc.cmc.1srk2goyh2q2zdxcx605w8vtx). If you haven't watched it yet, it's one of the most gripping and unsettling shows out there. + +The story follows employees at Lumon Industries, a mysterious biotech corporation where workers undergo a "severance" procedure—splitting their consciousness into two: their _innie_, who only exists at work, and their _outie_, who has no memory of what they do all day. It's a mind-bending mix of corporate dystopia, psychological thriller, and existential mystery, with incredible performances and a slow-burn tension that keeps you on edge. + +If you're into sci-fi with deep themes about work-life balance (taken to the extreme), identity, and control, this one is a must-watch. + +## Quick Links + +- [Codú Facebook](https://www.facebook.com/profile.php?id=61570877292755) +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 7bf07c606bf4abe7312e99ce75fd8eec56a9ea04 Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 18 Mar 2025 18:04:51 +0000 Subject: [PATCH 27/55] This weeks newsletter (#1256) --- .../faster-typescript-is-coming/page.mdx | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 app/(app)/letters/faster-typescript-is-coming/page.mdx diff --git a/app/(app)/letters/faster-typescript-is-coming/page.mdx b/app/(app)/letters/faster-typescript-is-coming/page.mdx new file mode 100644 index 00000000..0e018892 --- /dev/null +++ b/app/(app)/letters/faster-typescript-is-coming/page.mdx @@ -0,0 +1,90 @@ +Tue, 18 March, 2025 • Niall Maher + +# 10X Faster TypeScript Is Coming (Plus My Free JS Course) + +Something I did last year was a complete JavaScript course! **And yes, it's completely FREE!** + +I'm back revisiting it to see how I can improve the content. + +## Why Another JS Course? + +Look, I get it. There are thousands of JavaScript tutorials out there. But I built this one specifically to cut through the noise and focus on what really matters: building a rock-solid foundation that will serve you throughout your entire coding journey. + +Whether you're just starting out or know someone who's looking to break into coding, this structured path will take you from "what's a variable?" to building your own Blackjack game in 23 carefully crafted lessons. + +### The Complete Learning Path + +I didn't write this in the most logical order (creative process, am I right?), so here's the recommended sequence to follow: + +1. Start with the [Introduction to JavaScript](https://newsletter.codu.co/l/OKhlNrmpjTTHP763xCz1UNOw/pYJC8TgQzU1irnLCl7nQNA/Ib3QOu9DyPvRYhOFSfGlzA) +2. Dive into the [DOM](https://newsletter.codu.co/l/OKhlNrmpjTTHP763xCz1UNOw/sRNXVyfrsqIdmdbEaBLcQA/Ib3QOu9DyPvRYhOFSfGlzA) to understand how JS interacts with web pages +3. Master the basics with [Primitive Data Types](https://newsletter.codu.co/l/OKhlNrmpjTTHP763xCz1UNOw/a8K12VGweLwm0QtUthDGTQ/Ib3QOu9DyPvRYhOFSfGlzA), [Operators](https://newsletter.codu.co/l/OKhlNrmpjTTHP763xCz1UNOw/LKym225QBnrX32VV6NKWzw/Ib3QOu9DyPvRYhOFSfGlzA), and [Expressions](https://newsletter.codu.co/l/OKhlNrmpjTTHP763xCz1UNOw/JNQq7qKdhKKbrLH6GzaIbQ/Ib3QOu9DyPvRYhOFSfGlzA) + +...and continue through the full curriculum all the way to building real projects! + +### What's Coming Next? + +This is just the beginning. I'm working on turning this into a proper eBook and video series. But why wait for the perfect version when you can start learning today? + +### Help Make This Better! + +This is a community effort. If you spot something confusing, have suggestions for improvements, or want to see additional topics covered, drop me a comment. Let's build this resource together! + +## **This Week's Picks** + +**[A 10x Faster TypeScript](https://devblogs.microsoft.com/typescript/typescript-native-port/) (5 min)** +Microsoft is porting TypeScript to a native implementation, bringing 10x faster builds, lower memory usage, and near-instant editor startup. The first preview of the command-line type checker is expected mid-2025, with full language services by the end of the year. + +**[How Cursor (AI IDE) Works](https://blog.sshh.io/p/how-cursor-ai-ide-works) (15 min)** +A breakdown of how AI-powered IDEs like Cursor optimize LLMs for coding. By forking VSCode and integrating tools like `read_file` and `write_file`, Cursor turns AI into a true coding assistant. + +**[Dive Into WebGPU — Part 1](https://okaydev.co/articles/dive-into-webgpu-part-1) (17 min)** +A deep dive into WebGPU, the next-gen graphics API for the web. If you're looking for a creative coding challenge, this is a great place to start. + +**[Top 3 Mistakes I Made While Building AI Agents](https://www.example.com) (7 min)** +Agents aren't just fancy LLM prompts. This article explains the biggest mistakes developers make—like failing to use external tools, misunderstanding agent memory, and overlooking multi-step workflows. + +**[Career Advice in 2025](https://lethain.com/career-advice-2025) (7 min)** +The job market is shifting. AI-driven hiring trends are changing which skills are valued, de-emphasizing traditional leadership experience and favoring deep technical expertise, especially in AI and automation. + +**[Beyond React.memo: Smarter Ways to Optimize Performance](https://cekrem.github.io/posts/beyond-react-memo-smarter-performance-optimization) (6 min)** +React.memo isn’t enough. This guide explores better ways to optimize performance, like restructuring components, lifting state down the tree, and using composition patterns to reduce unnecessary re-renders. + +**[As an Engineer, I’d Rather Be Called Stupid Than Stay Silent](https://shiftmag.dev/asking-questions-engineering-career-advice-4895) (8 min)** +Asking "stupid" questions is a superpower. Staying silent leads to delays, miscommunication, and missed learning opportunities. This article makes a strong case for speaking up. + +**[GitHub Announces Secret Protection and Code Security](https://www.devopsdigest.com/github-announces-secret-protection-and-code-security) (1 min)** +GitHub is unbundling its Advanced Security features, making Secret Protection and Code Security available separately. These tools help detect leaked secrets and identify code vulnerabilities more efficiently. + +## **Book of the Week** + +[**Building Microservices: Designing Fine-Grained Systems**](https://www.amazon.ie/Building-Microservices-Designing-Fine-Grained-Systems/dp/1492034029/) + +Newman cuts through the hype around microservices and focuses on sensible implementation patterns, service boundaries, and deployment pipelines. His coverage of testing strategies across service boundaries saved me countless hours of debugging. The sections on monitoring and security were particularly valuable for my current project. + +What impressed me most was how Newman balances technical depth with readability - you'll get concrete examples without drowning in theory. Whether you're just starting with microservices or looking to refine your existing architecture, this book delivers actionable insights you can apply immediately. + +## **Something Cool** + +[**Web.dev Patterns: Google's Hidden Gem for UI Development**](https://web.dev/patterns) + +Need battle-tested UI components without starting from scratch? Google's Web.dev Patterns is your answer. This collection offers implementation-ready solutions for common web components, all optimized for accessibility and performance. + +Each pattern includes working demos, complete source code, and detailed explanations covering both implementation and accessibility considerations. From responsive layouts to complex interactions like infinite scrolling, these patterns follow modern web standards while ensuring cross-browser compatibility. + +Check out [https://web.dev/patterns](https://web.dev/patterns) and bookmark it now—it's an essential resource that will save you hours of development time on your next project. + +## Quick Links + +- [Codú Facebook](https://www.facebook.com/profile.php?id=61570877292755) +- [Codú TikTok](https://www.tiktok.com/@codu.co) +- [Our YouTube channel](https://www.youtube.com/@codu) +- [Find us on Twitch](https://www.twitch.tv/codudotco) + +If you have any ideas or feedback, reply to this email. + +Thanks, and stay awesome, + +Niall + +Founder @ [Codú](https://www.codu.co/?ref=newsletter) From 08a5b3a67990b69889ce172d94ccce39d9c7fe36 Mon Sep 17 00:00:00 2001 From: Akarsh-N-L <65647232+Akarsh-N-L@users.noreply.github.com> Date: Sat, 18 Oct 2025 17:46:25 +0530 Subject: [PATCH 28/55] removing the redundant nanoId package version (#1271) Co-authored-by: Akarsh --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 326d7747..08a979a4 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,6 @@ "lowlight": "^3.1.0", "lucide-react": "^0.451.0", "nanoid": "^5.0.9", - "nanoid": "^5.0.7", "next": "^14.2.21", "next-auth": "^4.24.9", "next-safe-action": "^7.9.4", From 844e2ae49f16013532db8017a24c7479ea5542c5 Mon Sep 17 00:00:00 2001 From: Wojciech Rithaler <39241668+Ritek@users.noreply.github.com> Date: Sat, 18 Oct 2025 13:28:36 +0100 Subject: [PATCH 29/55] Resolve #1243 Change Select MenuItem style in draft view (#1277) Co-authored-by: Niall Maher --- app/(app)/my-posts/_client.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/(app)/my-posts/_client.tsx b/app/(app)/my-posts/_client.tsx index ee9cfcd6..b91a7690 100644 --- a/app/(app)/my-posts/_client.tsx +++ b/app/(app)/my-posts/_client.tsx @@ -206,11 +206,11 @@ const MyPosts = () => {
From 5e5e007b0246f0e0463e8c02ca60465028a6fefa Mon Sep 17 00:00:00 2001 From: Darren Grants <85397489+darrenomight@users.noreply.github.com> Date: Sat, 18 Oct 2025 19:34:16 +0100 Subject: [PATCH 44/55] Upgraded @aws-sdk packages from 3.669.0 to 3.740 (#1308) Co-authored-by: Niall Maher --- package-lock.json | 2300 +++++++++++++++++++++------------------------ package.json | 6 +- 2 files changed, 1056 insertions(+), 1250 deletions(-) diff --git a/package-lock.json b/package-lock.json index d9b7ba63..12b277c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,9 @@ "@algolia/autocomplete-core": "^1.17.4", "@algolia/autocomplete-preset-algolia": "^1.17.4", "@auth/drizzle-adapter": "^1.4.2", - "@aws-sdk/client-s3": "^3.669.0", - "@aws-sdk/client-ses": "^3.669.0", - "@aws-sdk/s3-request-presigner": "^3.669.0", + "@aws-sdk/client-s3": "^3.740.0", + "@aws-sdk/client-ses": "^3.740.0", + "@aws-sdk/s3-request-presigner": "^3.740.0", "@headlessui/react": "^2.1.8", "@heroicons/react": "^2.1.5", "@hookform/resolvers": "^3.9.0", @@ -66,7 +66,7 @@ "isomorphic-dompurify": "^2.20.0", "lowlight": "^3.1.0", "lucide-react": "^0.451.0", - "nanoid": "^5.0.7", + "nanoid": "^5.0.9", "next": "^14.2.21", "next-auth": "^4.24.11", "next-safe-action": "^7.9.4", @@ -111,7 +111,7 @@ "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "autoprefixer": "^10.4.21", - "aws-cdk-lib": "^2.140.0", + "aws-cdk-lib": "^2.188.0", "chance": "^1.1.11", "constructs": "10.3.0", "drizzle-kit": "^0.25.0", @@ -184,51 +184,6 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-abtesting/node_modules/@algolia/client-common": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.12.0.tgz", - "integrity": "sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-browser-xhr": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz", - "integrity": "sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-fetch": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz", - "integrity": "sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-node-http": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz", - "integrity": "sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/@algolia/client-analytics": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.12.0.tgz", @@ -244,7 +199,7 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { + "node_modules/@algolia/client-common": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.12.0.tgz", "integrity": "sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==", @@ -253,52 +208,6 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/requester-browser-xhr": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz", - "integrity": "sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/requester-fetch": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz", - "integrity": "sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/requester-node-http": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz", - "integrity": "sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.40.1.tgz", - "integrity": "sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/@algolia/client-insights": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.12.0.tgz", @@ -314,51 +223,6 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-insights/node_modules/@algolia/client-common": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.12.0.tgz", - "integrity": "sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights/node_modules/@algolia/requester-browser-xhr": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz", - "integrity": "sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights/node_modules/@algolia/requester-fetch": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz", - "integrity": "sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights/node_modules/@algolia/requester-node-http": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz", - "integrity": "sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/@algolia/client-personalization": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.12.0.tgz", @@ -374,51 +238,6 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.12.0.tgz", - "integrity": "sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/requester-browser-xhr": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz", - "integrity": "sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/requester-fetch": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz", - "integrity": "sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/requester-node-http": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz", - "integrity": "sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/@algolia/client-query-suggestions": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.12.0.tgz", @@ -434,58 +253,46 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/client-common": { + "node_modules/@algolia/client-search": { "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.12.0.tgz", - "integrity": "sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-browser-xhr": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz", - "integrity": "sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.12.0.tgz", + "integrity": "sha512-R3qzEytgVLHOGNri+bpta6NtTt7YtkvUe/QBcAmMDjW4Jk1P0eBYIPfvnzIPbINRsLxIq9fZs9uAYBgsrts4Zg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.12.0" + "@algolia/client-common": "5.12.0", + "@algolia/requester-browser-xhr": "5.12.0", + "@algolia/requester-fetch": "5.12.0", + "@algolia/requester-node-http": "5.12.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-fetch": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz", - "integrity": "sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==", + "node_modules/@algolia/ingestion": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.12.0.tgz", + "integrity": "sha512-zpHo6qhR22tL8FsdSI4DvEraPDi/019HmMrCFB/TUX98yzh5ooAU7sNW0qPL1I7+S++VbBmNzJOEU9VI8tEC8A==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.12.0" + "@algolia/client-common": "5.12.0", + "@algolia/requester-browser-xhr": "5.12.0", + "@algolia/requester-fetch": "5.12.0", + "@algolia/requester-node-http": "5.12.0" }, "engines": { "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-node-http": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz", - "integrity": "sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==", + "node_modules/@algolia/monitoring": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.12.0.tgz", + "integrity": "sha512-i2AJZED/zf4uhxezAJUhMKoL5QoepCBp2ynOYol0N76+TSoohaMADdPnWCqOULF4RzOwrG8wWynAwBlXsAI1RQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.8.0.tgz", - "integrity": "sha512-meIT0dIjafbDhZGfXMZ02pKbvNjItH8yZORTLpA2wYWBpRWqGzNDXedD/ayFh/tm5+L0IGlSWIgfhofKfDRsFQ==", - "peer": true, - "dependencies": { - "@algolia/client-common": "5.12.0" + "@algolia/client-common": "5.12.0", + "@algolia/requester-browser-xhr": "5.12.0", + "@algolia/requester-fetch": "5.12.0", + "@algolia/requester-node-http": "5.12.0" }, "engines": { "node": ">= 14.0.0" @@ -506,16 +313,7 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.12.0.tgz", - "integrity": "sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { + "node_modules/@algolia/requester-browser-xhr": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz", "integrity": "sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==", @@ -527,7 +325,7 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-fetch": { + "node_modules/@algolia/requester-fetch": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz", "integrity": "sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==", @@ -539,7 +337,7 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { + "node_modules/@algolia/requester-node-http": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz", "integrity": "sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==", @@ -551,45 +349,6 @@ "node": ">= 14.0.0" } }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.40.1.tgz", - "integrity": "sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@algolia/client-common": "5.40.1" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.40.1.tgz", - "integrity": "sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@algolia/client-common": "5.40.1" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.40.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.40.1.tgz", - "integrity": "sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@algolia/client-common": "5.40.1" - }, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", @@ -682,46 +441,6 @@ "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", "license": "MIT" }, - "node_modules/@auth/core": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.34.2.tgz", - "integrity": "sha512-KywHKRgLiF3l7PLyL73fjLSIBe1YNcA6sMeew4yMP6cfCWGXZrkkXd32AjRi1hlJ9nvovUBGZHvbn+LijO6ZeQ==", - "optional": true, - "dependencies": { - "@panva/hkdf": "^1.1.1", - "@types/cookie": "0.6.0", - "cookie": "0.6.0", - "jose": "^5.1.3", - "oauth4webapi": "^2.10.4", - "preact": "10.11.3", - "preact-render-to-string": "5.2.3" - }, - "peerDependencies": { - "@simplewebauthn/browser": "^9.0.1", - "@simplewebauthn/server": "^9.0.2", - "nodemailer": "^6.8.0" - }, - "peerDependenciesMeta": { - "@simplewebauthn/browser": { - "optional": true - }, - "@simplewebauthn/server": { - "optional": true - }, - "nodemailer": { - "optional": true - } - } - }, - "node_modules/@auth/core/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/@auth/drizzle-adapter": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@auth/drizzle-adapter/-/drizzle-adapter-1.6.1.tgz", @@ -824,6 +543,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -837,6 +557,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -1007,711 +728,682 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.689.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.689.0.tgz", - "integrity": "sha512-qYD1GJEPeLM6H3x8BuAAMXZltvVce5vGiwtZc9uMkBBo3HyFnmPitIPTPfaD1q8LOn/7KFdkY4MJ4e8D3YpV9g==", + "version": "3.913.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.913.0.tgz", + "integrity": "sha512-YdWHIXn+TltH1MbMkBrFl8Ocxj/PJXleacQ1U5AZRAt8EqxctYkeTNB/+XYS5x6ieYQ4uWnF7sF74sJx+KTpwg==", + "license": "Apache-2.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/client-sso-oidc": "3.687.0", - "@aws-sdk/client-sts": "3.687.0", - "@aws-sdk/core": "3.686.0", - "@aws-sdk/credential-provider-node": "3.687.0", - "@aws-sdk/middleware-bucket-endpoint": "3.686.0", - "@aws-sdk/middleware-expect-continue": "3.686.0", - "@aws-sdk/middleware-flexible-checksums": "3.689.0", - "@aws-sdk/middleware-host-header": "3.686.0", - "@aws-sdk/middleware-location-constraint": "3.686.0", - "@aws-sdk/middleware-logger": "3.686.0", - "@aws-sdk/middleware-recursion-detection": "3.686.0", - "@aws-sdk/middleware-sdk-s3": "3.687.0", - "@aws-sdk/middleware-ssec": "3.686.0", - "@aws-sdk/middleware-user-agent": "3.687.0", - "@aws-sdk/region-config-resolver": "3.686.0", - "@aws-sdk/signature-v4-multi-region": "3.687.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-endpoints": "3.686.0", - "@aws-sdk/util-user-agent-browser": "3.686.0", - "@aws-sdk/util-user-agent-node": "3.687.0", - "@aws-sdk/xml-builder": "3.686.0", - "@smithy/config-resolver": "^3.0.10", - "@smithy/core": "^2.5.1", - "@smithy/eventstream-serde-browser": "^3.0.11", - "@smithy/eventstream-serde-config-resolver": "^3.0.8", - "@smithy/eventstream-serde-node": "^3.0.10", - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/hash-blob-browser": "^3.1.7", - "@smithy/hash-node": "^3.0.8", - "@smithy/hash-stream-node": "^3.1.7", - "@smithy/invalid-dependency": "^3.0.8", - "@smithy/md5-js": "^3.0.8", - "@smithy/middleware-content-length": "^3.0.10", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/middleware-retry": "^3.0.25", - "@smithy/middleware-serde": "^3.0.8", - "@smithy/middleware-stack": "^3.0.8", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/protocol-http": "^4.1.5", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.25", - "@smithy/util-defaults-mode-node": "^3.0.25", - "@smithy/util-endpoints": "^2.1.4", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-retry": "^3.0.8", - "@smithy/util-stream": "^3.2.1", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.7", + "@aws-sdk/core": "3.911.0", + "@aws-sdk/credential-provider-node": "3.913.0", + "@aws-sdk/middleware-bucket-endpoint": "3.910.0", + "@aws-sdk/middleware-expect-continue": "3.910.0", + "@aws-sdk/middleware-flexible-checksums": "3.911.0", + "@aws-sdk/middleware-host-header": "3.910.0", + "@aws-sdk/middleware-location-constraint": "3.913.0", + "@aws-sdk/middleware-logger": "3.910.0", + "@aws-sdk/middleware-recursion-detection": "3.910.0", + "@aws-sdk/middleware-sdk-s3": "3.911.0", + "@aws-sdk/middleware-ssec": "3.910.0", + "@aws-sdk/middleware-user-agent": "3.911.0", + "@aws-sdk/region-config-resolver": "3.910.0", + "@aws-sdk/signature-v4-multi-region": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-endpoints": "3.910.0", + "@aws-sdk/util-user-agent-browser": "3.910.0", + "@aws-sdk/util-user-agent-node": "3.911.0", + "@aws-sdk/xml-builder": "3.911.0", + "@smithy/config-resolver": "^4.3.2", + "@smithy/core": "^3.16.1", + "@smithy/eventstream-serde-browser": "^4.2.2", + "@smithy/eventstream-serde-config-resolver": "^4.3.2", + "@smithy/eventstream-serde-node": "^4.2.2", + "@smithy/fetch-http-handler": "^5.3.3", + "@smithy/hash-blob-browser": "^4.2.3", + "@smithy/hash-node": "^4.2.2", + "@smithy/hash-stream-node": "^4.2.2", + "@smithy/invalid-dependency": "^4.2.2", + "@smithy/md5-js": "^4.2.2", + "@smithy/middleware-content-length": "^4.2.2", + "@smithy/middleware-endpoint": "^4.3.3", + "@smithy/middleware-retry": "^4.4.3", + "@smithy/middleware-serde": "^4.2.2", + "@smithy/middleware-stack": "^4.2.2", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/node-http-handler": "^4.4.1", + "@smithy/protocol-http": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", + "@smithy/url-parser": "^4.2.2", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.2", + "@smithy/util-defaults-mode-node": "^4.2.3", + "@smithy/util-endpoints": "^3.2.2", + "@smithy/util-middleware": "^4.2.2", + "@smithy/util-retry": "^4.2.2", + "@smithy/util-stream": "^4.5.2", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.2", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-ses": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.687.0.tgz", - "integrity": "sha512-KJrv0sfyE12Ilx4Kw9WfSIBAmRCygkSsPQTF1qIsOYq+sJPxDiDWoeNe6ku8NPv3DTCS13VhoqptPrfga29GLw==", + "version": "3.913.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.913.0.tgz", + "integrity": "sha512-jUF1mN+webeAgkNXS/tl6KpJyUbsAWxQGsQgsWoHwaNCSnxMDBEyPmgBnzbqf2CrybIa7zmzaqCO0z6FgKeZRg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.687.0", - "@aws-sdk/client-sts": "3.687.0", - "@aws-sdk/core": "3.686.0", - "@aws-sdk/credential-provider-node": "3.687.0", - "@aws-sdk/middleware-host-header": "3.686.0", - "@aws-sdk/middleware-logger": "3.686.0", - "@aws-sdk/middleware-recursion-detection": "3.686.0", - "@aws-sdk/middleware-user-agent": "3.687.0", - "@aws-sdk/region-config-resolver": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-endpoints": "3.686.0", - "@aws-sdk/util-user-agent-browser": "3.686.0", - "@aws-sdk/util-user-agent-node": "3.687.0", - "@smithy/config-resolver": "^3.0.10", - "@smithy/core": "^2.5.1", - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/hash-node": "^3.0.8", - "@smithy/invalid-dependency": "^3.0.8", - "@smithy/middleware-content-length": "^3.0.10", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/middleware-retry": "^3.0.25", - "@smithy/middleware-serde": "^3.0.8", - "@smithy/middleware-stack": "^3.0.8", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/protocol-http": "^4.1.5", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.25", - "@smithy/util-defaults-mode-node": "^3.0.25", - "@smithy/util-endpoints": "^2.1.4", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-retry": "^3.0.8", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.7", + "@aws-sdk/core": "3.911.0", + "@aws-sdk/credential-provider-node": "3.913.0", + "@aws-sdk/middleware-host-header": "3.910.0", + "@aws-sdk/middleware-logger": "3.910.0", + "@aws-sdk/middleware-recursion-detection": "3.910.0", + "@aws-sdk/middleware-user-agent": "3.911.0", + "@aws-sdk/region-config-resolver": "3.910.0", + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-endpoints": "3.910.0", + "@aws-sdk/util-user-agent-browser": "3.910.0", + "@aws-sdk/util-user-agent-node": "3.911.0", + "@smithy/config-resolver": "^4.3.2", + "@smithy/core": "^3.16.1", + "@smithy/fetch-http-handler": "^5.3.3", + "@smithy/hash-node": "^4.2.2", + "@smithy/invalid-dependency": "^4.2.2", + "@smithy/middleware-content-length": "^4.2.2", + "@smithy/middleware-endpoint": "^4.3.3", + "@smithy/middleware-retry": "^4.4.3", + "@smithy/middleware-serde": "^4.2.2", + "@smithy/middleware-stack": "^4.2.2", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/node-http-handler": "^4.4.1", + "@smithy/protocol-http": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", + "@smithy/url-parser": "^4.2.2", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.2", + "@smithy/util-defaults-mode-node": "^4.2.3", + "@smithy/util-endpoints": "^3.2.2", + "@smithy/util-middleware": "^4.2.2", + "@smithy/util-retry": "^4.2.2", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.687.0.tgz", - "integrity": "sha512-dfj0y9fQyX4kFill/ZG0BqBTLQILKlL7+O5M4F9xlsh2WNuV2St6WtcOg14Y1j5UODPJiJs//pO+mD1lihT5Kw==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.686.0", - "@aws-sdk/middleware-host-header": "3.686.0", - "@aws-sdk/middleware-logger": "3.686.0", - "@aws-sdk/middleware-recursion-detection": "3.686.0", - "@aws-sdk/middleware-user-agent": "3.687.0", - "@aws-sdk/region-config-resolver": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-endpoints": "3.686.0", - "@aws-sdk/util-user-agent-browser": "3.686.0", - "@aws-sdk/util-user-agent-node": "3.687.0", - "@smithy/config-resolver": "^3.0.10", - "@smithy/core": "^2.5.1", - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/hash-node": "^3.0.8", - "@smithy/invalid-dependency": "^3.0.8", - "@smithy/middleware-content-length": "^3.0.10", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/middleware-retry": "^3.0.25", - "@smithy/middleware-serde": "^3.0.8", - "@smithy/middleware-stack": "^3.0.8", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/protocol-http": "^4.1.5", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.25", - "@smithy/util-defaults-mode-node": "^3.0.25", - "@smithy/util-endpoints": "^2.1.4", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-retry": "^3.0.8", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.687.0.tgz", - "integrity": "sha512-Rdd8kLeTeh+L5ZuG4WQnWgYgdv7NorytKdZsGjiag1D8Wv3PcJvPqqWdgnI0Og717BSXVoaTYaN34FyqFYSx6Q==", - "peer": true, - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.686.0", - "@aws-sdk/credential-provider-node": "3.687.0", - "@aws-sdk/middleware-host-header": "3.686.0", - "@aws-sdk/middleware-logger": "3.686.0", - "@aws-sdk/middleware-recursion-detection": "3.686.0", - "@aws-sdk/middleware-user-agent": "3.687.0", - "@aws-sdk/region-config-resolver": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-endpoints": "3.686.0", - "@aws-sdk/util-user-agent-browser": "3.686.0", - "@aws-sdk/util-user-agent-node": "3.687.0", - "@smithy/config-resolver": "^3.0.10", - "@smithy/core": "^2.5.1", - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/hash-node": "^3.0.8", - "@smithy/invalid-dependency": "^3.0.8", - "@smithy/middleware-content-length": "^3.0.10", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/middleware-retry": "^3.0.25", - "@smithy/middleware-serde": "^3.0.8", - "@smithy/middleware-stack": "^3.0.8", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/protocol-http": "^4.1.5", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.25", - "@smithy/util-defaults-mode-node": "^3.0.25", - "@smithy/util-endpoints": "^2.1.4", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-retry": "^3.0.8", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.687.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.687.0.tgz", - "integrity": "sha512-SQjDH8O4XCTtouuCVYggB0cCCrIaTzUZIkgJUpOsIEJBLlTbNOb/BZqUShAQw2o9vxr2rCeOGjAQOYPysW/Pmg==", - "peer": true, + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.911.0.tgz", + "integrity": "sha512-N9QAeMvN3D1ZyKXkQp4aUgC4wUMuA5E1HuVCkajc0bq1pnH4PIke36YlrDGGREqPlyLFrXCkws2gbL5p23vtlg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.687.0", - "@aws-sdk/core": "3.686.0", - "@aws-sdk/credential-provider-node": "3.687.0", - "@aws-sdk/middleware-host-header": "3.686.0", - "@aws-sdk/middleware-logger": "3.686.0", - "@aws-sdk/middleware-recursion-detection": "3.686.0", - "@aws-sdk/middleware-user-agent": "3.687.0", - "@aws-sdk/region-config-resolver": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-endpoints": "3.686.0", - "@aws-sdk/util-user-agent-browser": "3.686.0", - "@aws-sdk/util-user-agent-node": "3.687.0", - "@smithy/config-resolver": "^3.0.10", - "@smithy/core": "^2.5.1", - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/hash-node": "^3.0.8", - "@smithy/invalid-dependency": "^3.0.8", - "@smithy/middleware-content-length": "^3.0.10", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/middleware-retry": "^3.0.25", - "@smithy/middleware-serde": "^3.0.8", - "@smithy/middleware-stack": "^3.0.8", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/protocol-http": "^4.1.5", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.25", - "@smithy/util-defaults-mode-node": "^3.0.25", - "@smithy/util-endpoints": "^2.1.4", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-retry": "^3.0.8", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.911.0", + "@aws-sdk/middleware-host-header": "3.910.0", + "@aws-sdk/middleware-logger": "3.910.0", + "@aws-sdk/middleware-recursion-detection": "3.910.0", + "@aws-sdk/middleware-user-agent": "3.911.0", + "@aws-sdk/region-config-resolver": "3.910.0", + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-endpoints": "3.910.0", + "@aws-sdk/util-user-agent-browser": "3.910.0", + "@aws-sdk/util-user-agent-node": "3.911.0", + "@smithy/config-resolver": "^4.3.2", + "@smithy/core": "^3.16.1", + "@smithy/fetch-http-handler": "^5.3.3", + "@smithy/hash-node": "^4.2.2", + "@smithy/invalid-dependency": "^4.2.2", + "@smithy/middleware-content-length": "^4.2.2", + "@smithy/middleware-endpoint": "^4.3.3", + "@smithy/middleware-retry": "^4.4.3", + "@smithy/middleware-serde": "^4.2.2", + "@smithy/middleware-stack": "^4.2.2", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/node-http-handler": "^4.4.1", + "@smithy/protocol-http": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", + "@smithy/url-parser": "^4.2.2", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.2", + "@smithy/util-defaults-mode-node": "^4.2.3", + "@smithy/util-endpoints": "^3.2.2", + "@smithy/util-middleware": "^4.2.2", + "@smithy/util-retry": "^4.2.2", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/core": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.686.0.tgz", - "integrity": "sha512-Xt3DV4DnAT3v2WURwzTxWQK34Ew+iiLzoUoguvLaZrVMFOqMMrwVjP+sizqIaHp1j7rGmFcN5I8saXnsDLuQLA==", - "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/core": "^2.5.1", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/property-provider": "^3.1.7", - "@smithy/protocol-http": "^4.1.5", - "@smithy/signature-v4": "^4.2.0", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/util-middleware": "^3.0.8", - "fast-xml-parser": "4.4.1", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.911.0.tgz", + "integrity": "sha512-k4QG9A+UCq/qlDJFmjozo6R0eXXfe++/KnCDMmajehIE9kh+b/5DqlGvAmbl9w4e92LOtrY6/DN3mIX1xs4sXw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.910.0", + "@aws-sdk/xml-builder": "3.911.0", + "@smithy/core": "^3.16.1", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/property-provider": "^4.2.2", + "@smithy/protocol-http": "^5.3.2", + "@smithy/signature-v4": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.2", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.686.0.tgz", - "integrity": "sha512-osD7lPO8OREkgxPiTWmA1i6XEmOth1uW9HWWj/+A2YGCj1G/t2sHu931w4Qj9NWHYZtbTTXQYVRg+TErALV7nQ==", - "dependencies": { - "@aws-sdk/core": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/property-provider": "^3.1.7", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.911.0.tgz", + "integrity": "sha512-6FWRwWn3LUZzLhqBXB+TPMW2ijCWUqGICSw8bVakEdODrvbiv1RT/MVUayzFwz/ek6e6NKZn6DbSWzx07N9Hjw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/property-provider": "^4.2.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.686.0.tgz", - "integrity": "sha512-xyGAD/f3vR/wssUiZrNFWQWXZvI4zRm2wpHhoHA1cC2fbRMNFYtFn365yw6dU7l00ZLcdFB1H119AYIUZS7xbw==", - "dependencies": { - "@aws-sdk/core": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/property-provider": "^3.1.7", - "@smithy/protocol-http": "^4.1.5", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/util-stream": "^3.2.1", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.911.0.tgz", + "integrity": "sha512-xUlwKmIUW2fWP/eM3nF5u4CyLtOtyohlhGJ5jdsJokr3MrQ7w0tDITO43C9IhCn+28D5UbaiWnKw5ntkw7aVfA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/fetch-http-handler": "^5.3.3", + "@smithy/node-http-handler": "^4.4.1", + "@smithy/property-provider": "^4.2.2", + "@smithy/protocol-http": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", + "@smithy/util-stream": "^4.5.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.687.0.tgz", - "integrity": "sha512-6d5ZJeZch+ZosJccksN0PuXv7OSnYEmanGCnbhUqmUSz9uaVX6knZZfHCZJRgNcfSqg9QC0zsFA/51W5HCUqSQ==", - "dependencies": { - "@aws-sdk/core": "3.686.0", - "@aws-sdk/credential-provider-env": "3.686.0", - "@aws-sdk/credential-provider-http": "3.686.0", - "@aws-sdk/credential-provider-process": "3.686.0", - "@aws-sdk/credential-provider-sso": "3.687.0", - "@aws-sdk/credential-provider-web-identity": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/credential-provider-imds": "^3.2.4", - "@smithy/property-provider": "^3.1.7", - "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.6.0", + "version": "3.913.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.913.0.tgz", + "integrity": "sha512-iR4c4NQ1OSRKQi0SxzpwD+wP1fCy+QNKtEyCajuVlD0pvmoIHdrm5THK9e+2/7/SsQDRhOXHJfLGxHapD74WJw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/credential-provider-env": "3.911.0", + "@aws-sdk/credential-provider-http": "3.911.0", + "@aws-sdk/credential-provider-process": "3.911.0", + "@aws-sdk/credential-provider-sso": "3.911.0", + "@aws-sdk/credential-provider-web-identity": "3.911.0", + "@aws-sdk/nested-clients": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/credential-provider-imds": "^4.2.2", + "@smithy/property-provider": "^4.2.2", + "@smithy/shared-ini-file-loader": "^4.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.687.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.687.0.tgz", - "integrity": "sha512-Pqld8Nx11NYaBUrVk3bYiGGpLCxkz8iTONlpQWoVWFhSOzlO7zloNOaYbD2XgFjjqhjlKzE91drs/f41uGeCTA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.686.0", - "@aws-sdk/credential-provider-http": "3.686.0", - "@aws-sdk/credential-provider-ini": "3.687.0", - "@aws-sdk/credential-provider-process": "3.686.0", - "@aws-sdk/credential-provider-sso": "3.687.0", - "@aws-sdk/credential-provider-web-identity": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/credential-provider-imds": "^3.2.4", - "@smithy/property-provider": "^3.1.7", - "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.6.0", + "version": "3.913.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.913.0.tgz", + "integrity": "sha512-HQPLkKDxS83Q/nZKqg9bq4igWzYQeOMqhpx5LYs4u1GwsKeCsYrrfz12Iu4IHNWPp9EnGLcmdfbfYuqZGrsaSQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.911.0", + "@aws-sdk/credential-provider-http": "3.911.0", + "@aws-sdk/credential-provider-ini": "3.913.0", + "@aws-sdk/credential-provider-process": "3.911.0", + "@aws-sdk/credential-provider-sso": "3.911.0", + "@aws-sdk/credential-provider-web-identity": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/credential-provider-imds": "^4.2.2", + "@smithy/property-provider": "^4.2.2", + "@smithy/shared-ini-file-loader": "^4.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.686.0.tgz", - "integrity": "sha512-sXqaAgyzMOc+dm4CnzAR5Q6S9OWVHyZjLfW6IQkmGjqeQXmZl24c4E82+w64C+CTkJrFLzH1VNOYp1Hy5gE6Qw==", - "dependencies": { - "@aws-sdk/core": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/property-provider": "^3.1.7", - "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.911.0.tgz", + "integrity": "sha512-mKshhV5jRQffZjbK9x7bs+uC2IsYKfpzYaBamFsEov3xtARCpOiKaIlM8gYKFEbHT2M+1R3rYYlhhl9ndVWS2g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/property-provider": "^4.2.2", + "@smithy/shared-ini-file-loader": "^4.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.687.0.tgz", - "integrity": "sha512-N1YCoE7DovIRF2ReyRrA4PZzF0WNi4ObPwdQQkVxhvSm7PwjbWxrfq7rpYB+6YB1Uq3QPzgVwUFONE36rdpxUQ==", - "dependencies": { - "@aws-sdk/client-sso": "3.687.0", - "@aws-sdk/core": "3.686.0", - "@aws-sdk/token-providers": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/property-provider": "^3.1.7", - "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.911.0.tgz", + "integrity": "sha512-JAxd4uWe0Zc9tk6+N0cVxe9XtJVcOx6Ms0k933ZU9QbuRMH6xti/wnZxp/IvGIWIDzf5fhqiGyw5MSyDeI5b1w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.911.0", + "@aws-sdk/core": "3.911.0", + "@aws-sdk/token-providers": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/property-provider": "^4.2.2", + "@smithy/shared-ini-file-loader": "^4.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.686.0.tgz", - "integrity": "sha512-40UqCpPxyHCXDP7CGd9JIOZDgDZf+u1OyLaGBpjQJlz1HYuEsIWnnbTe29Yg3Ah/Zc3g4NBWcUdlGVotlnpnDg==", - "dependencies": { - "@aws-sdk/core": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/property-provider": "^3.1.7", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.911.0.tgz", + "integrity": "sha512-urIbXWWG+cm54RwwTFQuRwPH0WPsMFSDF2/H9qO2J2fKoHRURuyblFCyYG3aVKZGvFBhOizJYexf5+5w3CJKBw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/nested-clients": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/property-provider": "^4.2.2", + "@smithy/shared-ini-file-loader": "^4.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.686.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.686.0.tgz", - "integrity": "sha512-6qCoWI73/HDzQE745MHQUYz46cAQxHCgy1You8MZQX9vHAQwqBnkcsb2hGp7S6fnQY5bNsiZkMWVQ/LVd2MNjg==", - "dependencies": { - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-arn-parser": "3.679.0", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", - "@smithy/util-config-provider": "^3.0.0", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.910.0.tgz", + "integrity": "sha512-8ZfA0WARwvAKQQ7vmoQTg6xFEewFqsQCltQIHd7NtNs3CLF1aU06Ixp0i7Mp68k6dUj9WJJO7mz3I5VFOecqHQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/protocol-http": "^5.3.2", + "@smithy/types": "^4.7.1", + "@smithy/util-config-provider": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.686.0.tgz", - "integrity": "sha512-5yYqIbyhLhH29vn4sHiTj7sU6GttvLMk3XwCmBXjo2k2j3zHqFUwh9RyFGF9VY6Z392Drf/E/cl+qOGypwULpg==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.910.0.tgz", + "integrity": "sha512-jtnsBlxuRyRbK52WdNSry28Tn4ljIqUfUEzDFYWDTEymEGPpVguQKPudW/6M5BWEDmNsv3ai/X+fXd0GZ1fE/Q==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@smithy/protocol-http": "^5.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.689.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.689.0.tgz", - "integrity": "sha512-6VxMOf3mgmAgg6SMagwKj5pAe+putcx2F2odOAWviLcobFpdM/xK9vNry7p6kY+RDNmSlBvcji9wnU59fjV74Q==", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.911.0.tgz", + "integrity": "sha512-ZeS5zPKRCBMqpO8e0S/isfDWBt8AtG604PopKFFqEowbbV8cf6ms3hddNZRajTHvaoWBlU7Fbcn0827RWJnBdw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-stream": "^3.2.1", - "@smithy/util-utf8": "^3.0.0", + "@aws-sdk/core": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/protocol-http": "^5.3.2", + "@smithy/types": "^4.7.1", + "@smithy/util-middleware": "^4.2.2", + "@smithy/util-stream": "^4.5.2", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.686.0.tgz", - "integrity": "sha512-+Yc6rO02z+yhFbHmRZGvEw1vmzf/ifS9a4aBjJGeVVU+ZxaUvnk+IUZWrj4YQopUQ+bSujmMUzJLXSkbDq7yuw==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.910.0.tgz", + "integrity": "sha512-F9Lqeu80/aTM6S/izZ8RtwSmjfhWjIuxX61LX+/9mxJyEkgaECRxv0chsLQsLHJumkGnXRy/eIyMLBhcTPF5vg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@smithy/protocol-http": "^5.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.686.0.tgz", - "integrity": "sha512-pCLeZzt5zUGY3NbW4J/5x3kaHyJEji4yqtoQcUlJmkoEInhSxJ0OE8sTxAfyL3nIOF4yr6L2xdaLCqYgQT8Aog==", + "version": "3.913.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.913.0.tgz", + "integrity": "sha512-iudUrAYV4ZyweYL0hW/VaJzJRjFVruHpK0NukwECs0FZ76Zn17/smbkFIeiaRdGi9cqQdRk9PfhKPvbufnnhPg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.686.0.tgz", - "integrity": "sha512-cX43ODfA2+SPdX7VRxu6gXk4t4bdVJ9pkktbfnkE5t27OlwNfvSGGhnHrQL8xTOFeyQ+3T+oowf26gf1OI+vIg==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.910.0.tgz", + "integrity": "sha512-3LJyyfs1USvRuRDla1pGlzGRtXJBXD1zC9F+eE9Iz/V5nkmhyv52A017CvKWmYoR0DM9dzjLyPOI0BSSppEaTw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.686.0.tgz", - "integrity": "sha512-jF9hQ162xLgp9zZ/3w5RUNhmwVnXDBlABEUX8jCgzaFpaa742qR/KKtjjZQ6jMbQnP+8fOCSXFAVNMU+s6v81w==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.910.0.tgz", + "integrity": "sha512-m/oLz0EoCy+WoIVBnXRXJ4AtGpdl0kPE7U+VH9TsuUzHgxY1Re/176Q1HWLBRVlz4gr++lNsgsMWEC+VnAwMpw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@aws/lambda-invoke-store": "^0.0.1", + "@smithy/protocol-http": "^5.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.687.0.tgz", - "integrity": "sha512-YGHYqiyRiNNucmvLrfx3QxIkjSDWR/+cc72bn0lPvqFUQBRHZgmYQLxVYrVZSmRzzkH2FQ1HsZcXhOafLbq4vQ==", - "dependencies": { - "@aws-sdk/core": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-arn-parser": "3.679.0", - "@smithy/core": "^2.5.1", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.5", - "@smithy/signature-v4": "^4.2.0", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-stream": "^3.2.1", - "@smithy/util-utf8": "^3.0.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.911.0.tgz", + "integrity": "sha512-P0mIIW/QkAGNvFu15Jqa5NSmHeQvZkkQY8nbQpCT3tGObZe4wRsq5u1mOS+CJp4DIBbRZuHeX7ohbX5kPMi4dg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/core": "^3.16.1", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/protocol-http": "^5.3.2", + "@smithy/signature-v4": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.2", + "@smithy/util-stream": "^4.5.2", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.686.0.tgz", - "integrity": "sha512-zJXml/CpVHFUdlGQqja87vNQ3rPB5SlDbfdwxlj1KBbjnRRwpBtxxmOlWRShg8lnVV6aIMGv95QmpIFy4ayqnQ==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.910.0.tgz", + "integrity": "sha512-Ikb0WrIiOeaZo9UmeoVrO4GH2OHiMTKSbr5raTW8nTCArED8iTVZiBF6As+JicZMLSNiBiYSb7EjDihWQ0DrTQ==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.687.0.tgz", - "integrity": "sha512-nUgsKiEinyA50CaDXojAkOasAU3Apdg7Qox6IjNUC4ZjgOu7QWsCDB5N28AYMUt06cNYeYQdfMX1aEzG85a1Mg==", - "dependencies": { - "@aws-sdk/core": "3.686.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-endpoints": "3.686.0", - "@smithy/core": "^2.5.1", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.911.0.tgz", + "integrity": "sha512-rY3LvGvgY/UI0nmt5f4DRzjEh8135A2TeHcva1bgOmVfOI4vkkGfA20sNRqerOkSO6hPbkxJapO50UJHFzmmyA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-endpoints": "3.910.0", + "@smithy/core": "^3.16.1", + "@smithy/protocol-http": "^5.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.911.0.tgz", + "integrity": "sha512-lp/sXbdX/S0EYaMYPVKga0omjIUbNNdFi9IJITgKZkLC6CzspihIoHd5GIdl4esMJevtTQQfkVncXTFkf/a4YA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.911.0", + "@aws-sdk/middleware-host-header": "3.910.0", + "@aws-sdk/middleware-logger": "3.910.0", + "@aws-sdk/middleware-recursion-detection": "3.910.0", + "@aws-sdk/middleware-user-agent": "3.911.0", + "@aws-sdk/region-config-resolver": "3.910.0", + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-endpoints": "3.910.0", + "@aws-sdk/util-user-agent-browser": "3.910.0", + "@aws-sdk/util-user-agent-node": "3.911.0", + "@smithy/config-resolver": "^4.3.2", + "@smithy/core": "^3.16.1", + "@smithy/fetch-http-handler": "^5.3.3", + "@smithy/hash-node": "^4.2.2", + "@smithy/invalid-dependency": "^4.2.2", + "@smithy/middleware-content-length": "^4.2.2", + "@smithy/middleware-endpoint": "^4.3.3", + "@smithy/middleware-retry": "^4.4.3", + "@smithy/middleware-serde": "^4.2.2", + "@smithy/middleware-stack": "^4.2.2", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/node-http-handler": "^4.4.1", + "@smithy/protocol-http": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", + "@smithy/url-parser": "^4.2.2", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.2", + "@smithy/util-defaults-mode-node": "^4.2.3", + "@smithy/util-endpoints": "^3.2.2", + "@smithy/util-middleware": "^4.2.2", + "@smithy/util-retry": "^4.2.2", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.686.0.tgz", - "integrity": "sha512-6zXD3bSD8tcsMAVVwO1gO7rI1uy2fCD3czgawuPGPopeLiPpo6/3FoUWCQzk2nvEhj7p9Z4BbjwZGSlRkVrXTw==", - "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/types": "^3.6.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.910.0.tgz", + "integrity": "sha512-gzQAkuHI3xyG6toYnH/pju+kc190XmvnB7X84vtN57GjgdQJICt9So/BD0U6h+eSfk9VBnafkVrAzBzWMEFZVw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.910.0", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/types": "^4.7.1", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/s3-request-presigner": { - "version": "3.689.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.689.0.tgz", - "integrity": "sha512-E9P59HEsPeFuO10yKyYE180J3V1DRVFTa0H0XzrBTP+s2g9g8xvfyGqoDYJw5YHUckqls39jT5nlbrf+kBSrfg==", - "dependencies": { - "@aws-sdk/signature-v4-multi-region": "3.687.0", - "@aws-sdk/types": "3.686.0", - "@aws-sdk/util-format-url": "3.686.0", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/protocol-http": "^4.1.5", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", + "version": "3.913.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.913.0.tgz", + "integrity": "sha512-vM8waw7LQPYhHWHTNb259CxrkswVijnsSmqVA6ehxUWGgZVV5uGvRDwIgZxPFE9BBWzxig5u/vP31i1+cW2lnw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@aws-sdk/util-format-url": "3.910.0", + "@smithy/middleware-endpoint": "^4.3.3", + "@smithy/protocol-http": "^5.3.2", + "@smithy/smithy-client": "^4.8.1", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.687.0.tgz", - "integrity": "sha512-vdOQHCRHJPX9mT8BM6xOseazHD6NodvHl9cyF5UjNtLn+gERRJEItIA9hf0hlt62odGD8Fqp+rFRuqdmbNkcNw==", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.687.0", - "@aws-sdk/types": "3.686.0", - "@smithy/protocol-http": "^4.1.5", - "@smithy/signature-v4": "^4.2.0", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.911.0.tgz", + "integrity": "sha512-SJ4dUcY9+HPDIMCHiskT8F7JrRVZF2Y1NUN0Yiy6VUHSULgq2MDlIzSQpNICnmXhk1F1E1B2jJG9XtPYrvtqUg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/protocol-http": "^5.3.2", + "@smithy/signature-v4": "^5.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.686.0.tgz", - "integrity": "sha512-9oL4kTCSePFmyKPskibeiOXV6qavPZ63/kXM9Wh9V6dTSvBtLeNnMxqGvENGKJcTdIgtoqyqA6ET9u0PJ5IRIg==", - "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/property-provider": "^3.1.7", - "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.911.0.tgz", + "integrity": "sha512-O1c5F1pbEImgEe3Vr8j1gpWu69UXWj3nN3vvLGh77hcrG5dZ8I27tSP5RN4Labm8Dnji/6ia+vqSYpN8w6KN5A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.911.0", + "@aws-sdk/nested-clients": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/property-provider": "^4.2.2", + "@smithy/shared-ini-file-loader": "^4.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.686.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.686.0.tgz", - "integrity": "sha512-xFnrb3wxOoJcW2Xrh63ZgFo5buIu9DF7bOHnwoUxHdNpUXicUh0AHw85TjXxyxIAd0d1psY/DU7QHoNI3OswgQ==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.910.0.tgz", + "integrity": "sha512-o67gL3vjf4nhfmuSUNNkit0d62QJEwwHLxucwVJkR/rw9mfUtAWsgBs8Tp16cdUbMgsyQtCQilL8RAJDoGtadQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.679.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.679.0.tgz", - "integrity": "sha512-CwzEbU8R8rq9bqUFryO50RFBlkfufV9UfMArHPWlo+lmsC+NlSluHQALoj6Jkq3zf5ppn1CN0c1DDLrEqdQUXg==", + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz", + "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.686.0.tgz", - "integrity": "sha512-7msZE2oYl+6QYeeRBjlDgxQUhq/XRky3cXE0FqLFs2muLS7XSuQEXkpOXB3R782ygAP6JX0kmBxPTLurRTikZg==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.910.0.tgz", + "integrity": "sha512-6XgdNe42ibP8zCQgNGDWoOF53RfEKzpU/S7Z29FTTJ7hcZv0SytC0ZNQQZSx4rfBl036YWYwJRoJMlT4AA7q9A==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/types": "^3.6.0", - "@smithy/util-endpoints": "^2.1.4", + "@aws-sdk/types": "3.910.0", + "@smithy/types": "^4.7.1", + "@smithy/url-parser": "^4.2.2", + "@smithy/util-endpoints": "^3.2.2", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-format-url": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.686.0.tgz", - "integrity": "sha512-9doB6O4FAlnWZrvnFDUxTtSFtuL8kUqxlP00HTiDgL1uDJZ8e0S4gqjKR+9+N5goFtxGi7IJeNsDEz2H7imvgw==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.910.0.tgz", + "integrity": "sha512-cYfgDGxZnrAq7wvntBjW6/ZewRcwywOE1Q9KKPO05ZHXpWCrqKNkx0JG8h2xlu+2qX6lkLZS+NyFAlwCQa0qfA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/querystring-builder": "^3.0.8", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@smithy/querystring-builder": "^4.2.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { @@ -1726,29 +1418,31 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.686.0.tgz", - "integrity": "sha512-YiQXeGYZegF1b7B2GOR61orhgv79qmI0z7+Agm3NXLO6hGfVV3kFUJbXnjtH1BgWo5hbZYW7HQ2omGb3dnb6Lg==", + "version": "3.910.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.910.0.tgz", + "integrity": "sha512-iOdrRdLZHrlINk9pezNZ82P/VxO/UmtmpaOAObUN+xplCUJu31WNM2EE/HccC8PQw6XlAudpdA6HDTGiW6yVGg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.686.0", - "@smithy/types": "^3.6.0", + "@aws-sdk/types": "3.910.0", + "@smithy/types": "^4.7.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.687.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.687.0.tgz", - "integrity": "sha512-idkP6ojSTZ4ek1pJ8wIN7r9U3KR5dn0IkJn3KQBXQ58LWjkRqLtft2vxzdsktWwhPKjjmIKl1S0kbvqLawf8XQ==", - "dependencies": { - "@aws-sdk/middleware-user-agent": "3.687.0", - "@aws-sdk/types": "3.686.0", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/types": "^3.6.0", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.911.0.tgz", + "integrity": "sha512-3l+f6ooLF6Z6Lz0zGi7vSKSUYn/EePPizv88eZQpEAFunBHv+CSVNPtxhxHfkm7X9tTsV4QGZRIqo3taMLolmA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.911.0", + "@aws-sdk/types": "3.910.0", + "@smithy/node-config-provider": "^4.3.2", + "@smithy/types": "^4.7.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -1760,15 +1454,26 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.686.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.686.0.tgz", - "integrity": "sha512-k0z5b5dkYSuOHY0AOZ4iyjcGBeVL9lWsQNF4+c+1oK3OW4fRWl/bNa1soMRMpangsHPzgyn/QkzuDbl7qR4qrw==", + "version": "3.911.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.911.0.tgz", + "integrity": "sha512-/yh3oe26bZfCVGrIMRM9Z4hvvGJD+qx5tOLlydOkuBkm72aXON7D9+MucjJXTAcI8tF2Yq+JHa0478eHQOhnLg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.7.1", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz", + "integrity": "sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" } }, "node_modules/@axe-core/react": { @@ -1805,7 +1510,6 @@ "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.25.7", @@ -3881,12 +3585,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "optional": true - }, "node_modules/@esbuild-kit/core-utils": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", @@ -5326,6 +5024,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -5384,7 +5083,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-3.0.1.tgz", "integrity": "sha512-YbYUt7YyEOdFxhyuCWmLKf5vKhID/hJAojEUnheJk4D8iYVLFQw+BAoBWru/dHGch1omtmZOPstsmKPyBF68Tw==", - "peer": true, "dependencies": { "@mdx-js/mdx": "^3.0.0", "source-map": "^0.7.0" @@ -5435,7 +5133,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", - "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -5720,7 +5417,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -5754,7 +5450,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -5770,7 +5465,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz", "integrity": "sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.56.0", "@types/shimmer": "^1.2.0", @@ -6306,7 +6000,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -6324,7 +6017,6 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=14" } @@ -6367,7 +6059,6 @@ "integrity": "sha512-W5lhqPUVPqhtc/ySvZI5Q8X2ztBOUgZ8LbAFy0JQgrXZs2xaILrUcNO3rQjwbLPfGK13+rZsDa1FpG+tqYkT5w==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "playwright": "1.48.0" }, @@ -7013,7 +6704,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -7540,643 +7230,734 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", - "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.3.tgz", + "integrity": "sha512-xWL9Mf8b7tIFuAlpjKtRPnHrR8XVrwTj5NPYO/QwZPtc0SDLsPxb56V5tzi5yspSMytISHybifez+4jlrx0vkQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz", - "integrity": "sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", + "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz", - "integrity": "sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", + "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-base64": "^3.0.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.10.tgz", - "integrity": "sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==", - "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/types": "^3.6.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.3.3.tgz", + "integrity": "sha512-xSql8A1Bl41O9JvGU/CtgiLBlwkvpHTSKRlvz9zOBvBCPjXghZ6ZkcVzmV2f7FLAA+80+aqKmIOmy8pEDrtCaw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.3", + "@smithy/types": "^4.8.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.3", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/core": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.1.tgz", - "integrity": "sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.8", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-stream": "^3.2.1", - "@smithy/util-utf8": "^3.0.0", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.17.0.tgz", + "integrity": "sha512-Tir3DbfoTO97fEGUZjzGeoXgcQAUBRDTmuH9A8lxuP8ATrgezrAJ6cLuRvwdKN4ZbYNlHgKlBX69Hyu3THYhtg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.3", + "@smithy/protocol-http": "^5.3.3", + "@smithy/types": "^4.8.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.3", + "@smithy/util-stream": "^4.5.3", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.5.tgz", - "integrity": "sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==", - "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/property-provider": "^3.1.8", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.3.tgz", + "integrity": "sha512-hA1MQ/WAHly4SYltJKitEsIDVsNmXcQfYBRv2e+q04fnqtAX5qXaybxy/fhUeAMCnQIdAjaGDb04fMHQefWRhw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.3", + "@smithy/property-provider": "^4.2.3", + "@smithy/types": "^4.8.0", + "@smithy/url-parser": "^4.2.3", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-codec": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.7.tgz", - "integrity": "sha512-kVSXScIiRN7q+s1x7BrQtZ1Aa9hvvP9FeCqCdBxv37GimIHgBCOnZ5Ip80HLt0DhnAKpiobFdGqTFgbaJNrazA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.3.tgz", + "integrity": "sha512-rcr0VH0uNoMrtgKuY7sMfyKqbHc4GQaQ6Yp4vwgm+Z6psPuOgL+i/Eo/QWdXRmMinL3EgFM0Z1vkfyPyfzLmjw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.6.0", - "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/types": "^4.8.0", + "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.11.tgz", - "integrity": "sha512-Pd1Wnq3CQ/v2SxRifDUihvpXzirJYbbtXfEnnLV/z0OGCTx/btVX74P86IgrZkjOydOASBGXdPpupYQI+iO/6A==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.3.tgz", + "integrity": "sha512-EcS0kydOr2qJ3vV45y7nWnTlrPmVIMbUFOZbMG80+e2+xePQISX9DrcbRpVRFTS5Nqz3FiEbDcTCAV0or7bqdw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.10", - "@smithy/types": "^3.6.0", + "@smithy/eventstream-serde-universal": "^4.2.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.8.tgz", - "integrity": "sha512-zkFIG2i1BLbfoGQnf1qEeMqX0h5qAznzaZmMVNnvPZz9J5AWBPkOMckZWPedGUPcVITacwIdQXoPcdIQq5FRcg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.3.tgz", + "integrity": "sha512-GewKGZ6lIJ9APjHFqR2cUW+Efp98xLu1KmN0jOWxQ1TN/gx3HTUPVbLciFD8CfScBj2IiKifqh9vYFRRXrYqXA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.10.tgz", - "integrity": "sha512-hjpU1tIsJ9qpcoZq9zGHBJPBOeBGYt+n8vfhDwnITPhEre6APrvqq/y3XMDEGUT2cWQ4ramNqBPRbx3qn55rhw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.3.tgz", + "integrity": "sha512-uQobOTQq2FapuSOlmGLUeGTpvcBLE5Fc7XjERUSk4dxEi4AhTwuyHYZNAvL4EMUp7lzxxkKDFaJ1GY0ovrj0Kg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.10", - "@smithy/types": "^3.6.0", + "@smithy/eventstream-serde-universal": "^4.2.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.10.tgz", - "integrity": "sha512-ewG1GHbbqsFZ4asaq40KmxCmXO+AFSM1b+DcO2C03dyJj/ZH71CiTg853FSE/3SHK9q3jiYQIFjlGSwfxQ9kww==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.3.tgz", + "integrity": "sha512-QIvH/CKOk1BZPz/iwfgbh1SQD5Y0lpaw2kLA8zpLRRtYMPXeYUEWh+moTaJyqDaKlbrB174kB7FSRFiZ735tWw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^3.1.7", - "@smithy/types": "^3.6.0", + "@smithy/eventstream-codec": "^4.2.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz", - "integrity": "sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.4.tgz", + "integrity": "sha512-bwigPylvivpRLCm+YK9I5wRIYjFESSVwl8JQ1vVx/XhCw0PtCi558NwTnT2DaVCl5pYlImGuQTSwMsZ+pIavRw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.5", - "@smithy/querystring-builder": "^3.0.8", - "@smithy/types": "^3.6.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/protocol-http": "^5.3.3", + "@smithy/querystring-builder": "^4.2.3", + "@smithy/types": "^4.8.0", + "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.7.tgz", - "integrity": "sha512-4yNlxVNJifPM5ThaA5HKnHkn7JhctFUHvcaz6YXxHlYOSIrzI6VKQPTN8Gs1iN5nqq9iFcwIR9THqchUCouIfg==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.4.tgz", + "integrity": "sha512-W7eIxD+rTNsLB/2ynjmbdeP7TgxRXprfvqQxKFEfy9HW2HeD7t+g+KCIrY0pIn/GFjA6/fIpH+JQnfg5TTk76Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^4.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.1", - "@smithy/types": "^3.6.0", + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.8.tgz", - "integrity": "sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.3.tgz", + "integrity": "sha512-6+NOdZDbfuU6s1ISp3UOk5Rg953RJ2aBLNLLBEcamLjHAg1Po9Ha7QIB5ZWhdRUVuOUrT8BVFR+O2KIPmw027g==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.8.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/hash-stream-node": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.7.tgz", - "integrity": "sha512-xMAsvJ3hLG63lsBVi1Hl6BBSfhd8/Qnp8fC06kjOpJvyyCEXdwHITa5Kvdsk6gaAXLhbZMhQMIGvgUbfnJDP6Q==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.3.tgz", + "integrity": "sha512-EXMSa2yiStVII3x/+BIynyOAZlS7dGvI7RFrzXa/XssBgck/7TXJIvnjnCu328GY/VwHDC4VeDyP1S4rqwpYag==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.8.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.8.tgz", - "integrity": "sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.3.tgz", + "integrity": "sha512-Cc9W5DwDuebXEDMpOpl4iERo8I0KFjTnomK2RMdhhR87GwrSmUmwMxS4P5JdRf+LsjOdIqumcerwRgYMr/tZ9Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/md5-js": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.8.tgz", - "integrity": "sha512-LwApfTK0OJ/tCyNUXqnWCKoE2b4rDSr4BJlDAVCkiWYeHESr+y+d5zlAanuLW6fnitVJRD/7d9/kN/ZM9Su4mA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.3.tgz", + "integrity": "sha512-5+4bUEJQi/NRgzdA5SVXvAwyvEnD0ZAiKzV3yLO6dN5BG8ScKBweZ8mxXXUtdxq+Dx5k6EshKk0XJ7vgvIPSnA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/types": "^4.8.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.10.tgz", - "integrity": "sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.3.tgz", + "integrity": "sha512-/atXLsT88GwKtfp5Jr0Ks1CSa4+lB+IgRnkNrrYP0h1wL4swHNb0YONEvTceNKNdZGJsye+W2HH8W7olbcPUeA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", + "@smithy/protocol-http": "^5.3.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.1.tgz", - "integrity": "sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==", - "dependencies": { - "@smithy/core": "^2.5.1", - "@smithy/middleware-serde": "^3.0.8", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/shared-ini-file-loader": "^3.1.9", - "@smithy/types": "^3.6.0", - "@smithy/url-parser": "^3.0.8", - "@smithy/util-middleware": "^3.0.8", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.4.tgz", + "integrity": "sha512-/RJhpYkMOaUZoJEkddamGPPIYeKICKXOu/ojhn85dKDM0n5iDIhjvYAQLP3K5FPhgB203O3GpWzoK2OehEoIUw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.17.0", + "@smithy/middleware-serde": "^4.2.3", + "@smithy/node-config-provider": "^4.3.3", + "@smithy/shared-ini-file-loader": "^4.3.3", + "@smithy/types": "^4.8.0", + "@smithy/url-parser": "^4.2.3", + "@smithy/util-middleware": "^4.2.3", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.25.tgz", - "integrity": "sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.4.tgz", + "integrity": "sha512-vSgABQAkuUHRO03AhR2rWxVQ1un284lkBn+NFawzdahmzksAoOeVMnXXsuPViL4GlhRHXqFaMlc8Mj04OfQk1w==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/protocol-http": "^4.1.5", - "@smithy/service-error-classification": "^3.0.8", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-retry": "^3.0.8", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/node-config-provider": "^4.3.3", + "@smithy/protocol-http": "^5.3.3", + "@smithy/service-error-classification": "^4.2.3", + "@smithy/smithy-client": "^4.9.0", + "@smithy/types": "^4.8.0", + "@smithy/util-middleware": "^4.2.3", + "@smithy/util-retry": "^4.2.3", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.8.tgz", - "integrity": "sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.3.tgz", + "integrity": "sha512-8g4NuUINpYccxiCXM5s1/V+uLtts8NcX4+sPEbvYQDZk4XoJfDpq5y2FQxfmUL89syoldpzNzA0R9nhzdtdKnQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/protocol-http": "^5.3.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.8.tgz", - "integrity": "sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.3.tgz", + "integrity": "sha512-iGuOJkH71faPNgOj/gWuEGS6xvQashpLwWB1HjHq1lNNiVfbiJLpZVbhddPuDbx9l4Cgl0vPLq5ltRfSaHfspA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.9.tgz", - "integrity": "sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.3.tgz", + "integrity": "sha512-NzI1eBpBSViOav8NVy1fqOlSfkLgkUjUTlohUSgAEhHaFWA3XJiLditvavIP7OpvTjDp5u2LhtlBhkBlEisMwA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.8", - "@smithy/shared-ini-file-loader": "^3.1.9", - "@smithy/types": "^3.6.0", + "@smithy/property-provider": "^4.2.3", + "@smithy/shared-ini-file-loader": "^4.3.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", - "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", - "dependencies": { - "@smithy/abort-controller": "^3.1.6", - "@smithy/protocol-http": "^4.1.5", - "@smithy/querystring-builder": "^3.0.8", - "@smithy/types": "^3.6.0", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.2.tgz", + "integrity": "sha512-MHFvTjts24cjGo1byXqhXrbqm7uznFD/ESFx8npHMWTFQVdBZjrT1hKottmp69LBTRm/JQzP/sn1vPt0/r6AYQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.3", + "@smithy/protocol-http": "^5.3.3", + "@smithy/querystring-builder": "^4.2.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.8.tgz", - "integrity": "sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.3.tgz", + "integrity": "sha512-+1EZ+Y+njiefCohjlhyOcy1UNYjT+1PwGFHCxA/gYctjg3DQWAU19WigOXAco/Ql8hZokNehpzLd0/+3uCreqQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", - "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.3.tgz", + "integrity": "sha512-Mn7f/1aN2/jecywDcRDvWWWJF4uwg/A0XjFMJtj72DsgHTByfjRltSqcT9NyE9RTdBSN6X1RSXrhn/YWQl8xlw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.8.tgz", - "integrity": "sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.3.tgz", + "integrity": "sha512-LOVCGCmwMahYUM/P0YnU/AlDQFjcu+gWbFJooC417QRB/lDJlWSn8qmPSDp+s4YVAHOgtgbNG4sR+SxF/VOcJQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", - "@smithy/util-uri-escape": "^3.0.0", + "@smithy/types": "^4.8.0", + "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.8.tgz", - "integrity": "sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.3.tgz", + "integrity": "sha512-cYlSNHcTAX/wc1rpblli3aUlLMGgKZ/Oqn8hhjFASXMCXjIqeuQBei0cnq2JR8t4RtU9FpG6uyl6PxyArTiwKA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.8.tgz", - "integrity": "sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.3.tgz", + "integrity": "sha512-NkxsAxFWwsPsQiwFG2MzJ/T7uIR6AQNh1SzcxSUnmmIqIQMlLRQDKhc17M7IYjiuBXhrQRjQTo3CxX+DobS93g==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0" + "@smithy/types": "^4.8.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.9.tgz", - "integrity": "sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.3.tgz", + "integrity": "sha512-9f9Ixej0hFhroOK2TxZfUUDR13WVa8tQzhSzPDgXe5jGL3KmaM9s8XN7RQwqtEypI82q9KHnKS71CJ+q/1xLtQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", - "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.8", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.3.tgz", + "integrity": "sha512-CmSlUy+eEYbIEYN5N3vvQTRfqt0lJlQkaQUIf+oizu7BbDut0pozfDjBGecfcfWf7c62Yis4JIEgqQ/TCfodaA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.3", + "@smithy/types": "^4.8.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.3", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.2.tgz", - "integrity": "sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==", - "dependencies": { - "@smithy/core": "^2.5.1", - "@smithy/middleware-endpoint": "^3.2.1", - "@smithy/middleware-stack": "^3.0.8", - "@smithy/protocol-http": "^4.1.5", - "@smithy/types": "^3.6.0", - "@smithy/util-stream": "^3.2.1", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.0.tgz", + "integrity": "sha512-qz7RTd15GGdwJ3ZCeBKLDQuUQ88m+skh2hJwcpPm1VqLeKzgZvXf6SrNbxvx7uOqvvkjCMXqx3YB5PDJyk00ww==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.17.0", + "@smithy/middleware-endpoint": "^4.3.4", + "@smithy/middleware-stack": "^4.2.3", + "@smithy/protocol-http": "^5.3.3", + "@smithy/types": "^4.8.0", + "@smithy/util-stream": "^4.5.3", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.6.0.tgz", - "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.8.0.tgz", + "integrity": "sha512-QpELEHLO8SsQVtqP+MkEgCYTFW0pleGozfs3cZ183ZBj9z3VC1CX1/wtFMK64p+5bhtZo41SeLK1rBRtd25nHQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.8.tgz", - "integrity": "sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.3.tgz", + "integrity": "sha512-I066AigYvY3d9VlU3zG9XzZg1yT10aNqvCaBTw9EPgu5GrsEl1aUkcMvhkIXascYH1A8W0LQo3B1Kr1cJNcQEw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.8", - "@smithy/types": "^3.6.0", + "@smithy/querystring-parser": "^4.2.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/is-array-buffer": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.25.tgz", - "integrity": "sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.3.tgz", + "integrity": "sha512-vqHoybAuZXbFXZqgzquiUXtdY+UT/aU33sxa4GBPkiYklmR20LlCn+d3Wc3yA5ZM13gQ92SZe/D8xh6hkjx+IQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.8", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", - "bowser": "^2.11.0", + "@smithy/property-provider": "^4.2.3", + "@smithy/smithy-client": "^4.9.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.25.tgz", - "integrity": "sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==", - "dependencies": { - "@smithy/config-resolver": "^3.0.10", - "@smithy/credential-provider-imds": "^3.2.5", - "@smithy/node-config-provider": "^3.1.9", - "@smithy/property-provider": "^3.1.8", - "@smithy/smithy-client": "^3.4.2", - "@smithy/types": "^3.6.0", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.4.tgz", + "integrity": "sha512-X5/xrPHedifo7hJUUWKlpxVb2oDOiqPUXlvsZv1EZSjILoutLiJyWva3coBpn00e/gPSpH8Rn2eIbgdwHQdW7Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.3.3", + "@smithy/credential-provider-imds": "^4.2.3", + "@smithy/node-config-provider": "^4.3.3", + "@smithy/property-provider": "^4.2.3", + "@smithy/smithy-client": "^4.9.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-endpoints": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.4.tgz", - "integrity": "sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.3.tgz", + "integrity": "sha512-aCfxUOVv0CzBIkU10TubdgKSx5uRvzH064kaiPEWfNIvKOtNpu642P4FP1hgOFkjQIkDObrfIDnKMKkeyrejvQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.9", - "@smithy/types": "^3.6.0", + "@smithy/node-config-provider": "^4.3.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.8.tgz", - "integrity": "sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.3.tgz", + "integrity": "sha512-v5ObKlSe8PWUHCqEiX2fy1gNv6goiw6E5I/PN2aXg3Fb/hse0xeaAnSpXDiWl7x6LamVKq7senB+m5LOYHUAHw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.6.0", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.8.tgz", - "integrity": "sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.3.tgz", + "integrity": "sha512-lLPWnakjC0q9z+OtiXk+9RPQiYPNAovt2IXD3CP4LkOnd9NpUsxOjMx1SnoUVB7Orb7fZp67cQMtTBKMFDvOGg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^3.0.8", - "@smithy/types": "^3.6.0", + "@smithy/service-error-classification": "^4.2.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.2.1.tgz", - "integrity": "sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==", - "dependencies": { - "@smithy/fetch-http-handler": "^4.0.0", - "@smithy/node-http-handler": "^3.2.5", - "@smithy/types": "^3.6.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.3.tgz", + "integrity": "sha512-oZvn8a5bwwQBNYHT2eNo0EU8Kkby3jeIg1P2Lu9EQtqDxki1LIjGRJM6dJ5CZUig8QmLxWxqOKWvg3mVoOBs5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.4", + "@smithy/node-http-handler": "^4.4.2", + "@smithy/types": "^4.8.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-buffer-from": "^4.2.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@smithy/util-waiter": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.7.tgz", - "integrity": "sha512-d5yGlQtmN/z5eoTtIYgkvOw27US2Ous4VycnXatyoImIF9tzlcpnKqQ/V7qhvJmb2p6xZne1NopCLakdTnkBBQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.3.tgz", + "integrity": "sha512-5+nU///E5sAdD7t3hs4uwvCTWQtTR8JwKwOCSJtBRx0bY1isDo1QwH87vRK86vlFLBTISqoDA2V6xvP6nF1isQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.6", - "@smithy/types": "^3.6.0", + "@smithy/abort-controller": "^4.2.3", + "@smithy/types": "^4.8.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { @@ -8338,7 +8119,6 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -8520,7 +8300,6 @@ "version": "4.36.1", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.36.1.tgz", "integrity": "sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==", - "peer": true, "dependencies": { "@tanstack/query-core": "4.36.1", "use-sync-external-store": "^1.2.0" @@ -8572,7 +8351,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.8.0.tgz", "integrity": "sha512-xsqDI4BNzYRWRtBq7+/38ThhqEr7uG9Njip1x+9/wgR3vWPBFnBkYJTz6jSxS35NRE6BSnERm4/B/vrLuY1Hdw==", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -8651,7 +8429,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.8.0.tgz", "integrity": "sha512-POuA5Igx+Dto0DTazoBFAQTj/M/FCdkqRVD9Uhsxhv49swPyANTJRr05vgbgtHB+NDDsZfCawVh7pI0IAD/O0w==", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -8850,7 +8627,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.8.0.tgz", "integrity": "sha512-o7OGymGxB0B9x3x2prp3KBDYFuBYGc5sW69O672jk8G52DqhzzndgPnkk0qUn8nXAUKuDGbJmpmHVA2kagqnRg==", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -9011,7 +8787,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-2.8.0.tgz", "integrity": "sha512-jJp0vcZ2Ty7RvIL0VU6dm1y+fTfXq1lN2GwtYzYM0ueFuESa+Qo8ticYOImyWZ3wGJGVrjn7OV9r0ReW0/NYkQ==", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -9077,7 +8852,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.8.0.tgz", "integrity": "sha512-eMGpRooUMvKz/vOpnKKppApMSoNM325HxTdAJvTlVAmuHp5bOY5kyY1kfUlePRiVx1t1UlFcXs3kecFwkkBD3Q==", - "peer": true, "dependencies": { "prosemirror-changeset": "^2.2.1", "prosemirror-collab": "^1.3.1", @@ -9176,7 +8950,6 @@ "funding": [ "https://trpc.io/sponsor" ], - "peer": true, "peerDependencies": { "@trpc/server": "10.45.2" } @@ -9205,7 +8978,6 @@ "funding": [ "https://trpc.io/sponsor" ], - "peer": true, "peerDependencies": { "@tanstack/react-query": "^4.18.0", "@trpc/client": "10.45.2", @@ -9220,8 +8992,7 @@ "integrity": "sha512-wOrSThNNE4HUnuhJG6PfDRp4L2009KDVxsd+2VYH8ro6o/7/jwYZ8Uu5j+VaW+mOmc8EHerHzGcdbGNQSAUPgg==", "funding": [ "https://trpc.io/sponsor" - ], - "peer": true + ] }, "node_modules/@trysound/sax": { "version": "0.2.0", @@ -9407,7 +9178,6 @@ "version": "18.3.11", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", - "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -9418,7 +9188,6 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "devOptional": true, - "peer": true, "dependencies": { "@types/react": "*" } @@ -9516,7 +9285,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -9676,6 +9444,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -9684,22 +9453,26 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -9709,12 +9482,14 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -9726,6 +9501,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -9734,6 +9510,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -9741,12 +9518,14 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -9762,6 +9541,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -9774,6 +9554,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -9785,6 +9566,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", @@ -9798,6 +9580,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" @@ -9806,18 +9589,19 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -9868,7 +9652,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -9884,17 +9667,30 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peer": true, "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/algoliasearch": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.8.0.tgz", - "integrity": "sha512-JsKQ1iLdsdWIByzUDAoU7DLVpD9aT/dfKAgzs1UrW0I4xahgTpuZE4btGZUwim3GLfYxzzYKwz5vYSW1Ptce2A==", - "peer": true, + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.12.0.tgz", + "integrity": "sha512-psGBRYdGgik8I6m28iAB8xpubvjEt7UQU+w5MAJUA2324WHiGoHap5BPkkjB14rMaXeRts6pmOsrVIglGyOVwg==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "5.12.0" + "@algolia/client-abtesting": "5.12.0", + "@algolia/client-analytics": "5.12.0", + "@algolia/client-common": "5.12.0", + "@algolia/client-insights": "5.12.0", + "@algolia/client-personalization": "5.12.0", + "@algolia/client-query-suggestions": "5.12.0", + "@algolia/client-search": "5.12.0", + "@algolia/ingestion": "1.12.0", + "@algolia/monitoring": "1.12.0", + "@algolia/recommend": "5.12.0", + "@algolia/requester-browser-xhr": "5.12.0", + "@algolia/requester-fetch": "5.12.0", + "@algolia/requester-node-http": "5.12.0" }, "engines": { "node": ">= 14.0.0" @@ -10684,6 +10480,15 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -10702,9 +10507,10 @@ "dev": true }, "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", + "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", @@ -10744,7 +10550,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -10944,6 +10749,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "peer": true, "engines": { "node": ">=6.0" } @@ -11136,7 +10942,6 @@ "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.3.0.tgz", "integrity": "sha512-vbK8i3rIb/xwZxSpTjz3SagHn1qq9BChLEfy5Hf6fB3/2eFbrwt2n9kHwQcS0CPTRBesreeAcsJfMq2229FnbQ==", "dev": true, - "peer": true, "engines": { "node": ">= 16.14.0" } @@ -12094,7 +11899,8 @@ "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "peer": true }, "node_modules/es-object-atoms": { "version": "1.0.0", @@ -12154,7 +11960,6 @@ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -12225,7 +12030,6 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -12401,7 +12205,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -12920,6 +12723,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true, "engines": { "node": ">=0.8.x" } @@ -12995,21 +12799,18 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" @@ -13346,7 +13147,8 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "peer": true }, "node_modules/glob/node_modules/minimatch": { "version": "9.0.5", @@ -13609,7 +13411,6 @@ "version": "11.10.0", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", - "peer": true, "engines": { "node": ">=12.0.0" } @@ -14348,6 +14149,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -14361,6 +14163,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14808,6 +14611,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, "engines": { "node": ">=6.11.5" } @@ -15012,7 +14816,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.1.0.tgz", "integrity": "sha512-CEbNVoSikAxwDMDPjXlqlFYiZLkDJHwyGu/MfOsJnF3d7f3tds5J3z8s/l9TMXhzfsJCCJEAsD78842mwmg0PQ==", - "peer": true, "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", @@ -15998,14 +15801,14 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true }, "node_modules/next": { "version": "14.2.21", "resolved": "https://registry.npmjs.org/next/-/next-14.2.21.tgz", "integrity": "sha512-rZmLwucLHr3/zfDMYbJXbw0ZeoBpirxkXuvsJbk7UPorvPYZhP7vq7aHbKnU7dQNCYIimRrbB2pp3xmf+wsYUg==", "license": "MIT", - "peer": true, "dependencies": { "@next/env": "14.2.21", "@swc/helpers": "0.5.5", @@ -16242,7 +16045,6 @@ "version": "6.9.15", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.15.tgz", "integrity": "sha512-AHf04ySLC6CIfuRtRiEYtGEXgRfa6INgWGluDhnxTZhHSKvrBu7lc1VVchQ0d8nPc4cFaZoPq8vkyNoZr0TpGQ==", - "peer": true, "engines": { "node": ">=6.0.0" } @@ -16755,7 +16557,6 @@ "version": "8.13.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.0.tgz", "integrity": "sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw==", - "peer": true, "dependencies": { "pg-connection-string": "^2.7.0", "pg-pool": "^3.7.0", @@ -16997,7 +16798,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.0", @@ -17150,7 +16950,6 @@ "version": "3.4.4", "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.4.tgz", "integrity": "sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==", - "peer": true, "engines": { "node": ">=12" }, @@ -17224,7 +17023,6 @@ "version": "10.11.3", "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -17255,7 +17053,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -17496,7 +17293,6 @@ "version": "1.23.0", "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.23.0.tgz", "integrity": "sha512-Q/fgsgl/dlOAW9ILu4OOhYWQbc7TQd4BwKH/RwmUjyVf8682Be4zj3rOYdLnYEcGzyg8LL9Q5IWYKD8tdToreQ==", - "peer": true, "dependencies": { "orderedmap": "^2.0.0" } @@ -17523,7 +17319,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", - "peer": true, "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", @@ -17568,7 +17363,6 @@ "version": "1.34.3", "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", - "peer": true, "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", @@ -17620,6 +17414,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -17628,7 +17423,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -17649,7 +17443,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -17675,7 +17468,6 @@ "version": "7.53.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -18168,7 +17960,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", "license": "MIT", - "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -18257,7 +18048,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, "node_modules/safe-regex-test": { "version": "1.0.3", @@ -18306,6 +18098,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -18357,6 +18150,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -18895,9 +18689,16 @@ } }, "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, "node_modules/style-to-object": { "version": "0.4.4", @@ -19056,7 +18857,6 @@ "version": "3.4.13", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -19129,6 +18929,7 @@ "version": "5.34.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -19146,6 +18947,7 @@ "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -19178,7 +18980,8 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true }, "node_modules/text-table": { "version": "0.2.0", @@ -19479,7 +19282,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19846,6 +19648,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -19963,6 +19766,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -19975,6 +19779,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "peer": true, "engines": { "node": ">=4.0" } @@ -19983,6 +19788,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true, "engines": { "node": ">= 0.6" } @@ -19991,6 +19797,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -20340,7 +20147,6 @@ "version": "3.23.8", "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 7c0fb8ec..c162b219 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,9 @@ "@algolia/autocomplete-core": "^1.17.4", "@algolia/autocomplete-preset-algolia": "^1.17.4", "@auth/drizzle-adapter": "^1.4.2", - "@aws-sdk/client-s3": "^3.669.0", - "@aws-sdk/client-ses": "^3.669.0", - "@aws-sdk/s3-request-presigner": "^3.669.0", + "@aws-sdk/client-s3": "^3.740.0", + "@aws-sdk/client-ses": "^3.740.0", + "@aws-sdk/s3-request-presigner": "^3.740.0", "@headlessui/react": "^2.1.8", "@heroicons/react": "^2.1.5", "@hookform/resolvers": "^3.9.0", From 672bd6535e937e79babfd54c073a8d9fe5585c5b Mon Sep 17 00:00:00 2001 From: Niall Maher Date: Tue, 16 Dec 2025 13:53:15 +0530 Subject: [PATCH 45/55] Upgrade to Next.js 16, React 19, and modernize dependencies (#1312) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Upgrade to Next.js 16, React 19, and modernize dependencies - Upgrade Next.js from 14.2.21 to 16.0.7 - Upgrade React/React-DOM from 18.3.1 to 19.2.1 - Upgrade next-auth from 4.x to 5.0.0-beta.30 (Auth.js) - Upgrade tRPC from v10 to v11.7.2 - Upgrade TanStack React Query from v4 to v5.90.12 - Upgrade Zod from 3.x to 4.1.13 - Upgrade Sentry from 8.x to 10.29.0 - Upgrade Framer Motion from 11.x to 12.23.25 Breaking changes addressed: - Convert all page params to async (Next.js 16 requirement) - Migrate headers() to async function calls - Update next-auth to new Auth.js v5 API with handlers export - Replace 'loading' status with 'pending' (React Query v5) - Migrate ESLint from .eslintrc to flat config (eslint.config.mjs) - Update Zod error API (error.errors → error.issues) - Fix React 19 type changes (ChildNode → React.ReactNode) - Update TRPCReactProvider to accept serialized headers object * feat: Upgrade to Node.js 24 and modernize welcome email - Update Node.js from v20 to v24 (.nvmrc and volta config) - Migrate nodemailer to v7 with AWS SESv2 API - Update dependencies for React 19 compatibility (@t3-oss/env-nextjs, next-themes, react-highlight-words) - Configure GitHub Actions to use .nvmrc for Node version - Separate newsletter subscription and welcome email error handling - Redesign welcome email template with modern styling (no images for better deliverability) * fix: Add error handling and fix typos in auth flow - Add try/catch for banned user check with fail-closed security pattern - Fix "Excluisve" typo to "Exclusive" in welcome email subject - Fix passwordless email recipient (remove hardcoded debug name) * fix: Resolve React 19 compiler ESLint errors - Replace useState+useEffect patterns with useSyncExternalStore for client-side detection (auth, ThemeToggle, Search) - Rewrite useLocalStorage hook to use useSyncExternalStore - Convert setState-in-effect patterns to useMemo where applicable - Move Placeholder component outside render to fix "cannot create components during render" error - Replace with in company page - Simplify CustomTextareaAutosize to avoid mutating prop refs - Restructure settings page to avoid JSX in try/catch - Add eslint-disable comments for intentional patterns - Ignore cdk/ directory in ESLint config Reduces ESLint errors from 23 to 0 for deployment compatibility. * style: Apply Prettier formatting and fix MDX syntax Format code with Prettier across multiple files and fix markdown bold/italic syntax in MDX content to use proper triple-asterisk notation. * Update next to 16.10 * Update article tests * Fix types --- .eslintrc | 23 - .github/workflows/e2e-tests.yml | 4 +- .github/workflows/pull-request.yml | 2 +- .gitignore | 3 + .mcp.json | 27 + .nvmrc | 2 +- app/(app)/(tsandcs)/privacy/page.mdx | 18 +- app/(app)/[username]/page.tsx | 12 +- .../alpha/additional-details/_actions.ts | 6 +- .../alpha/additional-details/_client.tsx | 24 +- app/(app)/alpha/layout.tsx | 3 +- .../alpha/new/[[...postIdArr]]/_client.tsx | 7 +- app/(app)/articles/[slug]/page.tsx | 12 +- app/(app)/articles/_client.tsx | 4 +- app/(app)/auth/page.tsx | 18 +- app/(app)/company/[slug]/page.tsx | 10 +- app/(app)/draft/[id]/page.tsx | 10 +- app/(app)/jobs/create/_client.tsx | 10 +- .../page.mdx | 2 +- .../page.mdx | 2 +- app/(app)/my-posts/_client.tsx | 4 +- app/(app)/notifications/_client.tsx | 39 +- app/(app)/saved/_client.tsx | 2 +- app/(app)/settings/_client.tsx | 6 +- app/(app)/settings/page.tsx | 17 +- app/(app)/sponsorship/page.tsx | 24 +- .../create/[[...paramsArr]]/_client.tsx | 29 +- app/(standalone)/newsletter/actions.ts | 7 +- app/api/auth/[...nextauth]/route.ts | 8 +- app/layout.tsx | 18 +- app/og/route.tsx | 220 +- app/verify-email/_client.tsx | 23 +- auth.ts | 117 + components/ArticleMenu/ArticleMenu.tsx | 31 +- components/ArticlePreview/ArticlePreview.tsx | 4 +- components/Comments/CommentsArea.tsx | 10 +- .../CustomTextareaAutosize.tsx | 48 +- components/Hero/Hero.tsx | 25 +- components/PromptService/PromptContext.tsx | 13 +- components/PromptService/PromptLink.tsx | 11 +- components/SideBar/SideBarSavedPosts.tsx | 2 +- components/Theme/ThemeToggle/ThemeToggle.tsx | 17 +- .../editor/components/image-resizer.tsx | 9 +- .../disable-heading-text-style-shortcuts.tsx | 3 +- .../editor/extensions/slash-command.tsx | 12 +- .../editor/editor/plugins/upload-images.tsx | 14 +- components/editor/editor/props.ts | 4 +- components/editor/primitives/leaflet.tsx | 2 +- .../markdocNodes/CodeSandbox/CodeSandbox.tsx | 4 +- components/markdocNodes/Media/Media.tsx | 2 +- components/markdocNodes/Youtube/Youtube.tsx | 4 +- components/ui/Search.tsx | 36 +- e2e/articles.spec.ts | 31 +- e2e/constants/constants.ts | 5 + e2e/setup.ts | 38 +- e2e/utils/utils.ts | 8 +- eslint.config.mjs | 59 + hooks/useCreatePage.ts | 36 +- hooks/useLocalStorage.ts | 56 +- markdoc/editor/hotkeys/hotkeys.markdoc.ts | 32 +- markdoc/editor/shortcuts/shortcuts.markdoc.ts | 3 +- markdoc/nodes/customLink.markdoc.ts | 7 +- next-env.d.ts | 3 +- next.config.js | 28 +- package-lock.json | 14332 +++++++++------- package.json | 65 +- server/auth.ts | 115 +- server/trpc/react.tsx | 6 +- server/trpc/server.ts | 7 +- tsconfig.json | 12 +- types/next-auth.d.ts | 10 +- types/types.ts | 2 +- utils/createEmailTemplate.ts | 1018 +- utils/sendEmail.ts | 7 +- utils/trpc.ts | 3 +- 75 files changed, 9507 insertions(+), 7340 deletions(-) delete mode 100644 .eslintrc create mode 100644 .mcp.json create mode 100644 auth.ts create mode 100644 eslint.config.mjs diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 57efadbf..00000000 --- a/.eslintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json" - }, - "plugins": ["@typescript-eslint", "jsx-a11y"], - "extends": [ - "next/core-web-vitals", - "plugin:@typescript-eslint/recommended", - "prettier", - "plugin:jsx-a11y/recommended", - "plugin:playwright/recommended" - ], - "rules": { - "@typescript-eslint/consistent-type-imports": "warn", - "@typescript-eslint/ban-ts-comment": "warn", - "@next/next/no-img-element": "off", - "no-unused-vars": "warn", - "@typescript-eslint/no-unused-vars": "warn", - "no-console": "warn" - }, - "ignorePatterns": ["next.config.js", "*/lambdas/**/*.js"] -} diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 90250dc2..c97d5a06 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "lts/*" + node-version-file: '.nvmrc' cache: "npm" - name: Install dependencies @@ -55,7 +55,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "lts/*" + node-version-file: '.nvmrc' cache: "npm" - name: Cache Playwright browsers diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 84df7d17..41990f6d 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -19,7 +19,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: 'lts/*' + node-version-file: '.nvmrc' cache: 'npm' - name: Install dependencies diff --git a/.gitignore b/.gitignore index d3f19f80..2951c3a5 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,6 @@ ssmSetup.zsh # open-next .open-next + +# Snyk Security Extension - AI Rules (auto-generated) +.github/instructions/snyk_rules.instructions.md diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 00000000..a86d7c2c --- /dev/null +++ b/.mcp.json @@ -0,0 +1,27 @@ +{ + "mcpServers": { + "context7": { + "command": "npx", + "args": ["-y", "@upstash/context7-mcp"], + "env": { + "CONTEXT7_API_KEY": "ctx7sk-1d829fe1-62b2-4697-b7f4-673ae5047efd" + } + }, + "puppeteer": { + "command": "npx", + "args": ["-y", "puppeteer-mcp-server"], + "env": {} + }, + "next-devtools": { + "command": "npx", + "args": ["-y", "next-devtools-mcp@latest"] + }, + "sequential-thinking": { + "command": "npx", + "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] + }, + "Sentry": { + "url": "https://mcp.sentry.dev/mcp/assemble-pro/javascript-nextjs" + } + } +} diff --git a/.nvmrc b/.nvmrc index 016e34ba..54c65116 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.17.0 +v24 diff --git a/app/(app)/(tsandcs)/privacy/page.mdx b/app/(app)/(tsandcs)/privacy/page.mdx index 2fa94cc3..17630f97 100644 --- a/app/(app)/(tsandcs)/privacy/page.mdx +++ b/app/(app)/(tsandcs)/privacy/page.mdx @@ -70,7 +70,7 @@ Want to learn more about what we do with any information we collect? Review the **Personal information you disclose to us** -**_In Short:_** *We collect personal information that you provide to us.* +***In Short:*** *We collect personal information that you provide to us.* We collect personal information that you voluntarily provide to us when you register on the Services, express an interest in obtaining information about us or our products and Services, when you participate in activities on the Services, or otherwise when you contact us. @@ -96,7 +96,7 @@ All personal information that you provide to us must be true, complete, and accu **2\. HOW DO WE PROCESS YOUR INFORMATION?** -**_In Short:_** *We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent.* +***In Short:*** *We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent.* **We process your personal information for a variety of reasons, depending on how you interact with our Services, including:** @@ -158,7 +158,7 @@ In some exceptional cases, we may be legally permitted under applicable law to p **4\. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?** -**_In Short:_** *We may share information in specific situations described in this section and/or with the following third parties.* +***In Short:*** *We may share information in specific situations described in this section and/or with the following third parties.* We may need to share your personal information in the following situations: @@ -168,7 +168,7 @@ We may need to share your personal information in the following situations: **5\. HOW DO WE HANDLE YOUR SOCIAL LOGINS?** -**_In Short:_** *If you choose to register or log in to our Services using a social media account, we may have access to certain information about you.* +***In Short:*** *If you choose to register or log in to our Services using a social media account, we may have access to certain information about you.* Our Services offer you the ability to register and log in using your third-party social media account details (like your Facebook or Twitter logins). Where you choose to do this, we will receive certain profile information about you from your social media provider. The profile information we receive may vary depending on the social media provider concerned, but will often include your name, email address, friends list, and profile picture, as well as other information you choose to make public on such a social media platform. @@ -176,7 +176,7 @@ We will use the information we receive only for the purposes that are described **6\. HOW LONG DO WE KEEP YOUR INFORMATION?** -**_In Short:_** *We keep your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law.* +***In Short:*** *We keep your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law.* We will only keep your personal information for as long as it is necessary for the purposes set out in this privacy notice, unless a longer retention period is required or permitted by law (such as tax, accounting, or other legal requirements). No purpose in this notice will require us keeping your personal information for longer than the period of time in which users have an account with us. @@ -184,19 +184,19 @@ When we have no ongoing legitimate business need to process your personal inform **7\. HOW DO WE KEEP YOUR INFORMATION SAFE?** -**_In Short:_** *We aim to protect your personal information through a system of organizational and technical security measures.* +***In Short:*** *We aim to protect your personal information through a system of organizational and technical security measures.* We have implemented appropriate and reasonable technical and organizational security measures designed to protect the security of any personal information we process. However, despite our safeguards and efforts to secure your information, no electronic transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security and improperly collect, access, steal, or modify your information. Although we will do our best to protect your personal information, transmission of personal information to and from our Services is at your own risk. You should only access the Services within a secure environment. **8\. DO WE COLLECT INFORMATION FROM MINORS?** -**_In Short:_** *We do not knowingly collect data from or market to children under 18 years of age.* +***In Short:*** *We do not knowingly collect data from or market to children under 18 years of age.* We do not knowingly solicit data from or market to children under 18 years of age. By using the Services, you represent that you are at least 18 or that you are the parent or guardian of such a minor and consent to such minor dependent’s use of the Services. If we learn that personal information from users less than 18 years of age has been collected, we will deactivate the account and take reasonable measures to promptly delete such data from our records. If you become aware of any data we may have collected from children under age 18, please contact us at niall@codu.co. **9\. WHAT ARE YOUR PRIVACY RIGHTS?** -**_In Short:_** *In some regions, such as the European Economic Area (EEA), United Kingdom (UK), Switzerland, and Canada, you have rights that allow you greater access to and control over your personal information. You may review, change, or terminate your account at any time.* +***In Short:*** *In some regions, such as the European Economic Area (EEA), United Kingdom (UK), Switzerland, and Canada, you have rights that allow you greater access to and control over your personal information. You may review, change, or terminate your account at any time.* In some regions (like the EEA, UK, Switzerland, and Canada), you have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of your personal information; (iv) if applicable, to data portability; and (v) not to be subject to automated decision-making. In certain circumstances, you may also have the right to object to the processing of your personal information. You can make such a request by contacting us by using the contact details provided in the section "HOW CAN YOU CONTACT US ABOUT THIS NOTICE?" below. @@ -228,7 +228,7 @@ Most web browsers and some mobile operating systems and mobile applications incl **11\. DO UNITED STATES RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?** -**_In Short:_** *If you are a resident of California, Colorado, Connecticut, Utah or Virginia, you are granted specific rights regarding access to your personal information.* +***In Short:*** *If you are a resident of California, Colorado, Connecticut, Utah or Virginia, you are granted specific rights regarding access to your personal information.* **What categories of personal information do we collect?** diff --git a/app/(app)/[username]/page.tsx b/app/(app)/[username]/page.tsx index 75462db6..c744b1e8 100644 --- a/app/(app)/[username]/page.tsx +++ b/app/(app)/[username]/page.tsx @@ -5,9 +5,10 @@ import { getServerAuthSession } from "@/server/auth"; import { type Metadata } from "next"; import { db } from "@/server/db"; -type Props = { params: { username: string } }; +type Props = { params: Promise<{ username: string }> }; -export async function generateMetadata({ params }: Props): Promise { +export async function generateMetadata(props: Props): Promise { + const params = await props.params; const username = params.username; const profile = await db.query.user.findFirst({ @@ -52,11 +53,10 @@ export async function generateMetadata({ params }: Props): Promise { }; } -export default async function Page({ - params, -}: { - params: { username: string }; +export default async function Page(props: { + params: Promise<{ username: string }>; }) { + const params = await props.params; const username = params?.username; if (!username) { diff --git a/app/(app)/alpha/additional-details/_actions.ts b/app/(app)/alpha/additional-details/_actions.ts index ed4eaad0..dc133a64 100644 --- a/app/(app)/alpha/additional-details/_actions.ts +++ b/app/(app)/alpha/additional-details/_actions.ts @@ -37,7 +37,7 @@ export async function slideOneSubmitAction(dataInput: TypeSlideOneSchema) { return true; } catch (error) { if (error instanceof z.ZodError) { - console.error("Validation error:", error.errors); + console.error("Validation error:", error.issues); } else { console.error("Error updating the User model:", error); } @@ -65,7 +65,7 @@ export async function slideTwoSubmitAction(dataInput: TypeSlideTwoSchema) { return true; } catch (error) { if (error instanceof z.ZodError) { - console.error("Validation error:", error.errors); + console.error("Validation error:", error.issues); } else { console.error("Error updating the User model:", error); } @@ -97,7 +97,7 @@ export async function slideThreeSubmitAction(dataInput: TypeSlideThreeSchema) { return true; } catch (error) { if (error instanceof z.ZodError) { - console.error("Validation error:", error.errors); + console.error("Validation error:", error.issues); } else { console.error("Error updating the User model:", error); } diff --git a/app/(app)/alpha/additional-details/_client.tsx b/app/(app)/alpha/additional-details/_client.tsx index 5e67dac8..4fa0acea 100644 --- a/app/(app)/alpha/additional-details/_client.tsx +++ b/app/(app)/alpha/additional-details/_client.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useEffect, useState } from "react"; +import React, { useEffect, useMemo, useState } from "react"; import { redirect, useRouter, useSearchParams } from "next/navigation"; import { useSession } from "next-auth/react"; import { @@ -228,23 +228,21 @@ function SlideTwo({ details }: { details: UserDetails }) { parsedDateOfBirth?.getDate(), ); - const [listOfDaysInSelectedMonth, setListOfDaysInSelectedMonth] = useState([ - 0, - ]); - - useEffect(() => { - // If year or month change, recalculate how many days are in the specified month + // Compute days in month directly from year/month (no state needed) + const listOfDaysInSelectedMonth = useMemo(() => { if (year && month !== undefined) { // Returns the last day of the month, by creating a date with day 0 of the following month. - const nummberOfDaysInMonth = new Date(year, month + 1, 0).getDate(); - const daysArray = Array.from( - { length: nummberOfDaysInMonth }, + const numberOfDaysInMonth = new Date(year, month + 1, 0).getDate(); + return Array.from( + { length: numberOfDaysInMonth }, (_, index) => index + 1, ); - setListOfDaysInSelectedMonth(daysArray); } + return [0]; + }, [year, month]); - // Update the date object when year, month or date change + // Update the date object when year, month or day change + useEffect(() => { if (year && month !== undefined && day) { let selectedDate: Date; @@ -257,7 +255,7 @@ function SlideTwo({ details }: { details: UserDetails }) { } setValue("dateOfBirth", selectedDate.toISOString()); } - }, [year, month, day]); + }, [year, month, day, setValue]); const startYearAgeDropdown = 1950; const endYearAgeDropdown = 2010; diff --git a/app/(app)/alpha/layout.tsx b/app/(app)/alpha/layout.tsx index 642edf85..0c56d862 100644 --- a/app/(app)/alpha/layout.tsx +++ b/app/(app)/alpha/layout.tsx @@ -1,3 +1,4 @@ +import React from "react"; import { notFound } from "next/navigation"; export const metadata = { @@ -8,7 +9,7 @@ export const metadata = { }, }; -export default function Alpha({ children }: { children: ChildNode }) { +export default function Alpha({ children }: { children: React.ReactNode }) { if (process.env.ALPHA || process.env.NODE_ENV === "development") { return <>{children}; } diff --git a/app/(app)/alpha/new/[[...postIdArr]]/_client.tsx b/app/(app)/alpha/new/[[...postIdArr]]/_client.tsx index 69074792..e262d709 100644 --- a/app/(app)/alpha/new/[[...postIdArr]]/_client.tsx +++ b/app/(app)/alpha/new/[[...postIdArr]]/_client.tsx @@ -47,7 +47,8 @@ const Create = () => { useEffect(() => { _setUnsaved(hasUnsavedChanges); - }, [hasUnsavedChanges, _setUnsaved]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [hasUnsavedChanges]); return ( <> @@ -197,7 +198,7 @@ const Create = () => {
- {dataStatus === "loading" && postId && ( + {dataStatus === "pending" && postId && (
@@ -236,7 +237,7 @@ const Create = () => {
- {saveStatus === "loading" && ( + {saveStatus === "pending" && (

Auto-saving...

)} {saveStatus === "error" && savedTime && ( diff --git a/app/(app)/articles/[slug]/page.tsx b/app/(app)/articles/[slug]/page.tsx index 614e9f6e..605920d0 100644 --- a/app/(app)/articles/[slug]/page.tsx +++ b/app/(app)/articles/[slug]/page.tsx @@ -20,9 +20,10 @@ import DOMPurify from "isomorphic-dompurify"; import type { JSONContent } from "@tiptap/core"; import NotFound from "@/components/NotFound/NotFound"; -type Props = { params: { slug: string } }; +type Props = { params: Promise<{ slug: string }> }; -export async function generateMetadata({ params }: Props): Promise { +export async function generateMetadata(props: Props): Promise { + const params = await props.params; const slug = params.slug; const post = await getPost({ slug }); @@ -32,7 +33,7 @@ export async function generateMetadata({ params }: Props): Promise { const tags = post?.tags.map((tag) => tag.tag.title); if (!post) return {}; - const host = headers().get("host") || ""; + const host = (await headers()).get("host") || ""; return { title: `${post.title} | by ${post.user.name} | Codú`, authors: { @@ -77,11 +78,12 @@ const renderSanitizedTiptapContent = (jsonContent: JSONContent) => { return DOMPurify.sanitize(rawHtml); }; -const ArticlePage = async ({ params }: Props) => { +const ArticlePage = async (props: Props) => { + const params = await props.params; const session = await getServerAuthSession(); const { slug } = params; - const host = headers().get("host") || ""; + const host = (await headers()).get("host") || ""; const post = await getPost({ slug }); diff --git a/app/(app)/articles/_client.tsx b/app/(app)/articles/_client.tsx index 6ad05d83..73e21cd0 100644 --- a/app/(app)/articles/_client.tsx +++ b/app/(app)/articles/_client.tsx @@ -104,7 +104,7 @@ const ArticlesPage = () => { Something went wrong... Please refresh your page.
)} - {status === "loading" && + {status === "pending" && Children.toArray( Array.from({ length: 7 }, () => { return ; @@ -164,7 +164,7 @@ const ArticlesPage = () => { Popular topics
- {tagsStatus === "loading" && } + {tagsStatus === "pending" && } {tagsStatus === "success" && tagsData.data.map(({ title }) => ( () => {}; +const getClientSnapshot = () => true; +const getServerSnapshot = () => false; export const PostAuthPage = (content: { heading: string; subHeading: string; }) => { - const [mounted, setMounted] = useState(false); + const mounted = useSyncExternalStore( + emptySubscribe, + getClientSnapshot, + getServerSnapshot, + ); const { resolvedTheme } = useTheme(); - // useEffect only happens on client not server - useEffect(() => { - setMounted(true); - }, []); - // if on server dont render. needed to prevent a hydration mismatch error if (!mounted) return null; diff --git a/app/(app)/company/[slug]/page.tsx b/app/(app)/company/[slug]/page.tsx index a951a5e5..ec38a34f 100644 --- a/app/(app)/company/[slug]/page.tsx +++ b/app/(app)/company/[slug]/page.tsx @@ -1,4 +1,5 @@ import { notFound } from "next/navigation"; +import Link from "next/link"; import { companies } from "./config"; export const metadata = { @@ -7,9 +8,10 @@ export const metadata = { "Explore our community sponsors. Ninedots Recruitment connects top talent with leading companies in the tech industry.", }; -type Props = { params: { slug: string } }; +type Props = { params: Promise<{ slug: string }> }; -export default async function Page({ params }: Props) { +export default async function Page(props: Props) { + const params = await props.params; const { slug } = params; const company = companies.find((item) => item.slug === slug.toLowerCase()); @@ -63,12 +65,12 @@ export default async function Page({ params }: Props) {
diff --git a/app/(app)/draft/[id]/page.tsx b/app/(app)/draft/[id]/page.tsx index d132565f..ff6c0944 100644 --- a/app/(app)/draft/[id]/page.tsx +++ b/app/(app)/draft/[id]/page.tsx @@ -11,15 +11,16 @@ import { type Metadata } from "next"; import { getPostPreview } from "@/server/lib/posts"; import { getCamelCaseFromLower } from "@/utils/utils"; -type Props = { params: { id: string } }; +type Props = { params: Promise<{ id: string }> }; -export async function generateMetadata({ params }: Props): Promise { +export async function generateMetadata(props: Props): Promise { + const params = await props.params; const { id } = params; const post = await getPostPreview({ id }); if (!post) return {}; - const host = headers().get("host") || ""; + const host = (await headers()).get("host") || ""; return { title: `Draft: ${post.title} | by ${post.user.name} | Codú`, authors: { @@ -34,7 +35,8 @@ export async function generateMetadata({ params }: Props): Promise { }; } -const PreviewPage = async ({ params }: Props) => { +const PreviewPage = async (props: Props) => { + const params = await props.params; const { id } = params; const post = await getPostPreview({ id }); diff --git a/app/(app)/jobs/create/_client.tsx b/app/(app)/jobs/create/_client.tsx index dcbb7acf..7b49f23f 100644 --- a/app/(app)/jobs/create/_client.tsx +++ b/app/(app)/jobs/create/_client.tsx @@ -59,7 +59,7 @@ export default function Content() { const fileInputRef = useRef(null); const [imgUrl, setImgUrl] = useState(null); const [uploadStatus, setUploadStatus] = useState< - "idle" | "loading" | "success" | "error" + "idle" | "pending" | "success" | "error" >("idle"); const onSubmit: SubmitHandler = (values) => { const formData = { @@ -70,12 +70,12 @@ export default function Content() { }; const handleLogoUpload = async (e: React.ChangeEvent) => { - if (uploadStatus === "loading") { + if (uploadStatus === "pending") { return toast.info("Upload in progress, please wait..."); } if (e.target.files && e.target.files.length > 0) { - setUploadStatus("loading"); + setUploadStatus("pending"); const file = e.target.files[0]; const { size, type } = file; @@ -155,9 +155,9 @@ export default function Content() { onClick={() => { fileInputRef.current?.click(); }} - disabled={uploadStatus === "loading"} + disabled={uploadStatus === "pending"} > - {uploadStatus === "loading" ? "Uploading..." : "Change Logo"} + {uploadStatus === "pending" ? "Uploading..." : "Change Logo"} { title="Delete article" subTitle="Are you sure you want to delete this article?" content="All of the data will be permanently removed from our servers forever. This action cannot be undone." - confirmText={deleteStatus === "loading" ? "Deleting..." : "Delete"} + confirmText={deleteStatus === "pending" ? "Deleting..." : "Delete"} cancelText="Cancel" /> )} @@ -113,7 +113,7 @@ const MyPosts = () => {
- {selectedTabData.status === "loading" && ( + {selectedTabData.status === "pending" && (

Fetching your posts...

)} {selectedTabData.status === "error" && ( diff --git a/app/(app)/notifications/_client.tsx b/app/(app)/notifications/_client.tsx index 7cc8ca4e..e2b6e3e8 100644 --- a/app/(app)/notifications/_client.tsx +++ b/app/(app)/notifications/_client.tsx @@ -12,6 +12,23 @@ import { import PageHeading from "@/components/PageHeading/PageHeading"; import { api } from "@/server/trpc/react"; +// Moved outside to avoid "cannot create components during render" error +const Placeholder = () => ( +
+
+
+
+
+
+
+
+
+
+
+
+
+); + const Notifications = () => { const { status, @@ -50,26 +67,10 @@ const Notifications = () => { if (inView && hasNextPage) { fetchNextPage(); } - }, [inView]); + }, [inView, hasNextPage, fetchNextPage]); const noNotifications = !data?.pages[0].data.length; - const Placeholder = () => ( -
-
-
-
-
-
-
-
-
-
-
-
-
- ); - return ( <>
@@ -89,13 +90,13 @@ const Notifications = () => { {status === "error" && (
Something went wrong... Please refresh your page.
)} - {status === "loading" && + {status === "pending" && Children.toArray( Array.from({ length: 7 }, () => { return ; }), )} - {status !== "loading" && noNotifications && ( + {status !== "pending" && noNotifications && (

No new notifications. ✅{" "}

diff --git a/app/(app)/saved/_client.tsx b/app/(app)/saved/_client.tsx index f6e0c4ec..042a2a32 100644 --- a/app/(app)/saved/_client.tsx +++ b/app/(app)/saved/_client.tsx @@ -32,7 +32,7 @@ const SavedPosts = () => {
Saved items
- {bookmarkStatus === "loading" && + {bookmarkStatus === "pending" && Children.toArray( Array.from({ length: 7 }, () => { return ; diff --git a/app/(app)/settings/_client.tsx b/app/(app)/settings/_client.tsx index 04d02cce..b39f45ca 100644 --- a/app/(app)/settings/_client.tsx +++ b/app/(app)/settings/_client.tsx @@ -41,7 +41,7 @@ type User = Pick< >; type ProfilePhoto = { - status: "success" | "error" | "loading" | "idle"; + status: "pending" | "error" | "success" | "idle"; url: string; }; @@ -105,7 +105,7 @@ const Settings = ({ profile }: { profile: User }) => { }; const uploadToUrl = async (signedUrl: string, file: File) => { - setProfilePhoto({ status: "loading", url: "" }); + setProfilePhoto({ status: "pending", url: "" }); if (!file) { setProfilePhoto({ status: "error", url: "" }); @@ -204,7 +204,7 @@ const Settings = ({ profile }: { profile: User }) => { square src={ profilePhoto.status === "error" || - profilePhoto.status === "loading" + profilePhoto.status === "pending" ? undefined : `${profilePhoto.url}` } diff --git a/app/(app)/settings/page.tsx b/app/(app)/settings/page.tsx index 008f5145..7ac756a8 100644 --- a/app/(app)/settings/page.tsx +++ b/app/(app)/settings/page.tsx @@ -70,15 +70,18 @@ export default async function Page() { return notFound(); } + // Fetch newsletter status with error handling + let newsletterStatus = existingUser.newsletter; try { - const newsletter = await isUserSubscribedToNewsletter(session.user.email); - const cleanedUser = { - ...existingUser, - newsletter, - }; - return ; + newsletterStatus = await isUserSubscribedToNewsletter(session.user.email); } catch (error) { Sentry.captureException(error); - return ; + // Fall back to existing newsletter status } + + const cleanedUser = { + ...existingUser, + newsletter: newsletterStatus, + }; + return ; } diff --git a/app/(app)/sponsorship/page.tsx b/app/(app)/sponsorship/page.tsx index 91bc9e14..ecdc46b2 100644 --- a/app/(app)/sponsorship/page.tsx +++ b/app/(app)/sponsorship/page.tsx @@ -71,7 +71,11 @@ const Sponsorship = () => {
- + {
- + {
- + {
- + { const [copied, setCopied] = useState(false); const [uploadUrl, setUploadUrl] = useState(null); const [uploadStatus, setUploadStatus] = useState< - "loading" | "error" | "success" | "default" + "pending" | "error" | "success" | "default" >("default"); const [postStatus, setPostStatus] = useState(null); @@ -65,16 +65,16 @@ const Create = ({ session }: { session: Session | null }) => { usePrompt(); useEffect(() => { - _setUnsaved(); + _setUnsaved(unsavedChanges); }, [unsavedChanges, _setUnsaved]); const handleUpload = async (e: React.ChangeEvent) => { - if (uploadStatus === "loading") { + if (uploadStatus === "pending") { return toast.info("Upload in progress, please wait..."); } if (e.target.files && e.target.files.length > 0) { setUploadUrl(null); - setUploadStatus("loading"); + setUploadStatus("pending"); const file = e.target.files[0]; const { size, type } = file; @@ -240,9 +240,9 @@ const Create = ({ session }: { session: Session | null }) => { }; const hasLoadingState = - publishStatus === "loading" || - saveStatus === "loading" || - dataStatus === "loading"; + publishStatus === "pending" || + saveStatus === "pending" || + dataStatus === "pending"; const currentPostStatus = data?.published ? getPostStatus(new Date(data.published)) @@ -624,7 +624,7 @@ const Create = ({ session }: { session: Session | null }) => {
- {dataStatus === "loading" && postId && ( + {dataStatus === "pending" && postId && (
@@ -700,9 +700,9 @@ const Create = ({ session }: { session: Session | null }) => {
diff --git a/app/(standalone)/newsletter/actions.ts b/app/(standalone)/newsletter/actions.ts index 4f6b6198..2c980af3 100644 --- a/app/(standalone)/newsletter/actions.ts +++ b/app/(standalone)/newsletter/actions.ts @@ -4,11 +4,8 @@ import { z } from "zod"; const FormDataSchema = z.object({ email: z - .string({ - required_error: "Email is required", - invalid_type_error: "Must be a valid email address", - }) - .email(), + .string({ error: "Email is required" }) + .email({ error: "Must be a valid email address" }), }); //@TODO - Add sentry to eat errors diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts index 0ab79c26..86c9f3da 100644 --- a/app/api/auth/[...nextauth]/route.ts +++ b/app/api/auth/[...nextauth]/route.ts @@ -1,7 +1,3 @@ -import NextAuth from "next-auth"; +import { handlers } from "@/auth"; -import { authOptions } from "@/server/auth"; - -const handler = NextAuth(authOptions); - -export { handler as GET, handler as POST }; +export const { GET, POST } = handlers; diff --git a/app/layout.tsx b/app/layout.tsx index 0b53506d..cef3cae0 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,7 +4,7 @@ import Fathom from "@/components/Fathom/Fathom"; import A11yProvider from "@/components/A11yProvider/A11yProvider"; import { Toaster } from "sonner"; import { CSPostHogProvider } from "./providers"; -import dynamic from "next/dynamic"; +import PostHogPageView from "@/components/PageViews/PageViews"; import ThemeProvider from "@/components/Theme/ThemeProvider"; import { TRPCReactProvider } from "@/server/trpc/react"; @@ -12,13 +12,6 @@ import AuthProvider from "@/context/AuthProvider"; import ProgressBar from "@/components/ProgressBar/ProgressBar"; import { PromptProvider } from "@/components/PromptService"; -const PostHogPageView = dynamic( - () => import("@/components/PageViews/PageViews"), - { - ssr: false, - }, -); - // @TODO layout app in way that doesn't need to use client session check export const metadata = { title: "Codú - The Web Developer Community", @@ -69,6 +62,13 @@ export default async function RootLayout({ }: { children: React.ReactNode; }) { + // Serialize headers for client component + const headersList = await headers(); + const headersObject: Record = {}; + headersList.forEach((value, key) => { + headersObject[key] = value; + }); + return ( - + {children} diff --git a/app/og/route.tsx b/app/og/route.tsx index df17744d..2a4a0dc8 100644 --- a/app/og/route.tsx +++ b/app/og/route.tsx @@ -30,130 +30,124 @@ export async function GET(request: Request) { ).then((res) => res.arrayBuffer()); return new ImageResponse( - ( -
+ + +
+
+
+
- - -
-
-
-
- planet - {/* Main content */} -
-
- Codu Logo + /> + planet + {/* Main content */} +
+
+ Codu Logo +
+
+
+ {title}
-
-
- {title} -
-
-
-
- {author} -
-
- {`${formatDate(date)} · ${readTime} min read`} -
+
+
+
+ {author} +
+
+ {`${formatDate(date)} · ${readTime} min read`}
- ), +
, { fonts: [ { diff --git a/app/verify-email/_client.tsx b/app/verify-email/_client.tsx index bf75df10..088f28b9 100644 --- a/app/verify-email/_client.tsx +++ b/app/verify-email/_client.tsx @@ -3,25 +3,23 @@ import { Button } from "@headlessui/react"; import { AlertCircle, CheckCircle, Loader } from "lucide-react"; import { useRouter, useSearchParams } from "next/navigation"; -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useRef } from "react"; function Content() { const params = useSearchParams(); const router = useRouter(); const [status, setStatus] = useState< - "idle" | "loading" | "success" | "error" + "idle" | "pending" | "success" | "error" >("idle"); const [message, setMessage] = useState(""); - const [token, setToken] = useState(null); + // Get token directly from params (no need for separate state) + const token = params.get("token"); + const hasVerified = useRef(false); useEffect(() => { - const tokenParam = params.get("token"); - if (tokenParam && !token) { - setToken(tokenParam); - } - }, [params, token]); + // Prevent double verification in strict mode + if (hasVerified.current) return; - useEffect(() => { const verifyEmail = async () => { if (!token) { setStatus("error"); @@ -30,7 +28,8 @@ function Content() { ); return; } - setStatus("loading"); + hasVerified.current = true; + setStatus("pending"); try { const res = await fetch(`/api/verify-email?token=${token}`); @@ -41,7 +40,7 @@ function Content() { setStatus("error"); } setMessage(data.message); - } catch (error) { + } catch { setStatus("error"); setMessage( "An error occurred during verification. Please try again later.", @@ -60,7 +59,7 @@ function Content() {
Verifying your email address
- {status === "loading" && ( + {status === "pending" && (

diff --git a/auth.ts b/auth.ts new file mode 100644 index 00000000..526f3886 --- /dev/null +++ b/auth.ts @@ -0,0 +1,117 @@ +import NextAuth from "next-auth"; +import GitHub from "next-auth/providers/github"; +import GitLab from "next-auth/providers/gitlab"; +import Nodemailer from "next-auth/providers/nodemailer"; +import { DrizzleAdapter } from "@auth/drizzle-adapter"; +import { db } from "@/server/db"; +import { user } from "@/server/db/schema"; +import { createWelcomeEmailTemplate } from "@/utils/createEmailTemplate"; +import { createPasswordLessEmailTemplate } from "@/utils/createPasswordLessEmailTemplate"; +import { manageNewsletterSubscription } from "@/server/lib/newsletter"; +import sendEmail, { nodemailerSesTransporter } from "@/utils/sendEmail"; +import * as Sentry from "@sentry/nextjs"; + +export const { handlers, auth, signIn, signOut } = NextAuth({ + // @ts-expect-error - DrizzleAdapter type mismatch with next-auth internal types + adapter: DrizzleAdapter(db, { + // @ts-expect-error - Custom user table + usersTable: user, + }), + providers: [ + GitHub({ + clientId: process.env.GITHUB_ID!, + clientSecret: process.env.GITHUB_SECRET!, + }), + GitLab({ + clientId: process.env.GITLAB_ID!, + clientSecret: process.env.GITLAB_SECRET!, + }), + Nodemailer({ + server: { + // Using custom sendVerificationRequest, so this is not used + host: "", + port: 0, + auth: { user: "", pass: "" }, + }, + from: process.env.ADMIN_EMAIL, + async sendVerificationRequest({ identifier, url }) { + try { + if (!process.env.ADMIN_EMAIL) { + throw new Error("ADMIN_EMAIL not set"); + } + await nodemailerSesTransporter.sendMail({ + to: identifier, + from: process.env.ADMIN_EMAIL, + subject: `Sign in to Codú 🚀`, + text: `Sign in to Codú 🚀\n\n`, + html: createPasswordLessEmailTemplate(url), + }); + } catch (error) { + Sentry.captureException(error); + throw new Error(`Sign in email could not be sent`); + } + }, + }), + ], + pages: { + signIn: "/get-started", + newUser: "/settings", + verifyRequest: "/auth", + error: "/auth/error", + }, + callbacks: { + session({ session, user }) { + if (session.user) { + session.user.id = user.id; + session.user.role = user.role; + } + return session; + }, + async signIn({ user }) { + try { + const userIsBanned = await db.query.banned_users.findFirst({ + where: (banned_users, { eq }) => eq(banned_users.userId, user.id), + }); + return !userIsBanned; + } catch (error) { + console.error("Error checking banned users:", error); + Sentry.captureException(error); + // Fail closed: reject sign-in on error to maintain security + return false; + } + }, + }, + events: { + async createUser({ user }) { + const { email } = user; + + if (!email) { + console.error("Missing email so cannot send welcome email"); + Sentry.captureMessage("Missing 'email' so cannot send welcome email"); + return; + } + const htmlMessage = createWelcomeEmailTemplate(user?.name || undefined); + + // Subscribe to newsletter (separate try/catch so it doesn't block welcome email) + try { + await manageNewsletterSubscription(email, "subscribe"); + } catch (error) { + console.error("Failed to subscribe user to newsletter:", error); + Sentry.captureException(error); + } + + // Send welcome email + try { + await sendEmail({ + recipient: email, + htmlMessage, + subject: + "Thanks for Joining Codú 🎉 + Your Exclusive Community Invite.", + }); + } catch (error) { + console.error("Failed to send welcome email:", error); + Sentry.captureException(error); + } + }, + }, +}); diff --git a/components/ArticleMenu/ArticleMenu.tsx b/components/ArticleMenu/ArticleMenu.tsx index 1c97ec37..f8b1f4c8 100644 --- a/components/ArticleMenu/ArticleMenu.tsx +++ b/components/ArticleMenu/ArticleMenu.tsx @@ -6,7 +6,7 @@ import { PopoverPanel, Transition, } from "@headlessui/react"; -import React, { Fragment, useEffect, useState } from "react"; +import React, { Fragment, useEffect, useMemo, useState } from "react"; import { api } from "@/server/trpc/react"; @@ -20,11 +20,6 @@ import { type Session } from "next-auth"; import { signIn } from "next-auth/react"; import { ReportModal } from "../ReportModal/ReportModal"; -interface CopyToClipboardOption { - label: string; - href: string; -} - interface Props { session: Session | null; postId: string; @@ -41,25 +36,23 @@ const ArticleMenu = ({ postUrl, }: Props) => { const [copied, setCopied] = useState(false); - const [copyToClipboard, setCopyToClipboard] = useState( - { - label: "", - href: "", - }, + + // Compute label from copied state (no side effect needed) + const label = useMemo( + () => (copied ? "Copied!" : "Copy to clipboard"), + [copied], ); - const { label, href } = copyToClipboard; + // Get href on client side only + const href = typeof window !== "undefined" ? window.location.href : ""; const { data, refetch } = api.post.sidebarData.useQuery({ id: postId, }); useEffect(() => { - setCopyToClipboard({ - label: copied ? "Copied!" : "Copy to clipboard", - href: location.href, - }); - const to = setTimeout(setCopied, 1000, false); + if (!copied) return; + const to = setTimeout(() => setCopied(false), 1000); return () => clearTimeout(to); }, [copied]); @@ -77,7 +70,7 @@ const ArticleMenu = ({ }); const likePost = async (postId: string, setLiked = true) => { - if (likeStatus === "loading") return; + if (likeStatus === "pending") return; try { await like({ postId, setLiked }); } catch (err) { @@ -87,7 +80,7 @@ const ArticleMenu = ({ }; const bookmarkPost = async (postId: string, setBookmarked = true) => { - if (bookmarkStatus === "loading") return; + if (bookmarkStatus === "pending") return; try { await bookmark({ postId, setBookmarked }); } catch (err) { diff --git a/components/ArticlePreview/ArticlePreview.tsx b/components/ArticlePreview/ArticlePreview.tsx index 3b545377..2ac0108e 100644 --- a/components/ArticlePreview/ArticlePreview.tsx +++ b/components/ArticlePreview/ArticlePreview.tsx @@ -39,7 +39,7 @@ type Props = { menuOptions?: Array; showBookmark?: boolean; bookmarkedInitialState?: boolean; - likes: number; + likes?: number; }; const ArticlePreview: NextPage = ({ @@ -86,7 +86,7 @@ const ArticlePreview: NextPage = ({ }); const bookmarkPost = async (postId: string, setBookmarked = true) => { - if (bookmarkStatus === "loading") return; + if (bookmarkStatus === "pending") return; try { if (!session) { signIn(); diff --git a/components/Comments/CommentsArea.tsx b/components/Comments/CommentsArea.tsx index 6e9e621e..24db1d4c 100644 --- a/components/Comments/CommentsArea.tsx +++ b/components/Comments/CommentsArea.tsx @@ -86,7 +86,7 @@ const CommentsArea = ({ postId, postOwnerId }: Props) => { const likeComment = async (commentId: number) => { if (!session) return signIn(); - if (likeStatus === "loading") return; + if (likeStatus === "pending") return; try { await like({ commentId }); } catch (err) { @@ -357,7 +357,7 @@ const CommentsArea = ({ postId, postOwnerId }: Props) => { resetField("reply"); setShowCommentBoxId(null); }} - loading={createCommentStatus === "loading"} + loading={createCommentStatus === "pending"} />

)} @@ -370,7 +370,7 @@ const CommentsArea = ({ postId, postOwnerId }: Props) => { name="edit" id={id} editMode - loading={editStatus === "loading"} + loading={editStatus === "pending"} onCancel={() => setEditCommentBoxId(null)} /> )} @@ -449,14 +449,14 @@ const CommentsArea = ({ postId, postOwnerId }: Props) => { )}