Loading your work…
; const stats = [ { label: 'Active projects', value: data?.statistics.projects ?? 0, icon: FolderKanban }, diff --git a/apps/web/app/(dashboard)/projects/page.tsx b/apps/web/app/(dashboard)/projects/page.tsx index aa7b422..11a7c58 100644 --- a/apps/web/app/(dashboard)/projects/page.tsx +++ b/apps/web/app/(dashboard)/projects/page.tsx @@ -67,10 +67,9 @@ export default function ProjectsPage() {+ {project.description || 'No description yet.'} +
))} diff --git a/apps/web/package.json b/apps/web/package.json index 7d5cd2f..fe84b11 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -6,7 +6,7 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts,.tsx --max-warnings=0", + "lint": "npx cross-env ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts,.tsx --max-warnings=0", "typecheck": "tsc --noEmit" }, "dependencies": { diff --git a/assignment.md b/assignment.md index 0087fa2..35b195f 100644 --- a/assignment.md +++ b/assignment.md @@ -27,14 +27,14 @@ You are expected to use Git throughout the assignment. Commit your work incremen Demonstrate sound engineering judgment across: -* Debugging and problem isolation -* Problem solving and trade-off decisions -* Safe and effective AI-assisted development -* Code quality and test design -* Application security -* Performance and data access -* Deployment and operational readiness -* Clear technical documentation +- Debugging and problem isolation +- Problem solving and trade-off decisions +- Safe and effective AI-assisted development +- Code quality and test design +- Application security +- Performance and data access +- Deployment and operational readiness +- Clear technical documentation --- @@ -57,12 +57,12 @@ You may use any AI-assisted development tools (for example, Cursor, GitHub Copil ## Constraints -* Do not replace the application with a different stack or rewrite major subsystems without evidence that it is necessary. -* Do not remove features to hide a defect. -* Do not weaken authentication, authorization, validation, logging, or security controls to make tests pass. -* Do not modify the assessment instructions or reviewer materials. -* Do not search for or rely on hidden solution material. -* Keep commits small and explain the intent of each change. +- Do not replace the application with a different stack or rewrite major subsystems without evidence that it is necessary. +- Do not remove features to hide a defect. +- Do not weaken authentication, authorization, validation, logging, or security controls to make tests pass. +- Do not modify the assessment instructions or reviewer materials. +- Do not search for or rely on hidden solution material. +- Keep commits small and explain the intent of each change. --- @@ -84,9 +84,9 @@ git bundle create bugforge.bundle --all Submit: -* `bugforge.bundle` -* `candidate-checklist.md` -* `ai-usage-report-template.md` +- `bugforge.bundle` +- `candidate-checklist.md` +- `ai-usage-report-template.md` ### Option 2: Project Archive @@ -107,8 +107,8 @@ bugforge.zip Also include: -* `candidate-checklist.md` -* `ai-usage-report-template.md` +- `candidate-checklist.md` +- `ai-usage-report-template.md` --- @@ -118,10 +118,10 @@ Your submission **must** preserve your complete Git history. The following submissions **will not be evaluated**: -* Solutions submitted through a **public GitHub repository**. -* Archives that **do not contain the `.git` directory**. -* Git bundles that cannot be cloned successfully. -* Submissions with no meaningful commit history or only a single final commit. +- Solutions submitted through a **public GitHub repository**. +- Archives that **do not contain the `.git` directory**. +- Git bundles that cannot be cloned successfully. +- Submissions with no meaningful commit history or only a single final commit. Your commit history is part of the assessment and will be reviewed to understand your engineering process. @@ -131,11 +131,11 @@ Your commit history is part of the assessment and will be reviewed to understand Submit: -* Source code with complete Git history -* Source changes and tests -* `candidate-checklist.md` -* Completed `ai-usage-report-template.md` (or an explicit statement that no AI was used) -* Commands and outcomes used to verify the work +- Source code with complete Git history +- Source changes and tests +- `candidate-checklist.md` +- Completed `ai-usage-report-template.md` (or an explicit statement that no AI was used) +- Commands and outcomes used to verify the work Your report should include: @@ -161,16 +161,16 @@ This assessment is intended to evaluate your individual engineering process. You may: -* Use AI-assisted development tools (such as Cursor, GitHub Copilot, ChatGPT, Claude, Gemini, etc.). -* Read official documentation, framework references, and public learning resources. -* Discuss general programming concepts with others. +- Use AI-assisted development tools (such as Cursor, GitHub Copilot, ChatGPT, Claude, Gemini, etc.). +- Read official documentation, framework references, and public learning resources. +- Discuss general programming concepts with others. You must not: -* Share your solution, commits, or repository with another candidate. -* Copy code or reports from another candidate. -* Submit work that you cannot personally explain and justify. -* Access or distribute hidden assessment materials or reviewer documentation. +- Share your solution, commits, or repository with another candidate. +- Copy code or reports from another candidate. +- Submit work that you cannot personally explain and justify. +- Access or distribute hidden assessment materials or reviewer documentation. Every submission may be reviewed for similarities in implementation, commit history, AI usage patterns, documentation, and engineering decisions. During follow-up discussions, you should be prepared to explain the reasoning behind any part of your submission. diff --git a/audit-report.md b/audit-report.md new file mode 100644 index 0000000..339d913 --- /dev/null +++ b/audit-report.md @@ -0,0 +1,46 @@ +# BugForge Audit Report + +## 1. Executive Summary + +The BugForge application underwent a comprehensive 11-phase audit to assess its production readiness. The architecture consists of a Next.js frontend, an Express.js backend with MongoDB, and containerization via Docker. +During the audit, we identified and resolved critical security flaws (Mass Assignment, XSS), severe performance bottlenecks (N+1 queries, infinite render loops, missing indexes), and multiple logic issues. The application is now significantly more secure, performant, and reliable. Integration tests were added to ensure core flows do not regress. + +## 2. Issue Table + +| Issue | Severity | Impact | Root Cause | Fix | Verification | +| ----------------------------------- | -------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------- | +| **Mass Assignment in `updateTask`** | Critical | Attackers could modify `project`, `createdBy`, or any internal MongoDB fields on a task. | Controller used `req.body` directly in `findByIdAndUpdate` instead of validating via Zod. | Enforced `taskSchema.partial().parse(req.body)`. | Verified code statically to ensure Zod validation is applied before update. | +| **XSS in Project Description** | High | Malicious scripts could be injected into the project description and executed on victims' browsers. | `dangerouslySetInnerHTML` was used in `projects/page.tsx` without sanitization. | Replaced innerHTML injection with React's native safe text rendering. | Inspected `projects/page.tsx` rendering logic statically. | +| **Infinite Render Loop** | High | The dashboard page crashed the user's browser tab. | `useEffect` continuously updated a `renderVersion` state which triggered re-renders. | Removed the unnecessary `renderVersion` state and its `useEffect`. | Built the frontend successfully and reviewed the component lifecycle. | +| **Project Update Authorization** | Medium | Non-owners received a 404 Not Found instead of a 403 Forbidden when trying to update/delete projects. | Controller relied on `owner: req.user!.id` in the query returning null, triggering a 404. | Added explicit ownership checks (`ProjectModel.exists`) returning `403`. | Statically verified the access control flow in `project-controller.ts`. | + +## 3. Performance Improvements + +- **Resolved N+1 Query in Dashboard**: The dashboard previously executed a separate `TaskModel.countDocuments` query for every active project in a `Promise.all` loop. This was refactored into a single aggregate `$in` query, reducing database calls from `O(N)` to `O(1)`. +- **Added Assignee Index**: Added an index on `{ assignee: 1, status: 1, dueDate: 1 }` to `taskSchema` to optimize the cross-project dashboard query that lists assigned tasks. Without this, MongoDB performed a full collection scan. +- **Removed Duplicate DB Queries**: Removed a redundant `availableProject` database check inside the task controller, as the route's `requireProjectAccess` middleware already validates project existence and access. + +## 4. Security Improvements + +- Patched the **Mass Assignment** vulnerability, ensuring attackers cannot elevate privileges or modify critical object relationships. +- Eliminated **Cross-Site Scripting (XSS)** on the frontend by removing raw HTML injection. +- Re-aligned authorization responses (`403 Forbidden`) to prevent enumeration / misleading `404` errors for valid resources. +- Upgraded the JWT secrets in the test environment to meet the minimum 32-character requirement enforced by the Zod schema. + +## 5. Testing Performed + +- **Integration Tests**: Added `tests/auth.test.ts` utilizing `supertest` and `mongodb-memory-server` to mock the database. +- **Auth Flow Validation**: Wrote tests covering `register`, `login`, duplicate registration prevention (409), and incorrect password rejection (401). +- **Static Analysis**: Enforced TypeScript compilation (`pnpm typecheck`) and ESLint (`pnpm lint`) with strict max-warnings limits across both workspaces. + +## 6. Remaining Risks + +- **Rate Limiting**: The API lacks rate limiting for authentication endpoints, leaving it susceptible to brute-force attacks. +- **Pagination**: The `/dashboard` and `/projects/:id/tasks` endpoints lack pagination, which could lead to large payloads and high memory usage as the database grows. +- **Secret Management**: JWT secrets are stored in `.env`. A robust secret management solution (e.g., AWS Secrets Manager, HashiCorp Vault) should be implemented for production. + +## 7. Future Improvements + +- **Dedicated Task Endpoint**: Create a dedicated `/tasks` endpoint for cross-project queries to decouple the task list from the dashboard's heavy aggregation logic. +- **Refresh Token Rotation**: Implement refresh token rotation to mitigate token theft. +- **Frontend Testing**: Introduce React Testing Library or Cypress to test the frontend components and user flows. diff --git a/candidate-checklist.md b/candidate-checklist.md index d74ee71..3735ab4 100644 --- a/candidate-checklist.md +++ b/candidate-checklist.md @@ -2,13 +2,13 @@ ## Before submitting -* [ ] I can explain how I investigated and verified every issue I claim to have fixed. -* [ ] I kept my changes focused and avoided unnecessary rewrites. -* [ ] I considered the impact of my changes on existing functionality. -* [ ] I verified that the application behaves correctly after my changes. -* [ ] I added or updated automated tests where they meaningfully improve confidence. -* [ ] I ran the project's linting, type checking, tests, and production build (where applicable). -* [ ] I documented my investigation, decisions, verification steps, and any remaining risks in `candidate-report.md`. -* [ ] I completed `ai-usage-report-template.md` accurately. -* [ ] I understand and can explain every change included in my submission. -* [ ] My branch contains only intentional, relevant changes. +- [ ] I can explain how I investigated and verified every issue I claim to have fixed. +- [ ] I kept my changes focused and avoided unnecessary rewrites. +- [ ] I considered the impact of my changes on existing functionality. +- [ ] I verified that the application behaves correctly after my changes. +- [ ] I added or updated automated tests where they meaningfully improve confidence. +- [ ] I ran the project's linting, type checking, tests, and production build (where applicable). +- [ ] I documented my investigation, decisions, verification steps, and any remaining risks in `candidate-report.md`. +- [ ] I completed `ai-usage-report-template.md` accurately. +- [ ] I understand and can explain every change included in my submission. +- [ ] My branch contains only intentional, relevant changes. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2f31d6..f729a1f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,6 +71,9 @@ importers: '@types/jsonwebtoken': specifier: ^9.0.7 version: 9.0.10 + '@types/supertest': + specifier: ^7.2.0 + version: 7.2.0 '@types/swagger-jsdoc': specifier: ^6.0.4 version: 6.0.4 @@ -86,6 +89,12 @@ importers: eslint: specifier: ^9.17.0 version: 9.39.4(jiti@1.21.7) + mongodb-memory-server: + specifier: ^11.2.0 + version: 11.2.0 + supertest: + specifier: ^7.2.2 + version: 7.2.2 tsx: specifier: ^4.19.2 version: 4.23.0 @@ -1066,6 +1075,13 @@ packages: cpu: [x64] os: [win32] + '@noble/hashes@1.8.0': + resolution: + { + integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==, + } + engines: { node: ^14.21.3 || >=16 } + '@nodelib/fs.scandir@2.1.5': resolution: { @@ -1094,6 +1110,12 @@ packages: } engines: { node: '>=12.4.0' } + '@paralleldrive/cuid2@2.3.1': + resolution: + { + integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==, + } + '@pinojs/redact@0.4.0': resolution: { @@ -1392,6 +1414,12 @@ packages: integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==, } + '@types/cookiejar@2.1.5': + resolution: + { + integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==, + } + '@types/cors@2.8.19': resolution: { @@ -1440,6 +1468,12 @@ packages: integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==, } + '@types/methods@1.1.4': + resolution: + { + integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==, + } + '@types/ms@2.1.0': resolution: { @@ -1490,6 +1524,18 @@ packages: integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==, } + '@types/superagent@8.1.10': + resolution: + { + integrity: sha512-nbt4IWXABhW0jGmmpRzCFNlbmwCTzZ2gTUsNIr+X+ItdqPms+PAJZbWsNzpS2USqXjcoNLQcO6nXo60zcPQiIg==, + } + + '@types/supertest@7.2.0': + resolution: + { + integrity: sha512-uh2Lv57xvggst6lCqNdFAmDSvoMG7M/HDtX4iUCquxQ5EGPtaPM5PL5Hmi7LCvOG8db7YaCPNJEeoI8s/WzIQw==, + } + '@types/swagger-jsdoc@6.0.4': resolution: { @@ -1514,6 +1560,12 @@ packages: integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==, } + '@types/whatwg-url@13.0.0': + resolution: + { + integrity: sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==, + } + '@typescript-eslint/eslint-plugin@8.63.0': resolution: { @@ -1865,6 +1917,13 @@ packages: } engines: { node: '>= 6.0.0' } + agent-base@7.1.4: + resolution: + { + integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==, + } + engines: { node: '>= 14' } + ajv-draft-04@1.0.0: resolution: { @@ -2031,6 +2090,12 @@ packages: } engines: { node: '>= 0.4' } + asap@2.0.6: + resolution: + { + integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==, + } + assertion-error@2.0.1: resolution: { @@ -2051,6 +2116,18 @@ packages: } engines: { node: '>= 0.4' } + async-mutex@0.5.0: + resolution: + { + integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==, + } + + asynckit@0.4.0: + resolution: + { + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, + } + atomic-sleep@1.0.0: resolution: { @@ -2089,6 +2166,17 @@ packages: } engines: { node: '>= 0.4' } + b4a@1.8.1: + resolution: + { + integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==, + } + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + balanced-match@1.0.2: resolution: { @@ -2102,6 +2190,58 @@ packages: } engines: { node: 18 || 20 || >=22 } + bare-events@2.9.1: + resolution: + { + integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==, + } + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.7.4: + resolution: + { + integrity: sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==, + } + engines: { bare: '>=1.16.0' } + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-path@3.1.1: + resolution: + { + integrity: sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==, + } + + bare-stream@2.13.3: + resolution: + { + integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==, + } + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.5: + resolution: + { + integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==, + } + baseline-browser-mapping@2.10.42: resolution: { @@ -2166,6 +2306,13 @@ packages: } engines: { node: '>=16.20.1' } + bson@7.3.1: + resolution: + { + integrity: sha512-h/C0qe6857pQhcSJHLfsR1uYGj98Ge3wKAD3Ed9KqH3wcVh+BM4Jq4xISD7vs9OPuT07n+q3QQVjslJ286j6ag==, + } + engines: { node: '>=20.19.0' } + buffer-equal-constant-time@1.0.1: resolution: { @@ -2234,6 +2381,13 @@ packages: } engines: { node: '>= 6' } + camelcase@6.3.0: + resolution: + { + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, + } + engines: { node: '>=10' } + caniuse-lite@1.0.30001803: resolution: { @@ -2354,6 +2508,13 @@ packages: integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, } + combined-stream@1.0.8: + resolution: + { + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, + } + engines: { node: '>= 0.8' } + commander@13.1.0: resolution: { @@ -2375,6 +2536,18 @@ packages: } engines: { node: '>= 6' } + commondir@1.0.1: + resolution: + { + integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, + } + + component-emitter@1.3.1: + resolution: + { + integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==, + } + concat-map@0.0.1: resolution: { @@ -2407,6 +2580,13 @@ packages: integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==, } + cookie-signature@1.2.2: + resolution: + { + integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==, + } + engines: { node: '>=6.6.0' } + cookie@0.7.2: resolution: { @@ -2414,6 +2594,12 @@ packages: } engines: { node: '>= 0.6' } + cookiejar@2.1.4: + resolution: + { + integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==, + } + cors@2.8.6: resolution: { @@ -2530,6 +2716,13 @@ packages: } engines: { node: '>= 0.4' } + delayed-stream@1.0.0: + resolution: + { + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, + } + engines: { node: '>=0.4.0' } + delegates@1.0.0: resolution: { @@ -2557,6 +2750,12 @@ packages: } engines: { node: '>=8' } + dezalgo@1.0.4: + resolution: + { + integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==, + } + didyoumean@1.2.2: resolution: { @@ -2945,6 +3144,12 @@ packages: integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==, } + events-universal@1.0.1: + resolution: + { + integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==, + } + execa@8.0.1: resolution: { @@ -2972,6 +3177,12 @@ packages: integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, } + fast-fifo@1.3.2: + resolution: + { + integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, + } + fast-glob@3.3.1: resolution: { @@ -2998,6 +3209,12 @@ packages: integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, } + fast-safe-stringify@2.1.1: + resolution: + { + integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==, + } + fast-uri@3.1.3: resolution: { @@ -3043,6 +3260,20 @@ packages: } engines: { node: '>= 0.8' } + find-cache-dir@3.3.2: + resolution: + { + integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, + } + engines: { node: '>=8' } + + find-up@4.1.0: + resolution: + { + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, + } + engines: { node: '>=8' } + find-up@5.0.0: resolution: { @@ -3063,6 +3294,18 @@ packages: integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, } + follow-redirects@1.16.0: + resolution: + { + integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==, + } + engines: { node: '>=4.0' } + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.5: resolution: { @@ -3077,6 +3320,20 @@ packages: } engines: { node: '>=14' } + form-data@4.0.6: + resolution: + { + integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==, + } + engines: { node: '>= 6' } + + formidable@3.5.4: + resolution: + { + integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==, + } + engines: { node: '>=14.0.0' } + forwarded@0.2.0: resolution: { @@ -3319,6 +3576,13 @@ packages: } engines: { node: '>= 6' } + https-proxy-agent@7.0.6: + resolution: + { + integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==, + } + engines: { node: '>= 14' } + human-signals@5.0.0: resolution: { @@ -3789,6 +4053,13 @@ packages: } engines: { node: '>=18.0.0' } + locate-path@5.0.0: + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + } + engines: { node: '>=8' } + locate-path@6.0.0: resolution: { @@ -3973,6 +4244,14 @@ packages: engines: { node: '>=4' } hasBin: true + mime@2.6.0: + resolution: + { + integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==, + } + engines: { node: '>=4.0.0' } + hasBin: true + mimic-fn@4.0.0: resolution: { @@ -4048,6 +4327,27 @@ packages: integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==, } + mongodb-connection-string-url@7.0.1: + resolution: + { + integrity: sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==, + } + engines: { node: '>=20.19.0' } + + mongodb-memory-server-core@11.2.0: + resolution: + { + integrity: sha512-vOoDtn0JiLrHvZY81Rp/UtKXXK0rtJHZGZFVnccvJwYitPLNspO0Ty0grqFQOe7iAET8+GI4zAQcphg+R3vxQg==, + } + engines: { node: '>=20.19.0' } + + mongodb-memory-server@11.2.0: + resolution: + { + integrity: sha512-506AD8qvClVx8Raw/WhAUUWBgIXPyi856iC01aa5vAzHmn6WOXC6ulvudkTF7oTMzJxkyA0A84VpD4BpyfqJ9w==, + } + engines: { node: '>=20.19.0' } + mongodb@6.20.0: resolution: { @@ -4078,6 +4378,36 @@ packages: socks: optional: true + mongodb@7.5.0: + resolution: + { + integrity: sha512-5FnrEDLnvp6ycUOGLNLLU33BfCx2qmp2mJjGPDwKLruYsVzXVSK5fsGpoDXvsXJwBfBsD7ebMRdawbDxC2814g==, + } + engines: { node: '>=20.19.0' } + peerDependencies: + '@aws-sdk/credential-providers': ^3.806.0 + '@mongodb-js/zstd': ^7.0.0 + gcp-metadata: ^7.0.1 + kerberos: ^7.0.0 + mongodb-client-encryption: ^7.2.0 + snappy: ^7.3.2 + socks: ^2.8.6 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + mongoose@8.24.1: resolution: { @@ -4146,6 +4476,13 @@ packages: } engines: { node: '>= 0.6' } + new-find-package-json@2.0.0: + resolution: + { + integrity: sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==, + } + engines: { node: '>=12.22.0' } + next-themes@0.4.6: resolution: { @@ -4358,6 +4695,13 @@ packages: } engines: { node: '>= 0.4' } + p-limit@2.3.0: + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + } + engines: { node: '>=6' } + p-limit@3.1.0: resolution: { @@ -4365,6 +4709,13 @@ packages: } engines: { node: '>=10' } + p-locate@4.1.0: + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + } + engines: { node: '>=8' } + p-locate@5.0.0: resolution: { @@ -4372,6 +4723,13 @@ packages: } engines: { node: '>=10' } + p-try@2.2.0: + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + } + engines: { node: '>=6' } + package-json-from-dist@1.0.1: resolution: { @@ -4452,6 +4810,12 @@ packages: } engines: { node: '>= 14.16' } + pend@1.2.0: + resolution: + { + integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, + } + picocolors@1.1.1: resolution: { @@ -4519,6 +4883,13 @@ packages: } engines: { node: '>= 6' } + pkg-dir@4.2.0: + resolution: + { + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, + } + engines: { node: '>=8' } + possible-typed-array-names@1.1.0: resolution: { @@ -5091,6 +5462,12 @@ packages: } engines: { node: '>=10.0.0' } + streamx@2.28.0: + resolution: + { + integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==, + } + string-argv@0.3.2: resolution: { @@ -5218,6 +5595,20 @@ packages: engines: { node: '>=16 || 14 >=14.17' } hasBin: true + superagent@10.3.0: + resolution: + { + integrity: sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==, + } + engines: { node: '>=14.18.0' } + + supertest@7.2.2: + resolution: + { + integrity: sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==, + } + engines: { node: '>=14.18.0' } + supports-color@7.2.0: resolution: { @@ -5269,6 +5660,12 @@ packages: engines: { node: '>=14.0.0' } hasBin: true + tar-stream@3.2.0: + resolution: + { + integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==, + } + tar@6.2.1: resolution: { @@ -5277,6 +5674,18 @@ packages: engines: { node: '>=10' } deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + teex@1.0.1: + resolution: + { + integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==, + } + + text-decoder@1.2.7: + resolution: + { + integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==, + } + thenify-all@1.6.0: resolution: { @@ -5696,6 +6105,13 @@ packages: engines: { node: '>= 14.6' } hasBin: true + yauzl@3.4.0: + resolution: + { + integrity: sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==, + } + engines: { node: '>=12' } + yocto-queue@0.1.0: resolution: { @@ -6112,6 +6528,8 @@ snapshots: '@next/swc-win32-x64-msvc@15.1.1': optional: true + '@noble/hashes@1.8.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6126,6 +6544,10 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@paralleldrive/cuid2@2.3.1': + dependencies: + '@noble/hashes': 1.8.0 + '@pinojs/redact@0.4.0': {} '@radix-ui/react-compose-refs@1.1.3(@types/react@19.2.17)(react@19.0.0)': @@ -6253,6 +6675,8 @@ snapshots: dependencies: '@types/node': 22.20.1 + '@types/cookiejar@2.1.5': {} + '@types/cors@2.8.19': dependencies: '@types/node': 22.20.1 @@ -6283,6 +6707,8 @@ snapshots: '@types/ms': 2.1.0 '@types/node': 22.20.1 + '@types/methods@1.1.4': {} + '@types/ms@2.1.0': {} '@types/node@22.20.1': @@ -6310,6 +6736,18 @@ snapshots: '@types/http-errors': 2.0.5 '@types/node': 22.20.1 + '@types/superagent@8.1.10': + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 22.20.1 + form-data: 4.0.6 + + '@types/supertest@7.2.0': + dependencies: + '@types/methods': 1.1.4 + '@types/superagent': 8.1.10 + '@types/swagger-jsdoc@6.0.4': {} '@types/swagger-ui-express@4.1.8': @@ -6323,6 +6761,10 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 + '@types/whatwg-url@13.0.0': + dependencies: + '@types/webidl-conversions': 7.0.3 + '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -6543,6 +6985,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.4: {} + ajv-draft-04@1.0.0(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 @@ -6664,12 +7108,20 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + asap@2.0.6: {} + assertion-error@2.0.1: {} ast-types-flow@0.0.8: {} async-function@1.0.0: {} + async-mutex@0.5.0: + dependencies: + tslib: 2.8.1 + + asynckit@0.4.0: {} + atomic-sleep@1.0.0: {} autoprefixer@10.5.2(postcss@8.5.16): @@ -6689,10 +7141,41 @@ snapshots: axobject-query@4.1.0: {} + b4a@1.8.1: {} + balanced-match@1.0.2: {} balanced-match@4.0.4: {} + bare-events@2.9.1: {} + + bare-fs@4.7.4: + dependencies: + bare-events: 2.9.1 + bare-path: 3.1.1 + bare-stream: 2.13.3(bare-events@2.9.1) + bare-url: 2.4.5 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-path@3.1.1: {} + + bare-stream@2.13.3(bare-events@2.9.1): + dependencies: + b4a: 1.8.1 + streamx: 2.28.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.4.5: + dependencies: + bare-path: 3.1.1 + baseline-browser-mapping@2.10.42: {} bcrypt@5.1.1: @@ -6745,6 +7228,8 @@ snapshots: bson@6.10.4: {} + bson@7.3.1: {} + buffer-equal-constant-time@1.0.1: {} busboy@1.6.0: @@ -6778,6 +7263,8 @@ snapshots: camelcase-css@2.0.1: {} + camelcase@6.3.0: {} + caniuse-lite@1.0.30001803: {} chai@5.3.3: @@ -6850,12 +7337,20 @@ snapshots: colorette@2.0.20: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commander@13.1.0: {} commander@4.1.1: {} commander@6.2.0: {} + commondir@1.0.1: {} + + component-emitter@1.3.1: {} + concat-map@0.0.1: {} console-control-strings@1.1.0: {} @@ -6868,8 +7363,12 @@ snapshots: cookie-signature@1.0.7: {} + cookie-signature@1.2.2: {} + cookie@0.7.2: {} + cookiejar@2.1.4: {} + cors@2.8.6: dependencies: object-assign: 4.1.1 @@ -6933,6 +7432,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delayed-stream@1.0.0: {} + delegates@1.0.0: {} depd@2.0.0: {} @@ -6941,6 +7442,11 @@ snapshots: detect-libc@2.1.2: {} + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + didyoumean@1.2.2: {} dlv@1.1.3: {} @@ -7161,7 +7667,7 @@ snapshots: '@typescript-eslint/parser': 8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4(jiti@1.21.7)) eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@1.21.7)) @@ -7181,7 +7687,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 @@ -7196,14 +7702,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7)): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) transitivePeerDependencies: - supports-color @@ -7218,7 +7724,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.4(jiti@1.21.7) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7)))(eslint@9.39.4(jiti@1.21.7)) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.63.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -7359,6 +7865,12 @@ snapshots: eventemitter3@5.0.4: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - bare-abort-controller + execa@8.0.1: dependencies: cross-spawn: 7.0.6 @@ -7411,6 +7923,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7431,6 +7945,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-safe-stringify@2.1.1: {} + fast-uri@3.1.3: {} fastq@1.20.1: @@ -7461,6 +7977,17 @@ snapshots: transitivePeerDependencies: - supports-color + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -7473,6 +8000,10 @@ snapshots: flatted@3.4.2: {} + follow-redirects@1.16.0(debug@4.4.3): + optionalDependencies: + debug: 4.4.3 + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -7482,6 +8013,20 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + + formidable@3.5.4: + dependencies: + '@paralleldrive/cuid2': 2.3.1 + dezalgo: 1.0.4 + once: 1.4.0 + forwarded@0.2.0: {} fraction.js@5.3.4: {} @@ -7635,6 +8180,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + human-signals@5.0.0: {} husky@9.1.7: {} @@ -7915,6 +8467,10 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.2 + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -7992,6 +8548,8 @@ snapshots: mime@1.6.0: {} + mime@2.6.0: {} + mimic-fn@4.0.0: {} mimic-function@5.0.1: {} @@ -8026,12 +8584,67 @@ snapshots: '@types/whatwg-url': 11.0.5 whatwg-url: 14.2.0 + mongodb-connection-string-url@7.0.1: + dependencies: + '@types/whatwg-url': 13.0.0 + whatwg-url: 14.2.0 + + mongodb-memory-server-core@11.2.0: + dependencies: + async-mutex: 0.5.0 + camelcase: 6.3.0 + debug: 4.4.3 + find-cache-dir: 3.3.2 + follow-redirects: 1.16.0(debug@4.4.3) + https-proxy-agent: 7.0.6 + mongodb: 7.5.0 + new-find-package-json: 2.0.0 + semver: 7.8.5 + tar-stream: 3.2.0 + tslib: 2.8.1 + yauzl: 3.4.0 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - bare-abort-controller + - bare-buffer + - gcp-metadata + - kerberos + - mongodb-client-encryption + - react-native-b4a + - snappy + - socks + - supports-color + + mongodb-memory-server@11.2.0: + dependencies: + mongodb-memory-server-core: 11.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - bare-abort-controller + - bare-buffer + - gcp-metadata + - kerberos + - mongodb-client-encryption + - react-native-b4a + - snappy + - socks + - supports-color + mongodb@6.20.0: dependencies: '@mongodb-js/saslprep': 1.4.12 bson: 6.10.4 mongodb-connection-string-url: 3.0.2 + mongodb@7.5.0: + dependencies: + '@mongodb-js/saslprep': 1.4.12 + bson: 7.3.1 + mongodb-connection-string-url: 7.0.1 + mongoose@8.24.1: dependencies: bson: 6.10.4 @@ -8077,6 +8690,12 @@ snapshots: negotiator@0.6.3: {} + new-find-package-json@2.0.0: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + next-themes@0.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 @@ -8218,14 +8837,24 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 + p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} parent-module@1.0.1: @@ -8255,6 +8884,8 @@ snapshots: pathval@2.0.1: {} + pend@1.2.0: {} + picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -8294,6 +8925,10 @@ snapshots: pirates@4.0.7: {} + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + possible-typed-array-names@1.1.0: {} postcss-import@15.1.0(postcss@8.5.16): @@ -8692,6 +9327,15 @@ snapshots: streamsearch@1.1.0: {} + streamx@2.28.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + string-argv@0.3.2: {} string-width@4.2.3: @@ -8790,6 +9434,28 @@ snapshots: tinyglobby: 0.2.17 ts-interface-checker: 0.1.13 + superagent@10.3.0: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.4.3 + fast-safe-stringify: 2.1.1 + form-data: 4.0.6 + formidable: 3.5.4 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.15.3 + transitivePeerDependencies: + - supports-color + + supertest@7.2.2: + dependencies: + cookie-signature: 1.2.2 + methods: 1.1.2 + superagent: 10.3.0 + transitivePeerDependencies: + - supports-color + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -8846,6 +9512,17 @@ snapshots: - tsx - yaml + tar-stream@3.2.0: + dependencies: + b4a: 1.8.1 + bare-fs: 4.7.4 + fast-fifo: 1.3.2 + streamx: 2.28.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -8855,6 +9532,19 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + teex@1.0.1: + dependencies: + streamx: 2.28.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + text-decoder@1.2.7: + dependencies: + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -9159,6 +9849,10 @@ snapshots: yaml@2.9.0: {} + yauzl@3.4.0: + dependencies: + pend: 1.2.0 + yocto-queue@0.1.0: {} zod@3.25.76: {}