From 59444e9c7ce4c9b2e403465e7bb8cd9cbfdcc95c Mon Sep 17 00:00:00 2001 From: stephen Date: Thu, 8 Jan 2026 16:41:31 +1100 Subject: [PATCH] Working Version-Where we are up to 8/1/2026 --- .env | 21 +- .env-bak | 6 + .env.local | 1 + .gitignore | 2 + docs/notes.md | 113 +- docs/notes.pdf | Bin 338886 -> 369397 bytes package-lock.json | 1343 ++++++++++++++++- package.json | 13 +- prisma.config.ts | 12 + .../migration.sql | 54 + .../migration.sql | 52 + prisma/migrations/migration_lock.toml | 3 + prisma/schema.prisma | 76 + src/app/dashboard/actions.ts | 25 + src/app/dashboard/dashboard-view.tsx | 75 + src/app/dashboard/page.tsx | 30 +- src/app/dashboard/sync-actions.ts | 52 + src/app/dashboard/upload-actions.ts | 68 + src/app/dashboard/upload.tsx | 65 + src/app/dashboard/upload/page.tsx | 69 + src/app/upload/_actions.ts | 112 ++ src/app/upload/page.tsx | 17 + src/app/upload/upload-view.tsx | 122 ++ src/auth.config.ts | 28 + src/auth.ts | 58 +- src/components/layout/Navbar.tsx | 150 +- src/lib/auth-utils.ts | 55 + src/lib/prisma.ts | 37 + src/proxy.ts | 2 +- 29 files changed, 2556 insertions(+), 105 deletions(-) create mode 100644 .env-bak create mode 100644 prisma.config.ts create mode 100644 prisma/migrations/20260107011428_setup_auth_and_files/migration.sql create mode 100644 prisma/migrations/20260107012848_add_auth_tables/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 prisma/schema.prisma create mode 100644 src/app/dashboard/actions.ts create mode 100644 src/app/dashboard/dashboard-view.tsx create mode 100644 src/app/dashboard/sync-actions.ts create mode 100644 src/app/dashboard/upload-actions.ts create mode 100644 src/app/dashboard/upload.tsx create mode 100644 src/app/dashboard/upload/page.tsx create mode 100644 src/app/upload/_actions.ts create mode 100644 src/app/upload/page.tsx create mode 100644 src/app/upload/upload-view.tsx create mode 100644 src/auth.config.ts create mode 100644 src/lib/auth-utils.ts create mode 100644 src/lib/prisma.ts diff --git a/.env b/.env index 245da9e..667e6ce 100644 --- a/.env +++ b/.env @@ -1,6 +1,17 @@ -DATABASE_URL="postgresql://stephen:Web2025$$@192.168.1.210:5432/webcalibre2" -# Credentials for your Microsoft App (NextAuth) -AZURE_AD_CLIENT_ID="549931a-f491-436b-b7bc-d37d8ca3c17e" -AZURE_AD_CLIENT_SECRET="6a242be1-c711-4cc3-a132-03c1f57993ed" -AZURE_AD_TENANT_ID="1c06ce7c-7884-4796-8652-d4c32d75a5d0" \ No newline at end of file +DATABASE_URL="postgresql://stephen:Web2025%24%24@192.168.1.210:5432/webcalibre2" +# values generated by Gemini +# Generated for security +AUTH_SECRET="7cz3Z4kUI2kB3mdAPo58iioUDLSRJ92X8+boEixvO8k=" + +# Use 'common' for multi-tenant (Work + Personal) support +AUTH_MICROSOFT_ENTRA_ID_TENANT_ID="common" + +# The Application (client) ID +AUTH_MICROSOFT_ENTRA_ID_ID="b549931a-f491-436b-b7bc-d37d8ca3c17e" + +# The Client Secret VALUE (ensure no leading '6' or spaces) +AUTH_MICROSOFT_ENTRA_ID_SECRET="O3p8Q~oMph-0kSLwkvzEJzJdx_iHGOjJjrr5Pa1A" + +# Required to tell Auth.js to trust your localhost/proxy URL +AUTH_TRUST_HOST=true \ No newline at end of file diff --git a/.env-bak b/.env-bak new file mode 100644 index 0000000..245da9e --- /dev/null +++ b/.env-bak @@ -0,0 +1,6 @@ +DATABASE_URL="postgresql://stephen:Web2025$$@192.168.1.210:5432/webcalibre2" + +# Credentials for your Microsoft App (NextAuth) +AZURE_AD_CLIENT_ID="549931a-f491-436b-b7bc-d37d8ca3c17e" +AZURE_AD_CLIENT_SECRET="6a242be1-c711-4cc3-a132-03c1f57993ed" +AZURE_AD_TENANT_ID="1c06ce7c-7884-4796-8652-d4c32d75a5d0" \ No newline at end of file diff --git a/.env.local b/.env.local index 2701d8d..667e6ce 100644 --- a/.env.local +++ b/.env.local @@ -1,4 +1,5 @@ +DATABASE_URL="postgresql://stephen:Web2025%24%24@192.168.1.210:5432/webcalibre2" # values generated by Gemini # Generated for security AUTH_SECRET="7cz3Z4kUI2kB3mdAPo58iioUDLSRJ92X8+boEixvO8k=" diff --git a/.gitignore b/.gitignore index 8c5b2ee..d4c8708 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,5 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +/src/generated/prisma diff --git a/docs/notes.md b/docs/notes.md index 38fd985..8409b5c 100644 --- a/docs/notes.md +++ b/docs/notes.md @@ -4,6 +4,7 @@ - [1.3. Overview of user consent and how to manage it in Microsoft Entra | Microsoft](#13-overview-of-user-consent-and-how-to-manage-it-in-microsoft-entra--microsoft) - [1.4. Add Tailwind CSS to an Existing Next js Project](#14-add-tailwind-css-to-an-existing-next-js-project) - [1.5. How to style Material UI component with Tailwindcss in React project](#15-how-to-style-material-ui-component-with-tailwindcss-in-react-project) + - [1.6. How to Use Prisma 7 in Next.js](#16-how-to-use-prisma-7-in-nextjs) - [2. Project Structure](#2-project-structure) - [3. App Registrations](#3-app-registrations) - [3.1. Permissions Needed](#31-permissions-needed) @@ -14,6 +15,15 @@ - [4.4. Test nextjs](#44-test-nextjs) - [4.5. Check Authentication](#45-check-authentication) - [4.6. Install NextAuth.js v5](#46-install-nextauthjs-v5) +- [5. .env files](#5-env-files) + - [5.1. .env.local](#51-envlocal) + - [5.2. .env](#52-env) +- [6. Prisma Install](#6-prisma-install) + - [6.1. The CLI is for development tasks like migrations](#61-the-cli-is-for-development-tasks-like-migrations) + - [6.2. Create the prisma folder](#62-create-the-prisma-folder) +- [7. Run this whenever you change your schema.prisma file](#7-run-this-whenever-you-change-your-schemaprisma-file) + - [7.1. Pro-Tip: Update your package.json](#71-pro-tip-update-your-packagejson) +- [8. Where we are up to 8/1/2026](#8-where-we-are-up-to-812026) # 1. Reference @@ -37,6 +47,11 @@ [How to style Material UI component with Tailwindcss in React project](https://www.youtube.com/watch?v=QQIfuMlA6TI) + +## 1.6. How to Use Prisma 7 in Next.js + +[How to Use Prisma 7 in Next.js](https://www.youtube.com/watch?v=Ndhx_rNkoUw) + # 2. Project Structure The following is the desire structure @@ -229,4 +244,100 @@ created .env.local ```text AUTH_SECRET="7cz3Z4kUI2kB3mdAPo58iioUDLSRJ92X8+boEixvO8k=" # Added by `npx auth`. Read more: https://cli.authjs.dev -``` \ No newline at end of file +``` + +# 5. .env files + +## 5.1. .env.local +```text +# values generated by Gemini +# Generated for security +AUTH_SECRET="7cz3Z4kUI2kB3mdAPo58iioUDLSRJ92X8+boEixvO8k=" + +# Use 'common' for multi-tenant (Work + Personal) support +AUTH_MICROSOFT_ENTRA_ID_TENANT_ID="common" + +# The Application (client) ID +AUTH_MICROSOFT_ENTRA_ID_ID="b549931a-f491-436b-b7bc-d37d8ca3c17e" + +# The Client Secret VALUE (ensure no leading '6' or spaces) +AUTH_MICROSOFT_ENTRA_ID_SECRET="O3p8Q~oMph-0kSLwkvzEJzJdx_iHGOjJjrr5Pa1A" + +# Required to tell Auth.js to trust your localhost/proxy URL +AUTH_TRUST_HOST=true +``` + +## 5.2. .env +``` +DATABASE_URL="postgresql://stephen:Web2025$$@192.168.1.210:5432/webcalibre2" + +# Credentials for your Microsoft App (NextAuth) +AZURE_AD_CLIENT_ID="549931a-f491-436b-b7bc-d37d8ca3c17e" +AZURE_AD_CLIENT_SECRET="6a242be1-c711-4cc3-a132-03c1f57993ed" +AZURE_AD_TENANT_ID="1c06ce7c-7884-4796-8652-d4c32d75a5d0" +``` + +# 6. Prisma Install + +To get Prisma fully installed and ready to talk to your PostgreSQL database, you need to install the CLI (for migrations) and the Client (for your code to query the database). + +Run these three commands in your terminal: + +1. Install the Prisma packages +Bash + +## 6.1. The CLI is for development tasks like migrations +npm install prisma --save-dev + +##The Client is used by your Next.js code to talk to the DB +```zsh +npm install @prisma/client +``` +2. Install the Dotenv helper +Since you are keeping your DATABASE_URL in .env.local (and your password has special characters), you need this to bridge the gap between Next.js and the Prisma CLI: + +```zsh + +npm install dotenv-cli --save-dev +``` +3. Initialize and Generate +Once the packages are installed, you need to initialize the Prisma folder (if you haven't already) and generate the types for your FileNode model: + +Bash + +## 6.2. Create the prisma folder +```zsh +npx prisma init +``` +# 7. Run this whenever you change your schema.prisma file +npx dotenv -e .env.local -- npx prisma generate +4. Apply your Schema to PostgreSQL +Finally, run this to actually create the tables in your webcalibre2 database: + + + +npx dotenv -e .env.local -- npx prisma migrate dev --name init_database + +## 7.1. Pro-Tip: Update your package.json +To avoid typing that long dotenv command every time, open your package.json and add this to the "scripts" section: + +JSON + +"scripts": { + "db:migrate": "dotenv -e .env.local -- prisma migrate dev", + "db:studio": "dotenv -e .env.local -- prisma studio" +} +Now, you can just run npm run db:migrate whenever you update your schema! + +# 8. Where we are up to 8/1/2026 + +We can authenticate with MS Azure, upload a file and store it on my personal OneDrive. +I can see a few problems, + +1. if the file gets stored with its original filename, if I store the same file again it tells that it fail, but in reality it did not fail the it got renamed with 1.pdf added this is not added data base. + +2. We may be better to create a folder and put the file in the folder, to me the logical name would id of the file, but that is automatically create and assigned when the data is stored as a UUID. + +3. We would have to create the UUID ourselves, so that we can create a folder with that specific UUID and store the file in the folder. + +4. The Upload file Page needs to be able to create folder as well select a parent , add a description of either the file \ No newline at end of file diff --git a/docs/notes.pdf b/docs/notes.pdf index fbb81ead9b1d571ffa19402e1f83f860b834a7f0..3b6ec2c3bbc6410d4132b680d4331429bc1d05ab 100644 GIT binary patch delta 102961 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
teN3! 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⁣8HWWYtXQ;kk;8rHmiM50TUc=SOWm*1OxaQI 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 Kmo3vX*8d+elV=V9 delta 82975 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

FKngpc2kg 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 diff --git a/package-lock.json b/package-lock.json index 41e6ecb..f7dadb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,23 +8,31 @@ "name": "124_webcalibre2", "version": "0.1.0", "dependencies": { + "@auth/prisma-adapter": "^2.11.1", "@emotion/cache": "^11.14.0", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", "@mui/icons-material": "^7.3.6", "@mui/material": "^7.3.6", "@mui/material-nextjs": "^7.3.6", + "@mui/x-data-grid": "^8.23.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "next": "16.1.1", "next-auth": "^5.0.0-beta.30", + "pg": "^8.16.3", "react": "19.2.3", "react-dom": "19.2.3" }, "devDependencies": { "@types/node": "^20", + "@types/pg": "^8.16.0", "@types/react": "^19", "@types/react-dom": "^19", + "dotenv-cli": "^11.0.0", "eslint": "^9", "eslint-config-next": "16.1.1", + "prisma": "^7.2.0", "typescript": "^5" } }, @@ -57,6 +65,47 @@ } } }, + "node_modules/@auth/prisma-adapter": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/@auth/prisma-adapter/-/prisma-adapter-2.11.1.tgz", + "integrity": "sha512-Ke7DXP0Fy0Mlmjz/ZJLXwQash2UkA4621xCM0rMtEczr1kppLc/njCbUkHkIQ/PnmILjqSPEKeTjDPsYruvkug==", + "license": "ISC", + "dependencies": { + "@auth/core": "0.41.1" + }, + "peerDependencies": { + "@prisma/client": ">=2.26.0 || >=3 || >=4 || >=5 || >=6" + } + }, + "node_modules/@auth/prisma-adapter/node_modules/@auth/core": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.41.1.tgz", + "integrity": "sha512-t9cJ2zNYAdWMacGRMT6+r4xr1uybIdmYa49calBPeTqwgAFPV/88ac9TEvCR85pvATiSPt8VaNf+Gt24JIT/uw==", + "license": "ISC", + "dependencies": { + "@panva/hkdf": "^1.2.1", + "jose": "^6.0.6", + "oauth4webapi": "^3.3.0", + "preact": "10.24.3", + "preact-render-to-string": "6.5.11" + }, + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "nodemailer": "^7.0.7" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -296,6 +345,73 @@ "node": ">=6.9.0" } }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.5.0.tgz", + "integrity": "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "10.5.0", + "@chevrotain/types": "10.5.0", + "lodash": "4.17.21" + } + }, + "node_modules/@chevrotain/gast": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-10.5.0.tgz", + "integrity": "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "10.5.0", + "lodash": "4.17.21" + } + }, + "node_modules/@chevrotain/types": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-10.5.0.tgz", + "integrity": "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-10.5.0.tgz", + "integrity": "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@electric-sql/pglite": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.2.tgz", + "integrity": "sha512-zfWWa+V2ViDCY/cmUfRqeWY1yLto+EpxjXnZzenB1TyxsTiXaTWeZFIZw6mac52BsuQm0RjCnisjBtdBaXOI6w==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@electric-sql/pglite-socket": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.0.6.tgz", + "integrity": "sha512-6RjmgzphIHIBA4NrMGJsjNWK4pu+bCWJlEWlwcxFTVY3WT86dFpKwbZaGWZV6C5Rd7sCk1Z0CI76QEfukLAUXw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "pglite-server": "dist/scripts/server.js" + }, + "peerDependencies": { + "@electric-sql/pglite": "0.3.2" + } + }, + "node_modules/@electric-sql/pglite-tools": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.2.7.tgz", + "integrity": "sha512-9dAccClqxx4cZB+Ar9B+FZ5WgxDc/Xvl9DPrTWv+dYTf0YNubLzi4wHHRGRGhrJv15XwnyKcGOZAP1VXSneSUg==", + "devOptional": true, + "license": "Apache-2.0", + "peerDependencies": { + "@electric-sql/pglite": "0.3.2" + } + }, "node_modules/@emnapi/core": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.0.tgz", @@ -625,6 +741,19 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@hono/node-server": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.6.tgz", + "integrity": "sha512-Shz/KjlIeAhfiuE93NDKVdZ7HdBVLQAfdbaXEaoAVO3ic9ibRSLGIQGkcBbFyuLr+7/1D5ZCINM8B+6IvXeMtw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1189,6 +1318,20 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mrleebo/prisma-ast": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@mrleebo/prisma-ast/-/prisma-ast-0.12.1.tgz", + "integrity": "sha512-JwqeCQ1U3fvccttHZq7Tk0m/TMC6WcFAQZdukypW3AzlJYKYTGNVd1ANU2GuhKnv4UQuOFj3oAl0LLG/gxFN1w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chevrotain": "^10.5.0", + "lilconfig": "^2.1.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@mui/core-downloads-tracker": { "version": "7.3.6", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.6.tgz", @@ -1469,6 +1612,88 @@ "integrity": "sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==", "license": "MIT" }, + "node_modules/@mui/x-data-grid": { + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-8.23.0.tgz", + "integrity": "sha512-fv8AiibTgwPKJsXtYdc5bYDDW3EQp/ieQ0iUejvZ2JbYikMIPTYjI4pHy7zW3F3RDsi6DGQnw5AW6LeoDcT0fA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "@mui/x-internals": "8.23.0", + "@mui/x-virtualizer": "0.3.0", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-internals": { + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.23.0.tgz", + "integrity": "sha512-FN7wdqwTxqq1tJBYVz8TA/HMcViuaHS0Jphr4pEjT/8Iuf94Yt3P82WbsTbXyYrgOQDQl07UqE7qWcJetRcHcg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@mui/x-virtualizer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mui/x-virtualizer/-/x-virtualizer-0.3.0.tgz", + "integrity": "sha512-ScQ3xullKQAtbIT9N7PVhgW9BDTo2Hu8fr/+N08TdRMJcq8bsVJB25mlcHk6zxjlgCuojqaeGfw71S1FOvyCXQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "@mui/x-internals": "8.23.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", @@ -1693,6 +1918,190 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@prisma/adapter-pg": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.2.0.tgz", + "integrity": "sha512-euIdQ13cRB2wZ3jPsnDnFhINquo1PYFPCg6yVL8b2rp3EdinQHsX9EDdCtRr489D5uhphcRk463OdQAFlsCr0w==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/driver-adapter-utils": "7.2.0", + "pg": "^8.16.3", + "postgres-array": "3.0.4" + } + }, + "node_modules/@prisma/client": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.2.0.tgz", + "integrity": "sha512-JdLF8lWZ+LjKGKpBqyAlenxd/kXjd1Abf/xK+6vUA7R7L2Suo6AFTHFRpPSdAKCan9wzdFApsUpSa/F6+t1AtA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/client-runtime-utils": "7.2.0" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24.0" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/client-runtime-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.2.0.tgz", + "integrity": "sha512-dn7oB53v0tqkB0wBdMuTNFNPdEbfICEUe82Tn9FoKAhJCUkDH+fmyEp0ClciGh+9Hp2Tuu2K52kth2MTLstvmA==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/config": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.2.0.tgz", + "integrity": "sha512-qmvSnfQ6l/srBW1S7RZGfjTQhc44Yl3ldvU6y3pgmuLM+83SBDs6UQVgMtQuMRe9J3gGqB0RF8wER6RlXEr6jQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" + } + }, + "node_modules/@prisma/debug": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.2.0.tgz", + "integrity": "sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/dev": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.17.0.tgz", + "integrity": "sha512-6sGebe5jxX+FEsQTpjHLzvOGPn6ypFQprcs3jcuIWv1Xp/5v6P/rjfdvAwTkP2iF6pDx2tCd8vGLNWcsWzImTA==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "@electric-sql/pglite": "0.3.2", + "@electric-sql/pglite-socket": "0.0.6", + "@electric-sql/pglite-tools": "0.2.7", + "@hono/node-server": "1.19.6", + "@mrleebo/prisma-ast": "0.12.1", + "@prisma/get-platform": "6.8.2", + "@prisma/query-plan-executor": "6.18.0", + "foreground-child": "3.3.1", + "get-port-please": "3.1.2", + "hono": "4.10.6", + "http-status-codes": "2.3.0", + "pathe": "2.0.3", + "proper-lockfile": "4.1.2", + "remeda": "2.21.3", + "std-env": "3.9.0", + "valibot": "1.2.0", + "zeptomatch": "2.0.2" + } + }, + "node_modules/@prisma/driver-adapter-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.2.0.tgz", + "integrity": "sha512-gzrUcbI9VmHS24Uf+0+7DNzdIw7keglJsD5m/MHxQOU68OhGVzlphQRobLiDMn8CHNA2XN8uugwKjudVtnfMVQ==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.2.0" + } + }, + "node_modules/@prisma/engines": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.2.0.tgz", + "integrity": "sha512-HUeOI/SvCDsHrR9QZn24cxxZcujOjcS3w1oW/XVhnSATAli5SRMOfp/WkG3TtT5rCxDA4xOnlJkW7xkho4nURA==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.2.0", + "@prisma/engines-version": "7.2.0-4.0c8ef2ce45c83248ab3df073180d5eda9e8be7a3", + "@prisma/fetch-engine": "7.2.0", + "@prisma/get-platform": "7.2.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "7.2.0-4.0c8ef2ce45c83248ab3df073180d5eda9e8be7a3", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.2.0-4.0c8ef2ce45c83248ab3df073180d5eda9e8be7a3.tgz", + "integrity": "sha512-KezsjCZDsbjNR7SzIiVlUsn9PnLePI7r5uxABlwL+xoerurZTfgQVbIjvjF2sVr3Uc0ZcsnREw3F84HvbggGdA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.2.0.tgz", + "integrity": "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.2.0" + } + }, + "node_modules/@prisma/fetch-engine": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.2.0.tgz", + "integrity": "sha512-Z5XZztJ8Ap+wovpjPD2lQKnB8nWFGNouCrglaNFjxIWAGWz0oeHXwUJRiclIoSSXN/ptcs9/behptSk8d0Yy6w==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.2.0", + "@prisma/engines-version": "7.2.0-4.0c8ef2ce45c83248ab3df073180d5eda9e8be7a3", + "@prisma/get-platform": "7.2.0" + } + }, + "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.2.0.tgz", + "integrity": "sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.2.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.8.2.tgz", + "integrity": "sha512-vXSxyUgX3vm1Q70QwzwkjeYfRryIvKno1SXbIqwSptKwqKzskINnDUcx85oX+ys6ooN2ATGSD0xN2UTfg6Zcow==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.8.2" + } + }, + "node_modules/@prisma/get-platform/node_modules/@prisma/debug": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.8.2.tgz", + "integrity": "sha512-4muBSSUwJJ9BYth5N8tqts8JtiLT8QI/RSAzEogwEfpbYGFo9mYsInsVo8dqXdPO2+Rm5OG5q0qWDDE3nyUbVg==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/query-plan-executor": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/query-plan-executor/-/query-plan-executor-6.18.0.tgz", + "integrity": "sha512-jZ8cfzFgL0jReE1R10gT8JLHtQxjWYLiQ//wHmVYZ2rVkFHoh0DT8IXsxcKcFlfKN7ak7k6j0XMNn2xVNyr5cA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/studio-core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.9.0.tgz", + "integrity": "sha512-xA2zoR/ADu/NCSQuriBKTh6Ps4XjU0bErkEcgMfnSGh346K1VI7iWKnoq1l2DoxUqiddPHIEWwtxJ6xCHG6W7g==", + "devOptional": true, + "license": "Apache-2.0", + "peerDependencies": { + "@types/react": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1700,6 +2109,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1757,6 +2173,18 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "license": "MIT" }, + "node_modules/@types/pg": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz", + "integrity": "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, "node_modules/@types/prop-types": { "version": "15.7.15", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", @@ -2595,6 +3023,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/axe-core": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", @@ -2704,6 +3142,48 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2800,6 +3280,47 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chevrotain": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-10.5.0.tgz", + "integrity": "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "10.5.0", + "@chevrotain/gast": "10.5.0", + "@chevrotain/types": "10.5.0", + "@chevrotain/utils": "10.5.0", + "lodash": "4.17.21", + "regexp-to-ast": "0.5.0" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -2842,6 +3363,23 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2869,7 +3407,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2971,6 +3509,16 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3007,6 +3555,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -3040,6 +3612,64 @@ "csstype": "^3.0.2" } }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-cli": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-11.0.0.tgz", + "integrity": "sha512-r5pA8idbk7GFWuHEU7trSTflWcdBpQEK+Aw17UrSHjS6CReuhrrPcyC3zcQBPQvhArRHnBo/h6eLH1fkCvNlww==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.6", + "dotenv": "^17.1.0", + "dotenv-expand": "^12.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "dotenv": "cli.js" + } + }, + "node_modules/dotenv-expand": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz", + "integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -3055,6 +3685,17 @@ "node": ">= 0.4" } }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.267", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", @@ -3069,6 +3710,16 @@ "dev": true, "license": "MIT" }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/error-ex": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", @@ -3701,6 +4352,36 @@ "node": ">=0.10.0" } }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3848,6 +4529,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3888,6 +4586,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, "node_modules/generator-function": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", @@ -3933,6 +4641,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-port-please": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", + "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -3978,6 +4693,24 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4034,6 +4767,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/grammex": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.12.tgz", + "integrity": "sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -4153,6 +4900,40 @@ "react-is": "^16.7.0" } }, + "node_modules/hono": { + "version": "4.10.6", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.10.6.tgz", + "integrity": "sha512-BIdolzGpDO9MQ4nu3AUuDwHZZ+KViNm+EZ75Ae55eMXMqLVhDFqEMXxtUe9Qh8hjL+pIna/frs2j6Y2yD5Ua/g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-status-codes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", + "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4479,6 +5260,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "devOptional": true, + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -4635,7 +5423,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/iterator.prototype": { @@ -4656,6 +5444,16 @@ "node": ">= 0.4" } }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/jose": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", @@ -4796,6 +5594,16 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -4818,6 +5626,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4825,6 +5640,13 @@ "dev": true, "license": "MIT" }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "devOptional": true, + "license": "Apache-2.0" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4847,6 +5669,22 @@ "yallist": "^3.0.2" } }, + "node_modules/lru.min": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.3.tgz", + "integrity": "sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4910,6 +5748,40 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/mysql2": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz", + "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.7.0", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "lru.min": "^1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -5031,6 +5903,13 @@ } } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -5038,6 +5917,26 @@ "dev": true, "license": "MIT" }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, "node_modules/oauth4webapi": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.3.tgz", @@ -5169,6 +6068,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5281,7 +6187,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -5302,6 +6208,118 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/pg": { + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.7" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "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", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-types/node_modules/postgres-array": { + "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" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5321,6 +6339,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -5359,6 +6389,59 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postgres": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", + "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", + "devOptional": true, + "license": "Unlicense", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/porsager" + } + }, + "node_modules/postgres-array": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz", + "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "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" + } + }, + "node_modules/postgres-interval": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/preact": { "version": "10.24.3", "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz", @@ -5388,6 +6471,40 @@ "node": ">= 0.8.0" } }, + "node_modules/prisma": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.2.0.tgz", + "integrity": "sha512-jSdHWgWOgFF24+nRyyNRVBIgGDQEsMEF8KPHvhBBg3jWyR9fUAK0Nq9ThUmiGlNgq2FA7vSk/ZoCvefod+a8qg==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/config": "7.2.0", + "@prisma/dev": "0.17.0", + "@prisma/engines": "7.2.0", + "@prisma/studio-core": "0.9.0", + "mysql2": "3.15.3", + "postgres": "3.4.7" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24.0" + }, + "peerDependencies": { + "better-sqlite3": ">=9.0.0", + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5399,6 +6516,25 @@ "react-is": "^16.13.1" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5409,6 +6545,23 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5430,6 +6583,17 @@ ], "license": "MIT" }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, "node_modules/react": { "version": "19.2.3", "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", @@ -5473,6 +6637,20 @@ "react-dom": ">=16.6.0" } }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -5496,6 +6674,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regexp-to-ast": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "devOptional": true, + "license": "MIT" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -5517,6 +6702,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/remeda": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.21.3.tgz", + "integrity": "sha512-XXrZdLA10oEOQhLLzEJEiFFSKi21REGAkHdImIb4rt/XXy8ORGXh5HCcpUOsElfPNDb+X6TA/+wkh+p2KffYmg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "type-fest": "^4.39.1" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -5556,6 +6757,16 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -5646,6 +6857,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -5662,6 +6880,12 @@ "semver": "bin/semver.js" } }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", + "devOptional": true + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -5773,7 +6997,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -5786,7 +7010,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -5868,6 +7092,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -5886,6 +7123,25 @@ "node": ">=0.10.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stable-hash": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", @@ -5893,6 +7149,13 @@ "dev": true, "license": "MIT" }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "devOptional": true, + "license": "MIT" + }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -6097,6 +7360,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -6216,6 +7489,19 @@ "node": ">= 0.8.0" } }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "devOptional": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -6298,7 +7584,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -6434,11 +7720,35 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/valibot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", + "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -6549,6 +7859,15 @@ "node": ">=0.10.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -6578,6 +7897,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zeptomatch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.0.2.tgz", + "integrity": "sha512-H33jtSKf8Ijtb5BW6wua3G5DhnFjbFML36eFu+VdOoVY4HD9e7ggjqdM6639B+L87rjnR6Y+XeRzBXZdy52B/g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "grammex": "^3.1.10" + } + }, "node_modules/zod": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.4.tgz", diff --git a/package.json b/package.json index 0620a56..b90a023 100644 --- a/package.json +++ b/package.json @@ -6,26 +6,37 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "eslint" + "lint": "eslint", + "db:migrate": "prisma migrate dev", + "db:generate": "prisma generate", + "db:studio": "prisma studio" }, "dependencies": { + "@auth/prisma-adapter": "^2.11.1", "@emotion/cache": "^11.14.0", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", "@mui/icons-material": "^7.3.6", "@mui/material": "^7.3.6", "@mui/material-nextjs": "^7.3.6", + "@mui/x-data-grid": "^8.23.0", + "@prisma/adapter-pg": "^7.2.0", + "@prisma/client": "^7.2.0", "next": "16.1.1", "next-auth": "^5.0.0-beta.30", + "pg": "^8.16.3", "react": "19.2.3", "react-dom": "19.2.3" }, "devDependencies": { "@types/node": "^20", + "@types/pg": "^8.16.0", "@types/react": "^19", "@types/react-dom": "^19", + "dotenv-cli": "^11.0.0", "eslint": "^9", "eslint-config-next": "16.1.1", + "prisma": "^7.2.0", "typescript": "^5" } } diff --git a/prisma.config.ts b/prisma.config.ts new file mode 100644 index 0000000..1173c5d --- /dev/null +++ b/prisma.config.ts @@ -0,0 +1,12 @@ +import { config } from "dotenv"; +config({ path: ".env.local" }); + +import { defineConfig } from "prisma/config"; + +export default defineConfig({ + schema: "prisma/schema.prisma", + datasource: { + // This is now the ONLY place where the DB connection string is defined + url: process.env.DATABASE_URL, + }, +}); \ No newline at end of file diff --git a/prisma/migrations/20260107011428_setup_auth_and_files/migration.sql b/prisma/migrations/20260107011428_setup_auth_and_files/migration.sql new file mode 100644 index 0000000..1e4994d --- /dev/null +++ b/prisma/migrations/20260107011428_setup_auth_and_files/migration.sql @@ -0,0 +1,54 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "azureAdUserId" TEXT NOT NULL, + "email" TEXT NOT NULL, + "displayName" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "FileNode" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "size" BIGINT, + "isFolder" BOOLEAN NOT NULL DEFAULT false, + "oneDriveId" TEXT, + "path" TEXT NOT NULL, + "orderIndex" INTEGER NOT NULL DEFAULT 0, + "metadata" JSONB NOT NULL DEFAULT '{}', + "description" TEXT, + "ownerId" TEXT NOT NULL, + "parentId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "FileNode_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_azureAdUserId_key" ON "User"("azureAdUserId"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "FileNode_oneDriveId_key" ON "FileNode"("oneDriveId"); + +-- CreateIndex +CREATE INDEX "FileNode_parentId_idx" ON "FileNode"("parentId"); + +-- CreateIndex +CREATE INDEX "FileNode_orderIndex_idx" ON "FileNode"("orderIndex"); + +-- CreateIndex +CREATE UNIQUE INDEX "FileNode_ownerId_path_key" ON "FileNode"("ownerId", "path"); + +-- AddForeignKey +ALTER TABLE "FileNode" ADD CONSTRAINT "FileNode_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "FileNode" ADD CONSTRAINT "FileNode_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "FileNode"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/20260107012848_add_auth_tables/migration.sql b/prisma/migrations/20260107012848_add_auth_tables/migration.sql new file mode 100644 index 0000000..f87133f --- /dev/null +++ b/prisma/migrations/20260107012848_add_auth_tables/migration.sql @@ -0,0 +1,52 @@ +/* + Warnings: + + - You are about to drop the column `displayName` on the `User` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "User" DROP COLUMN "displayName", +ADD COLUMN "emailVerified" TIMESTAMP(3), +ADD COLUMN "image" TEXT, +ADD COLUMN "name" TEXT, +ALTER COLUMN "azureAdUserId" DROP NOT NULL; + +-- CreateTable +CREATE TABLE "Account" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "type" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "providerAccountId" TEXT NOT NULL, + "refresh_token" TEXT, + "access_token" TEXT, + "expires_at" INTEGER, + "token_type" TEXT, + "scope" TEXT, + "id_token" TEXT, + "session_state" TEXT, + + CONSTRAINT "Account_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Session" ( + "id" TEXT NOT NULL, + "sessionToken" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "expires" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Session_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken"); + +-- AddForeignKey +ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..044d57c --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..15495e7 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,76 @@ +datasource db { + provider = "postgresql" +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id String @id @default(uuid()) + name String? // Renamed from displayName for NextAuth compatibility + email String @unique + emailVerified DateTime? + image String? + azureAdUserId String? @unique + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + nodes FileNode[] + accounts Account[] + sessions Session[] +} + +model Account { + id String @id @default(uuid()) + userId String + type String + provider String + providerAccountId String + refresh_token String? @db.Text + access_token String? @db.Text + expires_at Int? + token_type String? + scope String? + id_token String? @db.Text + session_state String? + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@unique([provider, providerAccountId]) +} + +model Session { + id String @id @default(uuid()) + sessionToken String @unique + userId String + expires DateTime + user User @relation(fields: [userId], references: [id], onDelete: Cascade) +} + +model FileNode { + id String @id @default(uuid()) + name String + size BigInt? + isFolder Boolean @default(false) + oneDriveId String? @unique + path String + orderIndex Int @default(0) + metadata Json @default("{}") + description String? + + ownerId String + owner User @relation(fields: [ownerId], references: [id]) + + parentId String? + parent FileNode? @relation("TreeHierarchy", fields: [parentId], references: [id]) + children FileNode[] @relation("TreeHierarchy") + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@unique([ownerId, path]) + @@index([parentId]) + @@index([orderIndex]) +} \ No newline at end of file diff --git a/src/app/dashboard/actions.ts b/src/app/dashboard/actions.ts new file mode 100644 index 0000000..def547a --- /dev/null +++ b/src/app/dashboard/actions.ts @@ -0,0 +1,25 @@ +'use server'; +import { prisma } from "@/lib/prisma"; +import { auth } from "@/auth"; + +export async function getFileNodes() { + const session = await auth(); + + if (!session?.user?.id) { + return []; // Return empty if not logged in + } + + const nodes = await prisma.fileNode.findMany({ + where: { + ownerId: session.user.id, // Only get THIS user's files + }, + orderBy: { + orderIndex: 'asc', + }, + }); + + return nodes.map(node => ({ + ...node, + size: node.size ? Number(node.size) : null, + })); +} \ No newline at end of file diff --git a/src/app/dashboard/dashboard-view.tsx b/src/app/dashboard/dashboard-view.tsx new file mode 100644 index 0000000..915bee1 --- /dev/null +++ b/src/app/dashboard/dashboard-view.tsx @@ -0,0 +1,75 @@ +"use client"; + +import { useState } from "react"; +import { Button, CircularProgress } from "@mui/material"; +import SyncIcon from "@mui/icons-material/Sync"; +import { DataGrid, GridColDef } from "@mui/x-data-grid"; +import { syncOneDrive } from "./sync-actions"; +import { useRouter } from "next/navigation"; + +interface DashboardViewProps { + initialFiles: any[]; +} + +export default function DashboardView({ initialFiles }: DashboardViewProps) { + const [loading, setLoading] = useState(false); + const router = useRouter(); + + const handleSync = async () => { + setLoading(true); + try { + await syncOneDrive(); + // This tells Next.js to re-run the Server Component (page.tsx) + // and fetch the fresh data from Postgres + router.refresh(); + } catch (error) { + console.error("Sync failed:", error); + alert("Failed to sync OneDrive"); + } finally { + setLoading(false); + } + }; + + const columns: GridColDef[] = [ + { field: "name", headerName: "File Name", width: 300 }, + { + field: "metadata", + headerName: "Type", + width: 120, + valueGetter: (params) => params?.type || "Unknown" + }, + { + field: "size", + headerName: "Size (MB)", + width: 120, + valueGetter: (value) => value ? (Number(value) / 1024 / 1024).toFixed(2) : "0" + }, + { field: "updatedAt", headerName: "Last Synced", width: 200 }, + ]; + + return ( +

+ ); +} \ No newline at end of file diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index adde291..d2f58cd 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -1,9 +1,25 @@ -import React from 'react' +import { auth } from "@/auth"; +import { redirect } from "next/navigation"; +import { getFileNodes } from "./actions"; +import DashboardView from "./dashboard-view" + +export default async function DashboardPage() { + const session = await auth(); + + // Guard: If not logged in, go back to home + if (!session?.user) { + redirect("/"); + } + + // Fetch initial files from PostgreSQL + const initialFiles = await getFileNodes(); -function Dashboard() { return ( -
Dashboard
- ) -} - -export default Dashboard \ No newline at end of file +
+

My OneDrive Library

+ + {/* Pass the data to the interactive Client Component */} + +
+ ); +} \ No newline at end of file diff --git a/src/app/dashboard/sync-actions.ts b/src/app/dashboard/sync-actions.ts new file mode 100644 index 0000000..18ab0ab --- /dev/null +++ b/src/app/dashboard/sync-actions.ts @@ -0,0 +1,52 @@ +'use server'; + +import { auth } from "@/auth"; +import { prisma } from "@/lib/prisma"; +import { revalidatePath } from "next/cache"; + +export async function syncOneDrive() { + const session = await auth(); + + if (!session?.user?.id) throw new Error("Unauthorized"); + + // 1. Get the OAuth token from your PostgreSQL 'Account' table + const account = await prisma.account.findFirst({ + where: { userId: session.user.id }, + }); + + if (!account?.access_token) throw new Error("Microsoft account not linked properly"); + + // 2. Fetch the files from Microsoft Graph + const response = await fetch("https://graph.microsoft.com/v1.0/me/drive/root/children", { + headers: { Authorization: `Bearer ${account.access_token}` }, + }); + + const data = await response.json(); + + // 3. The "Sync Loop": Map OneDrive items to your Postgres FileNode table + for (const item of data.value) { + const extension = item.name.split('.').pop()?.toUpperCase() || (item.folder ? 'FOLDER' : 'UNKNOWN'); + + await prisma.fileNode.upsert({ + where: { oneDriveId: item.id }, + update: { + name: item.name, + size: item.size, + metadata: { type: extension }, // Store the "Type" in your JSONB field + }, + create: { + oneDriveId: item.id, + name: item.name, + size: item.size, + isFolder: !!item.folder, + path: item.parentReference.path + '/' + item.name, + ownerId: session.user.id, + metadata: { type: extension }, + } + }); + } + + // Refresh the dashboard UI to show new data + revalidatePath('/dashboard'); + return { success: true, count: data.value.length }; +} \ No newline at end of file diff --git a/src/app/dashboard/upload-actions.ts b/src/app/dashboard/upload-actions.ts new file mode 100644 index 0000000..743ff88 --- /dev/null +++ b/src/app/dashboard/upload-actions.ts @@ -0,0 +1,68 @@ +'use server'; + +import { auth } from "@/auth"; +import { getFreshAccessToken } from "@/lib/auth-utils"; +import { prisma } from "@/lib/prisma"; +import { revalidatePath } from "next/cache"; + +export async function uploadFileAction(formData: FormData) { + const session = await auth(); + if (!session?.user?.id) throw new Error("Unauthorized"); + + const file = formData.get("file") as File; + const folderName = "WebCalibre"; + const accessToken = await getFreshAccessToken(session.user.id); + + // 1. Create/Check WebCalibre Folder + const folderPath = `https://graph.microsoft.com/v1.0/me/drive/root:/${folderName}`; + const folderCheck = await fetch(folderPath, { + headers: { Authorization: `Bearer ${accessToken}` } + }); + + if (folderCheck.status === 404) { + await fetch(`https://graph.microsoft.com/v1.0/me/drive/root/children`, { + method: "POST", + headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": "application/json" }, + body: JSON.stringify({ name: folderName, folder: {} }) + }); + } + + // 2. Create Upload Session (Supports files > 4MB) + const sessionUrl = `https://graph.microsoft.com/v1.0/me/drive/root:/${folderName}/${file.name}:/createUploadSession`; + const sessionRes = await fetch(sessionUrl, { + method: "POST", + headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": "application/json" }, + body: JSON.stringify({ item: { "@microsoft.graph.conflictBehavior": "rename" } }) + }); + + const { uploadUrl } = await sessionRes.json(); + + // 3. Upload File Data + const buffer = Buffer.from(await file.arrayBuffer()); + const uploadRes = await fetch(uploadUrl, { + method: "PUT", + headers: { + "Content-Length": `${file.size}`, + "Content-Range": `bytes 0-${file.size - 1}/${file.size}` + }, + body: buffer + }); + + const driveItem = await uploadRes.json(); + + // 4. Record in PostgreSQL + await prisma.fileNode.create({ + data: { + oneDriveId: driveItem.id, + name: file.name, + size: BigInt(file.size), + isFolder: false, + path: `/${folderName}/${file.name}`, + ownerId: session.user.id, + metadata: { type: file.name.split('.').pop()?.toUpperCase() } + } + }); + + revalidatePath("/dashboard"); + return { success: true }; +} \ No newline at end of file diff --git a/src/app/dashboard/upload.tsx b/src/app/dashboard/upload.tsx new file mode 100644 index 0000000..445ba73 --- /dev/null +++ b/src/app/dashboard/upload.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { useState } from "react"; +import { Button, Typography, Box, LinearProgress } from "@mui/material"; +import CloudUploadIcon from "@mui/icons-material/CloudUpload"; +import { uploadFileToOneDrive } from "./upload-actions"; + +export default function UploadForm() { + const [uploading, setUploading] = useState(false); + + async function handleAction(formData: FormData) { + const file = formData.get("file") as File; + if (!file || file.size === 0) return; + + setUploading(true); + try { + await uploadFileToOneDrive(formData); + alert("Uploaded successfully!"); + } catch (error) { + console.error(error); + alert("Upload failed."); + } finally { + setUploading(false); + } + } + + return ( + +
+ { + // Optional: Trigger auto-submit or show filename + }} + /> + + + {uploading && ( + + Uploading to OneDrive & Database... + + + )} + + + + +
+
+ ); +} \ No newline at end of file diff --git a/src/app/dashboard/upload/page.tsx b/src/app/dashboard/upload/page.tsx new file mode 100644 index 0000000..16540d5 --- /dev/null +++ b/src/app/dashboard/upload/page.tsx @@ -0,0 +1,69 @@ +"use client"; + +import { useState } from "react"; +import { Box, Button, Typography, Paper, LinearProgress, Container } from "@mui/material"; +import CloudUploadIcon from "@mui/icons-material/CloudUpload"; +import { uploadFileAction } from "../upload-actions"; + +export default function UploadPage() { + const [file, setFile] = useState(null); + const [loading, setLoading] = useState(false); + + const handleUpload = async () => { + if (!file) return; + setLoading(true); + + const formData = new FormData(); + formData.append("file", file); + + try { + await uploadFileAction(formData); + alert("Book added to WebCalibre!"); + setFile(null); + } catch (err) { + alert("Upload failed. Check console."); + } finally { + setLoading(false); + } + }; + + return ( + + + + Upload to Library + + + Files will be saved in your OneDrive "WebCalibre" folder. + + + + setFile(e.target.files?.[0] || null)} + /> + + + + {loading && } + + + + + ); +} \ No newline at end of file diff --git a/src/app/upload/_actions.ts b/src/app/upload/_actions.ts new file mode 100644 index 0000000..1aeb0b3 --- /dev/null +++ b/src/app/upload/_actions.ts @@ -0,0 +1,112 @@ +'use server'; + +import { auth } from "@/auth"; +import { getFreshAccessToken } from "@/lib/auth-utils"; +import { prisma } from "@/lib/prisma"; +import { revalidatePath } from "next/cache"; + +export async function uploadFileAction(formData: FormData) { + const session = await auth(); + if (!session?.user?.id) throw new Error("Unauthorized"); + + const file = formData.get("file") as File; + if (!file) throw new Error("No file selected"); + + const accessToken = await getFreshAccessToken(session.user.id); + const folderName = "WebCalibre"; + + // --- 1. CHECK/CREATE THE WEBCALIBRE FOLDER --- + // We check if the folder exists at the root of the user's OneDrive + const folderCheckUrl = `https://graph.microsoft.com/v1.0/me/drive/root:/${folderName}`; + const folderCheck = await fetch(folderCheckUrl, { + headers: { Authorization: `Bearer ${accessToken}` } + }); + + if (folderCheck.status === 404) { + console.log(`📂 Folder '${folderName}' not found. Creating it...`); + const createFolderRes = await fetch(`https://graph.microsoft.com/v1.0/me/drive/root/children`, { + method: "POST", + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json" + }, + body: JSON.stringify({ + name: folderName, + folder: {}, // Empty object tells Graph to create a folder + "@microsoft.graph.conflictBehavior": "fail" + }) + }); + + if (!createFolderRes.ok) { + const errorData = await createFolderRes.json(); + console.error("❌ Folder Creation Error:", errorData); + throw new Error("Could not create WebCalibre folder on OneDrive."); + } + } + + // --- 2. CREATE UPLOAD SESSION --- + // encodeURIComponent is vital for filenames with spaces or special characters + const sessionUrl = `https://graph.microsoft.com/v1.0/me/drive/root:/${folderName}/${encodeURIComponent(file.name)}:/createUploadSession`; + + const sessionRes = await fetch(sessionUrl, { + method: "POST", + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json" + }, + body: JSON.stringify({ + item: { + "@microsoft.graph.conflictBehavior": "rename", // If file exists, name it "Book 1.pdf" + name: file.name + } + }) + }); + + const sessionData = await sessionRes.json(); + if (!sessionRes.ok) { + console.error("❌ Session Error:", sessionData); + throw new Error(sessionData.error?.message || "OneDrive session failed"); + } + + const { uploadUrl } = sessionData; + + // --- 3. UPLOAD THE DATA BYTES --- + const buffer = Buffer.from(await file.arrayBuffer()); + const uploadRes = await fetch(uploadUrl, { + method: "PUT", + headers: { + "Content-Length": `${file.size}`, + "Content-Range": `bytes 0-${file.size - 1}/${file.size}` + }, + body: buffer + }); + + if (!uploadRes.ok) { + const uploadError = await uploadRes.json(); + console.error("❌ Upload Error:", uploadError); + throw new Error("Chunk upload failed"); + } + + const driveItem = await uploadRes.json(); + + // --- 4. RECORD IN POSTGRESQL (PRISMA) --- + await prisma.fileNode.create({ + data: { + oneDriveId: driveItem.id, + name: file.name, + size: BigInt(file.size), + isFolder: false, + path: `/${folderName}/${file.name}`, + ownerId: session.user.id, + metadata: { + type: file.name.split('.').pop()?.toUpperCase() || "UNKNOWN", + mimeType: file.type + } + } + }); + + // Revalidate ensures the dashboard list updates immediately + revalidatePath("/dashboard"); + + return { success: true }; +} \ No newline at end of file diff --git a/src/app/upload/page.tsx b/src/app/upload/page.tsx new file mode 100644 index 0000000..120865d --- /dev/null +++ b/src/app/upload/page.tsx @@ -0,0 +1,17 @@ +import { auth } from "@/auth"; +import { redirect } from "next/navigation"; +import UploadView from "./upload-view"; +import { Container } from "@mui/material"; + +export default async function UploadPage() { + const session = await auth(); + + // Guard: Must be logged in to upload + if (!session) redirect("/"); + + return ( + + + + ); +} \ No newline at end of file diff --git a/src/app/upload/upload-view.tsx b/src/app/upload/upload-view.tsx new file mode 100644 index 0000000..013328c --- /dev/null +++ b/src/app/upload/upload-view.tsx @@ -0,0 +1,122 @@ +'use client'; + +import { useState } from "react"; +import { Box, Button, Typography, Paper, LinearProgress, Stack } from "@mui/material"; +import CloudUploadIcon from "@mui/icons-material/CloudUpload"; +import { uploadFileAction } from "./_actions"; + +/** + * Helper function to convert raw bytes into a human-readable string. + * This helps the user understand exactly how large their e-book is. + */ +const formatFileSize = (bytes: number) => { + if (bytes === 0) return '0 Bytes'; + const k = 1024; + const sizes = ['Bytes', 'KB', 'MB', 'GB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + // Returns something like "1.45 MB" or "850 KB" + return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; +}; + +export default function UploadView({ user }: { user: any }) { + const [file, setFile] = useState(null); + const [status, setStatus] = useState<'idle' | 'uploading' | 'success'>('idle'); + + const MAX_FILE_SIZE = 50 * 1024 * 1024; // 50MB Limit + + const handleUpload = async () => { + if (!file) return; + if (file.size > MAX_FILE_SIZE) { + alert(`File is too large! Maximum size allowed is ${formatFileSize(MAX_FILE_SIZE)}.`); + return; + } + setStatus('uploading'); + + const formData = new FormData(); + formData.append("file", file); + + try { + await uploadFileAction(formData); + setStatus('success'); + setFile(null); + } catch (err) { + // If the server action fails, it usually prints details in the terminal + alert("Upload failed. Ensure the 'WebCalibre' folder can be created and OneDrive has space."); + setStatus('idle'); + } + }; + + return ( + + + Upload to WebCalibre + + + Adding books as {user.name} + + + + {/* Dropzone/Selection Area */} + + { + setFile(e.target.files?.[0] || null); + setStatus('idle'); + }} + /> + + + {/* New: Enhanced File Info Display */} + {file && ( + + + Selected: {file.name} + + + File Size: {formatFileSize(file.size)} + + + )} + + + {/* Progress Indicator */} + {status === 'uploading' && ( + + + Connecting to OneDrive & Uploading... + + + + )} + + {/* Action Button */} + + + {/* Success Feedback */} + {status === 'success' && ( + + ✅ Successfully uploaded to your library! + + )} + + + ); +} \ No newline at end of file diff --git a/src/auth.config.ts b/src/auth.config.ts new file mode 100644 index 0000000..9fe15ef --- /dev/null +++ b/src/auth.config.ts @@ -0,0 +1,28 @@ +import MicrosoftEntraID from "next-auth/providers/microsoft-entra-id"; +import type { NextAuthConfig } from "next-auth"; + +export default { + providers: [ + MicrosoftEntraID({ + clientId: process.env.AUTH_MICROSOFT_ENTRA_ID_ID, + clientSecret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET, + issuer: process.env.AUTH_MICROSOFT_ENTRA_ID_ISSUER, + authorization: { + params: { + scope: "openid profile offline_access email Files.ReadWrite Files.Read", + prompt: "consent", // Forces Microsoft to show the permission screen + access_type: "offline", + }, + }, + profile(profile) { + return { + id: profile.sub, + name: profile.name, + email: profile.email, + image: null, + azureAdUserId: profile.oid ?? profile.sub, + }; + }, + }), + ], +} satisfies NextAuthConfig; \ No newline at end of file diff --git a/src/auth.ts b/src/auth.ts index 1bf98f9..8e547bf 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -1,21 +1,39 @@ -import NextAuth from "next-auth" -import MicrosoftEntraID from "next-auth/providers/microsoft-entra-id" - +import NextAuth from "next-auth"; +import { PrismaAdapter } from "@auth/prisma-adapter"; +import { prisma } from "@/lib/prisma"; +import authConfig from "./auth.config"; + export const { handlers, signIn, signOut, auth } = NextAuth({ - providers: [ - MicrosoftEntraID({ - clientId: process.env.AUTH_MICROSOFT_ENTRA_ID_ID, - clientSecret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET, - // Pass tenantId as 'common' to support multi-tenant + personal accounts - tenantId: process.env.AUTH_MICROSOFT_ENTRA_ID_TENANT_ID, - authorization: { - params: { - // Explicitly ask for these scopes for OneDrive access later - scope: "openid profile email offline_access User.Read Files.ReadWrite", - }, - }, - }) - ], - // Required for Next.js 15/16 and Nginx production environments - trustHost: true, -}) \ No newline at end of file + adapter: PrismaAdapter(prisma), + session: { strategy: "jwt" }, + ...authConfig, + callbacks: { + async jwt({ token, account, user }) { + // On the first sign in, 'account' contains the refresh_token + if (account) { + token.accessToken = account.access_token; + token.refreshToken = account.refresh_token; + token.expiresAt = account.expires_at; + } + if (user) { + token.sub = user.id; + } + return token; + }, + async session({ session, token }) { + if (session?.user && token.sub) { + session.user.id = token.sub; + } + return session; + }, + }, + // Adding events can help debug if the account is actually linking + events: { + async linkAccount({ account, user }) { + console.log("🔗 Account linked successfully for user:", user.id); + if (!account.refresh_token) { + console.warn("⚠️ WARNING: No refresh_token received in linkAccount event!"); + } + } + } +}); \ No newline at end of file diff --git a/src/components/layout/Navbar.tsx b/src/components/layout/Navbar.tsx index 2e2e640..d8038e3 100644 --- a/src/components/layout/Navbar.tsx +++ b/src/components/layout/Navbar.tsx @@ -1,9 +1,15 @@ 'use client'; -import React from 'react'; -import { AppBar, Toolbar, Typography, Button, Box, Container, Avatar, IconButton } from '@mui/material'; -import LibraryBooksIcon from '@mui/icons-material/LibraryBooks'; +import React, { useState } from 'react'; +import { + AppBar, Toolbar, Typography, Button, Box, Container, + Avatar, IconButton, Drawer, List, ListItem, + ListItemButton, ListItemIcon, ListItemText, Divider +} from '@mui/material'; import MenuIcon from '@mui/icons-material/Menu'; +import LibraryBooksIcon from '@mui/icons-material/LibraryBooks'; +import CloudUploadIcon from '@mui/icons-material/CloudUpload'; +import DashboardIcon from '@mui/icons-material/Dashboard'; import Link from 'next/link'; import { signIn, signOut } from "next-auth/react"; @@ -16,72 +22,90 @@ interface NavbarProps { } export default function Navbar({ user }: NavbarProps) { + const [isDrawerOpen, setIsDrawerOpen] = useState(false); const isLoggedIn = !!user; + const toggleDrawer = (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { + if (event.type === 'keydown' && ((event as React.KeyboardEvent).key === 'Tab' || (event as React.KeyboardEvent).key === 'Shift')) { + return; + } + setIsDrawerOpen(open); + }; + + const navItems = [ + { text: 'Dashboard', icon: , href: '/dashboard' }, + { text: 'Library', icon: , href: '/library' }, + { text: 'Upload File', icon: , href: '/upload' }, + ]; + return ( - - - - {/* Menu Icon for the future AppDrawer */} - - - + <> + + + + + + - - WebCalibre 2 - + + WebCalibre 2 + - - {isLoggedIn ? ( - <> - {/* User Info: Name and Small Email */} - - - {user.name} - - - {user.email} - - - - {/* Profile Picture */} - - {user.name?.charAt(0)} - - - + + ) : ( + - - ) : ( - // Login button triggers the Microsoft flow directly - - )} + )} + + + + + + {/* The Drawer (Sidebar) */} + + + + + Navigation - - - + + + {navItems.map((item) => ( + + + {item.icon} + + + + ))} + + + + ); } \ No newline at end of file diff --git a/src/lib/auth-utils.ts b/src/lib/auth-utils.ts new file mode 100644 index 0000000..451aa0f --- /dev/null +++ b/src/lib/auth-utils.ts @@ -0,0 +1,55 @@ +import { prisma } from "@/lib/prisma"; + +export async function getFreshAccessToken(userId: string) { + // 1. Find the account in PostgreSQL + const account = await prisma.account.findFirst({ + where: { userId }, + }); + + if (!account || !account.refresh_token) { + throw new Error("No refresh token available. User might need to re-login."); + } + + // 2. Check if the token is expired (with a 1-minute buffer) + // account.expires_at is usually in seconds, so we multiply by 1000 + const isExpired = (account.expires_at ?? 0) * 1000 < Date.now() + 60000; + + if (!isExpired && account.access_token) { + return account.access_token; + } + + // 3. If expired, request a new one from Microsoft + console.log("🔄 Access token expired. Refreshing for user:", userId); + + try { + const response = await fetch("https://login.microsoftonline.com/common/oauth2/v2.0/token", { + method: "POST", + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + body: new URLSearchParams({ + client_id: process.env.AUTH_MICROSOFT_ENTRA_ID_ID!, + client_secret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET!, + grant_type: "refresh_token", + refresh_token: account.refresh_token, + }), + }); + + const tokens = await response.json(); + + if (!response.ok) throw tokens; + + // 4. Update the Account table with the new tokens + await prisma.account.update({ + where: { id: account.id }, + data: { + access_token: tokens.access_token, + expires_at: Math.floor(Date.now() / 1000 + tokens.expires_in), + refresh_token: tokens.refresh_token ?? account.refresh_token, + }, + }); + + return tokens.access_token; + } catch (error) { + console.error("❌ Failed to refresh Microsoft token:", error); + throw new Error("RefreshAccessTokenError"); + } +} \ No newline at end of file diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts new file mode 100644 index 0000000..db586b8 --- /dev/null +++ b/src/lib/prisma.ts @@ -0,0 +1,37 @@ +import { PrismaClient } from '@prisma/client'; +import { PrismaPg } from '@prisma/adapter-pg'; +import { Pool } from 'pg'; + +// 1. Setup the connection pool using your .env.local variable +const pool = new Pool({ connectionString: process.env.DATABASE_URL }); +const adapter = new PrismaPg(pool); + +// 2. Define the singleton logic +const prismaClientSingleton = () => { + const client = new PrismaClient({ adapter }); + + // ✅ HEALTH CHECK: Only runs once per client initialization + client.$connect() + .then(() => console.log("✅ Prisma 7 connected to PostgreSQL successfully")) + .catch((err) => console.error("❌ Prisma connection error:", err)); + + return client; +}; + +type PrismaClientSingleton = ReturnType; + +const globalForPrisma = globalThis as unknown as { + prisma: PrismaClientSingleton | undefined; +}; + +// 3. Export the client (reusing existing one if it exists) +export const prisma = globalForPrisma.prisma ?? prismaClientSingleton(); + +if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma; + +// BigInt fix for JSON serialization (needed for file sizes) +if (typeof BigInt !== 'undefined') { + (BigInt.prototype as any).toJSON = function () { + return Number(this); + }; +} \ No newline at end of file diff --git a/src/proxy.ts b/src/proxy.ts index 72accdc..863b06c 100644 --- a/src/proxy.ts +++ b/src/proxy.ts @@ -1,5 +1,5 @@ import { NextResponse } from "next/server"; -import { auth } from "@/auth"; +import {auth} from "@/auth"; const protectedRoutes = ["/dashboard", "/profile"]; const apiAuthPrefix = "/api/auth";