From 6df1590aa7a41ad593a9d6021e856cfc44cafa0f Mon Sep 17 00:00:00 2001 From: Ahmed Elsakaan Date: Tue, 30 Jan 2024 21:09:34 +0000 Subject: [PATCH] feat: creates auth package --- apps/web/next.config.js | 4 +- apps/web/package.json | 3 +- .../app/(auth)/login/github/callback/route.ts | 3 + apps/web/src/app/(auth)/login/github/route.ts | 3 + apps/web/src/app/(auth)/login/page.tsx | 10 + apps/web/src/app/layout.tsx | 4 +- apps/web/src/app/page.tsx | 17 +- apps/web/src/app/providers.tsx | 1 - apps/web/src/components/ThemeSwitcher.tsx | 1 - apps/web/src/{env.mjs => env.js} | 6 +- package.json | 6 +- packages/auth/.eslintrc.cjs | 7 + packages/auth/package.json | 39 + packages/auth/src/actions/logout.ts | 28 + packages/auth/src/env.js | 18 + packages/auth/src/getSession.ts | 41 + packages/auth/src/index.ts | 2 + packages/auth/src/lucia.ts | 33 + packages/auth/src/providers/github.ts | 109 ++ packages/auth/tsconfig.json | 7 + packages/config/eslint/base.js | 1 - packages/config/tailwind/package.json | 2 +- .../db/drizzle/0001_absurd_mockingbird.sql | 3 + packages/db/drizzle/meta/0001_snapshot.json | 93 ++ packages/db/drizzle/meta/_journal.json | 7 + packages/db/package.json | 3 +- packages/db/src/{env.mjs => env.js} | 2 + packages/db/src/index.ts | 7 +- packages/db/src/schema/user.ts | 2 + packages/db/tsconfig.json | 2 +- packages/ui/package.json | 2 +- packages/ui/src/avatar.tsx | 3 +- pnpm-lock.yaml | 948 +++++++++++++++--- prettier.config.js | 13 +- 34 files changed, 1276 insertions(+), 154 deletions(-) create mode 100644 apps/web/src/app/(auth)/login/github/callback/route.ts create mode 100644 apps/web/src/app/(auth)/login/github/route.ts create mode 100644 apps/web/src/app/(auth)/login/page.tsx rename apps/web/src/{env.mjs => env.js} (74%) create mode 100644 packages/auth/.eslintrc.cjs create mode 100644 packages/auth/package.json create mode 100644 packages/auth/src/actions/logout.ts create mode 100644 packages/auth/src/env.js create mode 100644 packages/auth/src/getSession.ts create mode 100644 packages/auth/src/index.ts create mode 100644 packages/auth/src/lucia.ts create mode 100644 packages/auth/src/providers/github.ts create mode 100644 packages/auth/tsconfig.json create mode 100644 packages/db/drizzle/0001_absurd_mockingbird.sql create mode 100644 packages/db/drizzle/meta/0001_snapshot.json rename packages/db/src/{env.mjs => env.js} (76%) diff --git a/apps/web/next.config.js b/apps/web/next.config.js index 3a5db727..aeb1194c 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -1,8 +1,8 @@ -import './src/env.mjs'; +import './src/env.js'; /** @type {import('next').NextConfig} */ const nextConfig = { - transpilePackages: ['@orbitkit/db'], + transpilePackages: ['@orbitkit/db', '@orbitkit/auth'], }; export default nextConfig; diff --git a/apps/web/package.json b/apps/web/package.json index 8cee8afb..2eb40bcb 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -14,6 +14,7 @@ "typecheck": "tsc --noEmit --tsBuildInfoFile .tsbuildinfo" }, "dependencies": { + "@orbitkit/auth": "workspace:^", "@orbitkit/db": "workspace:^", "@orbitkit/ui": "workspace:^", "@t3-oss/env-nextjs": "^0.8.0", @@ -27,7 +28,7 @@ "devDependencies": { "@orbitkit/tailwind": "workspace:^", "@orbitkit/tsconfig": "workspace:^", - "@types/node": "^20.11.7", + "@types/node": "^20.11.10", "@types/react": "^18.2.48", "@types/react-dom": "^18.2.18", "autoprefixer": "^10.4.17", diff --git a/apps/web/src/app/(auth)/login/github/callback/route.ts b/apps/web/src/app/(auth)/login/github/callback/route.ts new file mode 100644 index 00000000..3c1797a8 --- /dev/null +++ b/apps/web/src/app/(auth)/login/github/callback/route.ts @@ -0,0 +1,3 @@ +import { validateGithubCallback } from '@orbitkit/auth/providers/github'; + +export { validateGithubCallback as GET }; diff --git a/apps/web/src/app/(auth)/login/github/route.ts b/apps/web/src/app/(auth)/login/github/route.ts new file mode 100644 index 00000000..70a6ee5d --- /dev/null +++ b/apps/web/src/app/(auth)/login/github/route.ts @@ -0,0 +1,3 @@ +import { createGithubAuthorizationURL } from '@orbitkit/auth/providers/github'; + +export { createGithubAuthorizationURL as GET }; diff --git a/apps/web/src/app/(auth)/login/page.tsx b/apps/web/src/app/(auth)/login/page.tsx new file mode 100644 index 00000000..2738148d --- /dev/null +++ b/apps/web/src/app/(auth)/login/page.tsx @@ -0,0 +1,10 @@ +import Link from 'next/link'; + +export default function Page() { + return ( + <> +

Sign in

+ Sign in with Github + + ); +} diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index 6781fe11..bbac580a 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -1,10 +1,10 @@ +import './globals.css'; + import type { Metadata } from 'next'; import { GeistMono } from 'geist/font/mono'; import { GeistSans } from 'geist/font/sans'; -import './globals.css'; - import { Providers } from './providers'; export const metadata: Metadata = { diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx index ea8ccf0c..87157f15 100644 --- a/apps/web/src/app/page.tsx +++ b/apps/web/src/app/page.tsx @@ -1,13 +1,23 @@ -import { ThemeSwitcher } from '@/components/ThemeSwitcher'; +import { redirect } from 'next/navigation'; + +import { getSession } from '@orbitkit/auth'; +import { logout } from '@orbitkit/auth/actions/logout'; import { db } from '@orbitkit/db'; import { Avatar, AvatarFallback, AvatarImage } from '@orbitkit/ui/avatar'; +import { ThemeSwitcher } from '@/components/ThemeSwitcher'; + export default async function Home() { + const { user } = await getSession(); + if (!user) { + return redirect('/login'); + } + const users = await db.query.userTable.findMany(); return (
-

Hello World

+

Hi, {user.username}!

{JSON.stringify(users)} @@ -18,6 +28,9 @@ export default async function Home() { CN +
+ +
); } diff --git a/apps/web/src/app/providers.tsx b/apps/web/src/app/providers.tsx index 49542d68..5205f2cc 100644 --- a/apps/web/src/app/providers.tsx +++ b/apps/web/src/app/providers.tsx @@ -1,7 +1,6 @@ 'use client'; import { type FC, type PropsWithChildren } from 'react'; - import { ThemeProvider as NextThemesProvider } from 'next-themes'; export const Providers: FC = ({ children }) => { diff --git a/apps/web/src/components/ThemeSwitcher.tsx b/apps/web/src/components/ThemeSwitcher.tsx index c11afa2a..ab7364ff 100644 --- a/apps/web/src/components/ThemeSwitcher.tsx +++ b/apps/web/src/components/ThemeSwitcher.tsx @@ -1,7 +1,6 @@ 'use client'; import { useEffect, useState } from 'react'; - import { useTheme } from 'next-themes'; export const ThemeSwitcher = () => { diff --git a/apps/web/src/env.mjs b/apps/web/src/env.js similarity index 74% rename from apps/web/src/env.mjs rename to apps/web/src/env.js index 0a6e72ab..fe2c3566 100644 --- a/apps/web/src/env.mjs +++ b/apps/web/src/env.js @@ -1,9 +1,11 @@ -import { env as dbEnv } from '@orbitkit/db/env'; import { createEnv } from '@t3-oss/env-nextjs'; import { vercel } from '@t3-oss/env-nextjs/presets'; +import { env as authEnv } from '@orbitkit/auth/env'; +import { env as dbEnv } from '@orbitkit/db/env'; + export const env = createEnv({ - extends: [dbEnv, vercel], + extends: [dbEnv, authEnv, vercel], server: {}, client: {}, runtimeEnv: {}, diff --git a/package.json b/package.json index 19b49541..c3ed8df1 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "husky": "^9.0.6", "lint-staged": "^15.2.0", "markdownlint": "^0.33.0", - "markdownlint-cli": "^0.38.0", + "markdownlint-cli": "^0.39.0", "prettier": "^3.2.4", "prettier-plugin-curly": "^0.1.3", "prettier-plugin-jsdoc": "^1.3.0", @@ -41,9 +41,9 @@ "turbo": "^1.11.3", "typescript": "^5.3.3" }, - "packageManager": "pnpm@8.14.1", + "packageManager": "pnpm@8.15.0", "volta": { "node": "20.11.0", - "pnpm": "8.14.1" + "pnpm": "8.15.0" } } diff --git a/packages/auth/.eslintrc.cjs b/packages/auth/.eslintrc.cjs new file mode 100644 index 00000000..c7b13b75 --- /dev/null +++ b/packages/auth/.eslintrc.cjs @@ -0,0 +1,7 @@ +/** @type {import('eslint').Linter.Config} */ +const config = { + root: true, + extends: ['orbitkit/base'], +}; + +module.exports = config; diff --git a/packages/auth/package.json b/packages/auth/package.json new file mode 100644 index 00000000..d9f1f386 --- /dev/null +++ b/packages/auth/package.json @@ -0,0 +1,39 @@ +{ + "name": "@orbitkit/auth", + "version": "0.1.0", + "private": true, + "description": "Auth package for OrbitKit", + "license": "MIT", + "author": "OrbitKit", + "sideEffects": false, + "type": "module", + "exports": { + ".": "./src/index.ts", + "./env": "./src/env.js", + "./providers/github": "./src/providers/github.ts", + "./actions/logout": "./src/actions/logout.ts" + }, + "scripts": { + "lint": "eslint . --cache --max-warnings 0", + "typecheck": "tsc --noEmit --tsBuildInfoFile .tsbuildinfo" + }, + "dependencies": { + "@lucia-auth/adapter-drizzle": "^1.0.0", + "@orbitkit/db": "workspace:^", + "@t3-oss/env-core": "^0.8.0", + "@types/react-dom": "^18.2.18", + "arctic": "^1.1.0", + "lucia": "^3.0.1", + "next": "14.1.0", + "oslo": "^1.0.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "zod": "^3.22.4" + }, + "devDependencies": { + "@orbitkit/tsconfig": "workspace:^", + "@types/node": "^20.11.10", + "@types/react": "^18.2.48", + "eslint-config-orbitkit": "workspace:^" + } +} diff --git a/packages/auth/src/actions/logout.ts b/packages/auth/src/actions/logout.ts new file mode 100644 index 00000000..0445684c --- /dev/null +++ b/packages/auth/src/actions/logout.ts @@ -0,0 +1,28 @@ +'use server'; + +import { cookies } from 'next/headers'; +import { redirect } from 'next/navigation'; + +import { getSession } from '../getSession'; +import { lucia } from '../lucia'; + +export async function logout() { + const { session } = await getSession(); + if (!session) { + return { + error: 'Unauthorized', + }; + } + + await lucia.invalidateSession(session.id); + + const sessionCookie = lucia.createBlankSessionCookie(); + + cookies().set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes, + ); + + return redirect('/login'); +} diff --git a/packages/auth/src/env.js b/packages/auth/src/env.js new file mode 100644 index 00000000..94c87ebd --- /dev/null +++ b/packages/auth/src/env.js @@ -0,0 +1,18 @@ +import { createEnv } from '@t3-oss/env-core'; +import { vercel } from '@t3-oss/env-core/presets'; +import { z } from 'zod'; + +export const env = createEnv({ + extends: [vercel], + server: { + NODE_ENV: z.enum(['development', 'test', 'production']).optional(), + GITHUB_CLIENT_ID: z.string(), + GITHUB_CLIENT_SECRET: z.string(), + }, + runtimeEnv: { + NODE_ENV: process.env['NODE_ENV'], + GITHUB_CLIENT_ID: process.env['GITHUB_CLIENT_ID'], + GITHUB_CLIENT_SECRET: process.env['GITHUB_CLIENT_SECRET'], + }, + emptyStringAsUndefined: true, +}); diff --git a/packages/auth/src/getSession.ts b/packages/auth/src/getSession.ts new file mode 100644 index 00000000..dc3bf3d1 --- /dev/null +++ b/packages/auth/src/getSession.ts @@ -0,0 +1,41 @@ +import { cache } from 'react'; +import { cookies } from 'next/headers'; + +import { type Session, type User } from 'lucia'; + +import { lucia } from './lucia'; + +export const getSession = cache( + async (): Promise< + { user: User; session: Session } | { user: null; session: null } + > => { + const sessionId = cookies().get(lucia.sessionCookieName)?.value ?? null; + if (!sessionId) { + return { + user: null, + session: null, + }; + } + + const result = await lucia.validateSession(sessionId); + try { + if (result.session && result.session.fresh) { + const sessionCookie = lucia.createSessionCookie(result.session.id); + cookies().set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes, + ); + } + if (!result.session) { + const sessionCookie = lucia.createBlankSessionCookie(); + cookies().set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes, + ); + } + } catch {} + return result; + }, +); diff --git a/packages/auth/src/index.ts b/packages/auth/src/index.ts new file mode 100644 index 00000000..27168101 --- /dev/null +++ b/packages/auth/src/index.ts @@ -0,0 +1,2 @@ +export * from './lucia'; +export * from './getSession'; diff --git a/packages/auth/src/lucia.ts b/packages/auth/src/lucia.ts new file mode 100644 index 00000000..2907ef2a --- /dev/null +++ b/packages/auth/src/lucia.ts @@ -0,0 +1,33 @@ +import { DrizzlePostgreSQLAdapter } from '@lucia-auth/adapter-drizzle'; +import { Lucia } from 'lucia'; + +import { db } from '@orbitkit/db'; +import { sessionTable, userTable } from '@orbitkit/db/schema'; + +import { env } from './env.js'; + +const adapter = new DrizzlePostgreSQLAdapter(db, sessionTable, userTable); + +export const lucia = new Lucia(adapter, { + sessionCookie: { + attributes: { + secure: env.NODE_ENV === 'production', + }, + }, + getUserAttributes: (attributes) => { + return { + githubId: attributes.github_id, + username: attributes.username, + }; + }, +}); + +declare module 'lucia' { + interface Register { + Lucia: typeof lucia; + DatabaseUserAttributes: { + github_id: string; + username: string; + }; + } +} diff --git a/packages/auth/src/providers/github.ts b/packages/auth/src/providers/github.ts new file mode 100644 index 00000000..bce955f5 --- /dev/null +++ b/packages/auth/src/providers/github.ts @@ -0,0 +1,109 @@ +import { cookies } from 'next/headers'; + +import { generateState, GitHub, OAuth2RequestError } from 'arctic'; +import { generateId } from 'lucia'; + +import { db } from '@orbitkit/db'; +import { userTable } from '@orbitkit/db/schema'; + +import { env } from '../env.js'; +import { lucia } from '../lucia'; + +export const github = new GitHub( + env.GITHUB_CLIENT_ID, + env.GITHUB_CLIENT_SECRET, +); + +export async function createGithubAuthorizationURL(): Promise { + const state = generateState(); + const url = await github.createAuthorizationURL(state); + + cookies().set('github_oauth_state', state, { + path: '/', + secure: env.NODE_ENV === 'production', + httpOnly: true, + maxAge: 60 * 10, + sameSite: 'lax', + }); + + return Response.redirect(url); +} + +interface GitHubUser { + id: string; + login: string; +} + +export async function validateGithubCallback( + request: Request, +): Promise { + const url = new URL(request.url); + const code = url.searchParams.get('code'); + const state = url.searchParams.get('state'); + const storedState = cookies().get('github_oauth_state')?.value ?? null; + if (!code || !state || !storedState || state !== storedState) { + return new Response(null, { + status: 400, + }); + } + + try { + const tokens = await github.validateAuthorizationCode(code); + const githubUserResponse = await fetch('https://api.github.com/user', { + headers: { + Authorization: `Bearer ${tokens.accessToken}`, + }, + }); + const githubUser = (await githubUserResponse.json()) as GitHubUser; + const existingUser = await db.query.userTable.findFirst({ + where: (table, { eq }) => eq(table.github_id, githubUser.id), + }); + + if (existingUser) { + const session = await lucia.createSession(existingUser.id, {}); + const sessionCookie = lucia.createSessionCookie(session.id); + cookies().set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes, + ); + return new Response(null, { + status: 302, + headers: { + Location: '/', + }, + }); + } + + const userId = generateId(15); + await db.insert(userTable).values({ + id: userId, + github_id: githubUser.id, + username: githubUser.login, + }); + const session = await lucia.createSession(userId, {}); + const sessionCookie = lucia.createSessionCookie(session.id); + cookies().set( + sessionCookie.name, + sessionCookie.value, + sessionCookie.attributes, + ); + return new Response(null, { + status: 302, + headers: { + Location: '/', + }, + }); + } catch (e) { + // the specific error message depends on the provider + if (e instanceof OAuth2RequestError) { + // invalid code + return new Response(null, { + status: 400, + }); + } + return new Response(null, { + status: 500, + }); + } +} diff --git a/packages/auth/tsconfig.json b/packages/auth/tsconfig.json new file mode 100644 index 00000000..6810c735 --- /dev/null +++ b/packages/auth/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": ["@orbitkit/tsconfig/base.json"], + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ESNext"], + }, + "include": ["**/*.ts", "**/*.mjs", "**/*.js", "**/*.cjs", ".eslintrc.cjs"], +} diff --git a/packages/config/eslint/base.js b/packages/config/eslint/base.js index 157fccc0..a50fb8bf 100644 --- a/packages/config/eslint/base.js +++ b/packages/config/eslint/base.js @@ -33,7 +33,6 @@ const config = { readonly: 'array-simple', }, ], - '@typescript-eslint/consistent-type-definitions': ['error', 'type'], '@typescript-eslint/consistent-type-imports': [ 'warn', { diff --git a/packages/config/tailwind/package.json b/packages/config/tailwind/package.json index 9b6d4acf..7eee782f 100644 --- a/packages/config/tailwind/package.json +++ b/packages/config/tailwind/package.json @@ -26,7 +26,7 @@ }, "devDependencies": { "@orbitkit/tsconfig": "workspace:^", - "@types/node": "^20.11.7", + "@types/node": "^20.11.10", "eslint-config-orbitkit": "workspace:^" }, "volta": { diff --git a/packages/db/drizzle/0001_absurd_mockingbird.sql b/packages/db/drizzle/0001_absurd_mockingbird.sql new file mode 100644 index 00000000..a171df4f --- /dev/null +++ b/packages/db/drizzle/0001_absurd_mockingbird.sql @@ -0,0 +1,3 @@ +ALTER TABLE "user" ADD COLUMN "github_id" text;--> statement-breakpoint +ALTER TABLE "user" ADD COLUMN "username" text;--> statement-breakpoint +ALTER TABLE "user" ADD CONSTRAINT "user_github_id_unique" UNIQUE("github_id"); \ No newline at end of file diff --git a/packages/db/drizzle/meta/0001_snapshot.json b/packages/db/drizzle/meta/0001_snapshot.json new file mode 100644 index 00000000..75d3afa6 --- /dev/null +++ b/packages/db/drizzle/meta/0001_snapshot.json @@ -0,0 +1,93 @@ +{ + "id": "9af7639c-b652-49bd-beab-6680b109bf85", + "prevId": "53aefb64-3f60-400a-87ef-485bddb3be55", + "version": "5", + "dialect": "pg", + "tables": { + "user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "github_id": { + "name": "github_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_github_id_unique": { + "name": "user_github_id_unique", + "nullsNotDistinct": false, + "columns": [ + "github_id" + ] + } + } + }, + "session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json index a52aa403..edeaccf4 100644 --- a/packages/db/drizzle/meta/_journal.json +++ b/packages/db/drizzle/meta/_journal.json @@ -8,6 +8,13 @@ "when": 1706041191201, "tag": "0000_married_arachne", "breakpoints": true + }, + { + "idx": 1, + "version": "5", + "when": 1706606795479, + "tag": "0001_absurd_mockingbird", + "breakpoints": true } ] } \ No newline at end of file diff --git a/packages/db/package.json b/packages/db/package.json index b969ecf8..b751f002 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -5,11 +5,12 @@ "description": "A database package utilizing drizzle orm.", "license": "MIT", "author": "OrbitKit", + "sideEffects": false, "type": "module", "exports": { ".": "./src/index.ts", "./schema": "./src/schema/index.ts", - "./env": "./src/env.mjs" + "./env": "./src/env.js" }, "scripts": { "db:check": "dotenv -e ../../apps/web/.env.local drizzle-kit check:pg", diff --git a/packages/db/src/env.mjs b/packages/db/src/env.js similarity index 76% rename from packages/db/src/env.mjs rename to packages/db/src/env.js index bec27063..92102ca0 100644 --- a/packages/db/src/env.mjs +++ b/packages/db/src/env.js @@ -5,9 +5,11 @@ import { z } from 'zod'; export const env = createEnv({ extends: [vercel], server: { + NODE_ENV: z.enum(['development', 'production', 'test']).optional(), DATABASE_URL: z.string().url().startsWith('postgres'), }, runtimeEnv: { + NODE_ENV: process.env['NODE_ENV'], DATABASE_URL: process.env['DATABASE_URL'], }, emptyStringAsUndefined: true, diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index 4464d8ee..3da2ef9b 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -1,9 +1,12 @@ import { neon } from '@neondatabase/serverless'; import { drizzle } from 'drizzle-orm/neon-http'; -import { env } from './env.mjs'; +import { env } from './env.js'; import * as schema from './schema'; const sql = neon(env.DATABASE_URL); -export const db = drizzle(sql, { schema }); +export const db = drizzle(sql, { + schema, + logger: env.NODE_ENV === 'development', +}); diff --git a/packages/db/src/schema/user.ts b/packages/db/src/schema/user.ts index 5f313bc9..a53edda4 100644 --- a/packages/db/src/schema/user.ts +++ b/packages/db/src/schema/user.ts @@ -2,4 +2,6 @@ import { pgTable, text } from 'drizzle-orm/pg-core'; export const userTable = pgTable('user', { id: text('id').primaryKey(), + github_id: text('github_id').unique(), + username: text('username'), }); diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json index 7ff20844..19240cb9 100644 --- a/packages/db/tsconfig.json +++ b/packages/db/tsconfig.json @@ -1,4 +1,4 @@ { "extends": ["@orbitkit/tsconfig/base.json"], - "include": ["**/*.ts", ".eslintrc.cjs"], + "include": ["**/*.ts", ".eslintrc.cjs", "**/*.mjs"], } diff --git a/packages/ui/package.json b/packages/ui/package.json index 52f7be57..1c7e5453 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -61,7 +61,7 @@ "devDependencies": { "@orbitkit/tailwind": "workspace:^", "@orbitkit/tsconfig": "workspace:^", - "@types/node": "^20.11.7", + "@types/node": "^20.11.10", "@types/react": "^18.2.48", "@types/react-dom": "^18.2.18", "autoprefixer": "^10.4.17", diff --git a/packages/ui/src/avatar.tsx b/packages/ui/src/avatar.tsx index deb6bd4b..cbcd5958 100644 --- a/packages/ui/src/avatar.tsx +++ b/packages/ui/src/avatar.tsx @@ -2,9 +2,10 @@ import * as React from 'react'; -import { cn } from '@/utils/cn'; import * as AvatarPrimitive from '@radix-ui/react-avatar'; +import { cn } from '@/utils/cn'; + const Avatar = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8e74767..6ac75dfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@commitlint/cli': specifier: ^18.6.0 - version: 18.6.0(@types/node@20.11.7)(typescript@5.3.3) + version: 18.6.0(@types/node@20.11.10)(typescript@5.3.3) '@commitlint/config-conventional': specifier: ^18.6.0 version: 18.6.0 @@ -19,7 +19,7 @@ importers: version: 18.4.4 '@commitlint/prompt-cli': specifier: ^18.6.0 - version: 18.6.0(@types/node@20.11.7)(typescript@5.3.3) + version: 18.6.0(@types/node@20.11.10)(typescript@5.3.3) '@ianvs/prettier-plugin-sort-imports': specifier: ^4.1.1 version: 4.1.1(prettier@3.2.4) @@ -48,8 +48,8 @@ importers: specifier: ^0.33.0 version: 0.33.0 markdownlint-cli: - specifier: ^0.38.0 - version: 0.38.0 + specifier: ^0.39.0 + version: 0.39.0 prettier: specifier: ^3.2.4 version: 3.2.4 @@ -77,6 +77,9 @@ importers: apps/web: dependencies: + '@orbitkit/auth': + specifier: workspace:^ + version: link:../../packages/auth '@orbitkit/db': specifier: workspace:^ version: link:../../packages/db @@ -112,8 +115,8 @@ importers: specifier: workspace:^ version: link:../../packages/config/tsconfig '@types/node': - specifier: ^20.11.7 - version: 20.11.7 + specifier: ^20.11.10 + version: 20.11.10 '@types/react': specifier: ^18.2.48 version: 18.2.48 @@ -133,6 +136,55 @@ importers: specifier: ^3.4.1 version: 3.4.1 + packages/auth: + dependencies: + '@lucia-auth/adapter-drizzle': + specifier: ^1.0.0 + version: 1.0.0(lucia@3.0.1) + '@orbitkit/db': + specifier: workspace:^ + version: link:../db + '@t3-oss/env-core': + specifier: ^0.8.0 + version: 0.8.0(typescript@5.3.3)(zod@3.22.4) + '@types/react-dom': + specifier: ^18.2.18 + version: 18.2.18 + arctic: + specifier: ^1.1.0 + version: 1.1.0 + lucia: + specifier: ^3.0.1 + version: 3.0.1 + next: + specifier: 14.1.0 + version: 14.1.0(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0) + oslo: + specifier: ^1.0.3 + version: 1.0.3 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + zod: + specifier: ^3.22.4 + version: 3.22.4 + devDependencies: + '@orbitkit/tsconfig': + specifier: workspace:^ + version: link:../config/tsconfig + '@types/node': + specifier: ^20.11.10 + version: 20.11.10 + '@types/react': + specifier: ^18.2.48 + version: 18.2.48 + eslint-config-orbitkit: + specifier: workspace:^ + version: link:../config/eslint + packages/config/eslint: devDependencies: '@orbitkit/tsconfig': @@ -197,8 +249,8 @@ importers: specifier: workspace:^ version: link:../tsconfig '@types/node': - specifier: ^20.11.7 - version: 20.11.7 + specifier: ^20.11.10 + version: 20.11.10 eslint-config-orbitkit: specifier: workspace:^ version: link:../eslint @@ -270,8 +322,8 @@ importers: specifier: workspace:^ version: link:../config/tsconfig '@types/node': - specifier: ^20.11.7 - version: 20.11.7 + specifier: ^20.11.10 + version: 20.11.10 '@types/react': specifier: ^18.2.48 version: 18.2.48 @@ -491,14 +543,14 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@commitlint/cli@18.6.0(@types/node@20.11.7)(typescript@5.3.3): + /@commitlint/cli@18.6.0(@types/node@20.11.10)(typescript@5.3.3): resolution: {integrity: sha512-FiH23cr9QG8VdfbmvJJZmdfHGVMCouOOAzoXZ3Cd7czGC52RbycwNt8YCI7SA69pAl+t30vh8LMaO/N+kcel6w==} engines: {node: '>=v18'} hasBin: true dependencies: '@commitlint/format': 18.6.0 '@commitlint/lint': 18.6.0 - '@commitlint/load': 18.6.0(@types/node@20.11.7)(typescript@5.3.3) + '@commitlint/load': 18.6.0(@types/node@20.11.10)(typescript@5.3.3) '@commitlint/read': 18.6.0 '@commitlint/types': 18.6.0 execa: 5.1.1 @@ -578,7 +630,7 @@ packages: '@commitlint/types': 18.6.0 dev: true - /@commitlint/load@18.6.0(@types/node@20.11.7)(typescript@5.3.3): + /@commitlint/load@18.6.0(@types/node@20.11.10)(typescript@5.3.3): resolution: {integrity: sha512-RRssj7TmzT0bowoEKlgwg8uQ7ORXWkw7lYLsZZBMi9aInsJuGNLNWcMxJxRZbwxG3jkCidGUg85WmqJvRjsaDA==} engines: {node: '>=v18'} dependencies: @@ -588,7 +640,7 @@ packages: '@commitlint/types': 18.6.0 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.3.3) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.7)(cosmiconfig@8.3.6)(typescript@5.3.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.11.10)(cosmiconfig@8.3.6)(typescript@5.3.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -612,12 +664,12 @@ packages: conventional-commits-parser: 5.0.0 dev: true - /@commitlint/prompt-cli@18.6.0(@types/node@20.11.7)(typescript@5.3.3): + /@commitlint/prompt-cli@18.6.0(@types/node@20.11.10)(typescript@5.3.3): resolution: {integrity: sha512-N+a8cdk0Y72TKV3nHO5Rkqd7+9gh6xwlPry7CzGdOIy7VQ4AuxeuIT1bYKDlWN00aacbcyOTEOVCsg6tw5zexQ==} engines: {node: '>=v18'} hasBin: true dependencies: - '@commitlint/prompt': 18.6.0(@types/node@20.11.7)(typescript@5.3.3) + '@commitlint/prompt': 18.6.0(@types/node@20.11.10)(typescript@5.3.3) execa: 5.1.1 inquirer: 6.5.2 transitivePeerDependencies: @@ -625,12 +677,12 @@ packages: - typescript dev: true - /@commitlint/prompt@18.6.0(@types/node@20.11.7)(typescript@5.3.3): + /@commitlint/prompt@18.6.0(@types/node@20.11.10)(typescript@5.3.3): resolution: {integrity: sha512-fFeUKQryczq55VG0t7o6GEIvbPNQGDhtWnBTB65SJ4KgozSmTOE1Ns9jQsOnzfq6V3rr9ln+4NCskmDf/hcFBg==} engines: {node: '>=v18'} dependencies: '@commitlint/ensure': 18.6.0 - '@commitlint/load': 18.6.0(@types/node@20.11.7)(typescript@5.3.3) + '@commitlint/load': 18.6.0(@types/node@20.11.10)(typescript@5.3.3) '@commitlint/types': 18.6.0 chalk: 4.1.2 inquirer: 6.5.2 @@ -990,6 +1042,22 @@ packages: superjson: 2.2.1 dev: true + /@emnapi/core@0.45.0: + resolution: {integrity: sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@emnapi/runtime@0.45.0: + resolution: {integrity: sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + /@esbuild-kit/core-utils@3.3.2: resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} dependencies: @@ -1502,49 +1570,486 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@lucia-auth/adapter-drizzle@1.0.0(lucia@3.0.1): + resolution: {integrity: sha512-3NJbAgEcgFn1bJ+s/XVBdatnQZCtSjKJ880H25SVB9X+V2jhYfsSu/mcW3PSis5bLial188Pd4oNTTHonh+6vg==} + peerDependencies: + lucia: 3.x + dependencies: + lucia: 3.0.1 + dev: false + + /@napi-rs/wasm-runtime@0.1.1: + resolution: {integrity: sha512-ATj9ua659JgrkICjJscaeZdmPr44cb/KFjNWuD0N6pux0SpzaM7+iOuuK11mAnQM2N9q0DT4REu6NkL8ZEhopw==} + requiresBuild: true + dependencies: + '@emnapi/core': 0.45.0 + '@emnapi/runtime': 0.45.0 + '@tybys/wasm-util': 0.8.1 + dev: false + optional: true + + /@neondatabase/serverless@0.7.2: + resolution: {integrity: sha512-wU3WA2uTyNO7wjPs3Mg0G01jztAxUxzd9/mskMmtPwPTjf7JKWi9AW5/puOGXLxmZ9PVgRFeBVRVYq5nBPhsCg==} + dependencies: + '@types/pg': 8.6.6 + dev: false + + /@next/env@14.1.0: + resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} + dev: false + + /@next/eslint-plugin-next@14.1.0: + resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} + dependencies: + glob: 10.3.10 + dev: true + + /@next/swc-darwin-arm64@14.1.0: + resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@14.1.0: + resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@14.1.0: + resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@14.1.0: + resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@14.1.0: + resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@14.1.0: + resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@14.1.0: + resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@14.1.0: + resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@14.1.0: + resolution: {integrity: sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: false + + /@node-rs/argon2-android-arm-eabi@1.7.0: + resolution: {integrity: sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-android-arm-eabi@1.7.2: + resolution: {integrity: sha512-WhW84XOzdR4AOGc4BJvIg5lCRVBL0pXp/PPCe8QCyWw493p7VdNCdYpr2xdtjS/0zImmY85HNB/6zpzjLRTT/A==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-android-arm64@1.7.0: + resolution: {integrity: sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-android-arm64@1.7.2: + resolution: {integrity: sha512-CdtayHSMIyDuVhSYFirwA757c4foQuyTjpysgFJLHweP9C7uDiBf9WBYij+UyabpaCadJ0wPyK6Vakinvlk4/g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-darwin-arm64@1.7.0: + resolution: {integrity: sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-darwin-arm64@1.7.2: + resolution: {integrity: sha512-hUOhtgYHTEyzX5sgMZVdXunONOus2HWpWydF5D/RYJ1mZ76FXRnFpQE40DqbzisdPIraKdn40m7JqkPP7wqdyg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-darwin-x64@1.7.0: + resolution: {integrity: sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-darwin-x64@1.7.2: + resolution: {integrity: sha512-lfs5HX+t542yUfcv6Aa/NeGD1nUCwyQNgnPEGcik71Ow6V13hkR1bHgmT1u3CHN4fBts0gW+DQEDsq1xlVgkvw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-freebsd-x64@1.7.0: + resolution: {integrity: sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-freebsd-x64@1.7.2: + resolution: {integrity: sha512-ROoF+4VaCBJUjddrTN1hjuqSl89ppRcjVXJscSPJjWzTlbzFmGGovJvIzUBmCr/Oq3yM1zKHj6MP9oRD5cB+/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm-gnueabihf@1.7.0: + resolution: {integrity: sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm-gnueabihf@1.7.2: + resolution: {integrity: sha512-CBSB8KPI8LS74Bcz3dYaa2/khULutz4vSDvFWUERlSLX+mPdDhoZi6UPuUPPF9e01w8AbiK1YCqlLUTm3tIMfw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm64-gnu@1.7.0: + resolution: {integrity: sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm64-gnu@1.7.2: + resolution: {integrity: sha512-6LBTug6ZiWFakP3X3Nqs7ZTM03gmcSWX4YvEn20HhhQE5NDrsrw3zNqGj0cJiNzKKIMSDDuj7uGy+ITEfNo4CA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm64-musl@1.7.0: + resolution: {integrity: sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-arm64-musl@1.7.2: + resolution: {integrity: sha512-KjhQ+ZPne29t9VRVeIif7JdKwQba+tM6CBNYBoJB1iON0CUKeqSQtZcHuTj9gkf2SNRG5bsU4ABcfxd0OKsKHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-x64-gnu@1.7.0: + resolution: {integrity: sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-x64-gnu@1.7.2: + resolution: {integrity: sha512-BQvp+iLtKqomHz4q5t1aKoni9osgvUDU5sZtHAlFm5dRTlGHnympcQVATRE5GHyH9C6MIM9W7P1kqEeCLGPolQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-x64-musl@1.7.0: + resolution: {integrity: sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-linux-x64-musl@1.7.2: + resolution: {integrity: sha512-yXJudpBZQ98g+lWaHn9EzZ5KsAyqRdlpub/K+5NP7gHehb8wzBRIFAejIHAG0fvzQEEc86VOnV2koWIVZxWAvw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-wasm32-wasi@1.7.0: + resolution: {integrity: sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/core': 0.45.0 + '@emnapi/runtime': 0.45.0 + '@tybys/wasm-util': 0.8.1 + memfs-browser: 3.5.10302 + dev: false + optional: true + + /@node-rs/argon2-wasm32-wasi@1.7.2: + resolution: {integrity: sha512-diXlVjJZY2GIV8ZDwUqXPhacXsFR0klGSv5D9f+XidwWXK4udtzDhkM/7N/Mb7h1HAWaxZ6IN9spYFjvWH1wqg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@napi-rs/wasm-runtime': 0.1.1 + dev: false + optional: true + + /@node-rs/argon2-win32-arm64-msvc@1.7.0: + resolution: {integrity: sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-win32-arm64-msvc@1.7.2: + resolution: {integrity: sha512-dhIBrY04P9nbmwzBpgERQDmmSu4YBZyeEE32t4TikMz5rQ07iaVC+JpGmtCBZoDIsLDHGC8cikENd3YEqpqIcA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-win32-ia32-msvc@1.7.0: + resolution: {integrity: sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-win32-ia32-msvc@1.7.2: + resolution: {integrity: sha512-o1tfqr8gyALCzuxBoQfvhxkeYMaw/0H8Gmt7klTYyEIBvEFu7SD5qytXO9Px7t5420nZL/Wy5cflg3IB1s57Pg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/argon2-win32-x64-msvc@1.7.0: + resolution: {integrity: sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + /@node-rs/argon2-win32-x64-msvc@1.7.2: + resolution: {integrity: sha512-v0h53XUc7hNgWiWi0qcMcHvj9/kwuItI9NwLK4C+gtzT3UB0cedhfIL8HFMKThMXasy41ZdbpCF2Bi0kJoLNEg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + /@node-rs/argon2@1.7.0: + resolution: {integrity: sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog==} + engines: {node: '>= 10'} + optionalDependencies: + '@node-rs/argon2-android-arm-eabi': 1.7.0 + '@node-rs/argon2-android-arm64': 1.7.0 + '@node-rs/argon2-darwin-arm64': 1.7.0 + '@node-rs/argon2-darwin-x64': 1.7.0 + '@node-rs/argon2-freebsd-x64': 1.7.0 + '@node-rs/argon2-linux-arm-gnueabihf': 1.7.0 + '@node-rs/argon2-linux-arm64-gnu': 1.7.0 + '@node-rs/argon2-linux-arm64-musl': 1.7.0 + '@node-rs/argon2-linux-x64-gnu': 1.7.0 + '@node-rs/argon2-linux-x64-musl': 1.7.0 + '@node-rs/argon2-wasm32-wasi': 1.7.0 + '@node-rs/argon2-win32-arm64-msvc': 1.7.0 + '@node-rs/argon2-win32-ia32-msvc': 1.7.0 + '@node-rs/argon2-win32-x64-msvc': 1.7.0 + dev: false - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@node-rs/argon2@1.7.2: + resolution: {integrity: sha512-+H6pc3M1vIX9YnG59YW7prHhhpv19P8YyxlXHnnFzTimf2q+kKDF7mGWbhvN9STqIY+P70Patn0Q6qb6Ib5/4g==} + engines: {node: '>= 10'} + optionalDependencies: + '@node-rs/argon2-android-arm-eabi': 1.7.2 + '@node-rs/argon2-android-arm64': 1.7.2 + '@node-rs/argon2-darwin-arm64': 1.7.2 + '@node-rs/argon2-darwin-x64': 1.7.2 + '@node-rs/argon2-freebsd-x64': 1.7.2 + '@node-rs/argon2-linux-arm-gnueabihf': 1.7.2 + '@node-rs/argon2-linux-arm64-gnu': 1.7.2 + '@node-rs/argon2-linux-arm64-musl': 1.7.2 + '@node-rs/argon2-linux-x64-gnu': 1.7.2 + '@node-rs/argon2-linux-x64-musl': 1.7.2 + '@node-rs/argon2-wasm32-wasi': 1.7.2 + '@node-rs/argon2-win32-arm64-msvc': 1.7.2 + '@node-rs/argon2-win32-ia32-msvc': 1.7.2 + '@node-rs/argon2-win32-x64-msvc': 1.7.2 + dev: false - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + /@node-rs/bcrypt-android-arm-eabi@1.9.0: + resolution: {integrity: sha512-nOCFISGtnodGHNiLrG0WYLWr81qQzZKYfmwHc7muUeq+KY0sQXyHOwZk9OuNQAWv/lnntmtbwkwT0QNEmOyLvA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true - /@neondatabase/serverless@0.7.2: - resolution: {integrity: sha512-wU3WA2uTyNO7wjPs3Mg0G01jztAxUxzd9/mskMmtPwPTjf7JKWi9AW5/puOGXLxmZ9PVgRFeBVRVYq5nBPhsCg==} - dependencies: - '@types/pg': 8.6.6 + /@node-rs/bcrypt-android-arm-eabi@1.9.2: + resolution: {integrity: sha512-er/Q2khwpan9pczvTTqY/DJE4UU65u31xd0NkZlHUTKyB7djRhWfzoGexGx2GN+k831/RR3U8kKE/8QUHeO3hQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true dev: false + optional: true - /@next/env@14.1.0: - resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} + /@node-rs/bcrypt-android-arm64@1.9.0: + resolution: {integrity: sha512-+ZrIAtigVmjYkqZQTThHVlz0+TG6D+GDHWhVKvR2DifjtqJ0i+mb9gjo++hN+fWEQdWNGxKCiBBjwgT4EcXd6A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true dev: false + optional: true - /@next/eslint-plugin-next@14.1.0: - resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} - dependencies: - glob: 10.3.10 - dev: true + /@node-rs/bcrypt-android-arm64@1.9.2: + resolution: {integrity: sha512-OUYatOEG5vbLbF73q2TC8UqrDO81zUQxnaFD/OAB1hcm6J+ur0zJ8E53c35/DIqkTp7JarPMraC4rouJ2ugN4w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true - /@next/swc-darwin-arm64@14.1.0: - resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} + /@node-rs/bcrypt-darwin-arm64@1.9.0: + resolution: {integrity: sha512-CQiS+F9Pa0XozvkXR1g7uXE9QvBOPOplDg0iCCPRYTN9PqA5qYxhwe48G3o+v2UeQceNRrbnEtWuANm7JRqIhw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1552,8 +2057,17 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@14.1.0: - resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} + /@node-rs/bcrypt-darwin-arm64@1.9.2: + resolution: {integrity: sha512-svJKsGbzMAxOB5oluOYneN4YkKUy26WSMgm3KOIhgoX30IeMilj+2jFN/5qrI0oDZ0Iczb3XyL5DuZFtEkdP8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-darwin-x64@1.9.0: + resolution: {integrity: sha512-4pTKGawYd7sNEjdJ7R/R67uwQH1VvwPZ0SSUMmeNHbxD5QlwAPXdDH11q22uzVXsvNFZ6nGQBg8No5OUGpx6Ug==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1561,8 +2075,53 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@14.1.0: - resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} + /@node-rs/bcrypt-darwin-x64@1.9.2: + resolution: {integrity: sha512-9OrySjBi/rWix8NZWD/TrNbNcwMY0pAiMHdL09aJnJ07uPih83GGh1pq4UHCYFCMy7iTX8swOmDlGBUImkOZbg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-freebsd-x64@1.9.0: + resolution: {integrity: sha512-UmWzySX4BJhT/B8xmTru6iFif3h0Rpx3TqxRLCcbgmH43r7k5/9QuhpiyzpvKGpKHJCFNm4F3rC2wghvw5FCIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-freebsd-x64@1.9.2: + resolution: {integrity: sha512-/djXV71RO6g5L1mI2pVvmp3x3pH7G4uKI3ODG1JBIXoz334oOcCMh40sB0uq0ljP8WEadker01p4T1rJE98fpg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-arm-gnueabihf@1.9.0: + resolution: {integrity: sha512-8qoX4PgBND2cVwsbajoAWo3NwdfJPEXgpCsZQZURz42oMjbGyhhSYbovBCskGU3EBLoC8RA2B1jFWooeYVn5BA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-arm-gnueabihf@1.9.2: + resolution: {integrity: sha512-F7wP950OTAooxEleUN4I2hqryGZK7hi1cSgRF13Wvbc597RFux35KiSxIXUA3mNt2DE7lV2PeceEtCOScaThWQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-arm64-gnu@1.9.0: + resolution: {integrity: sha512-TuAC6kx0SbcIA4mSEWPi+OCcDjTQUMl213v5gMNlttF+D4ieIZx6pPDGTaMO6M2PDHTeCG0CBzZl0Lu+9b0c7Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1570,8 +2129,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@14.1.0: - resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} + /@node-rs/bcrypt-linux-arm64-gnu@1.9.2: + resolution: {integrity: sha512-MehG+yQ0TgKMgKR1rO4hdvHkVsTM91Cof8qI9EJlS5+7+QSwfFA5O0zGwCkISD7bsyauJ5uJgcByGjpEobAHOg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1579,8 +2138,26 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@14.1.0: - resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} + /@node-rs/bcrypt-linux-arm64-musl@1.9.0: + resolution: {integrity: sha512-/sIvKDABOI8QOEnLD7hIj02BVaNOuCIWBKvxcJOt8+TuwJ6zmY1UI5kSv9d99WbiHjTp97wtAUbZQwauU4b9ew==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-arm64-musl@1.9.2: + resolution: {integrity: sha512-PRZTAJjOwKEGsIhmBvfNh81So+wGl4QyCFAt23j+KwBujLStjC0N3YaqtTlWVKG9tcriPtmMYiAQtXWIyIgg/w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-x64-gnu@1.9.0: + resolution: {integrity: sha512-DyyhDHDsLBsCKz1tZ1hLvUZSc1DK0FU0v52jK6IBQxrj24WscSU9zZe7ie/V9kdmA4Ep57BfpWX8Dsa2JxGdgQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1588,8 +2165,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@14.1.0: - resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} + /@node-rs/bcrypt-linux-x64-gnu@1.9.2: + resolution: {integrity: sha512-5WfGO+O1m7nJ55WZ8XDq+ItA98Z4O7sNWsR+1nIj9YGT+Tx5zkQ2RBhpK6oCWZMluuZ0eKQ0FDmyP6K+2NDRIA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1597,8 +2174,49 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@14.1.0: - resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} + /@node-rs/bcrypt-linux-x64-musl@1.9.0: + resolution: {integrity: sha512-duIiuqQ+Lew8ASSAYm6ZRqcmfBGWwsi81XLUwz86a2HR7Qv6V4yc3ZAUQovAikhjCsIqe8C11JlAZSK6+PlXYg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-linux-x64-musl@1.9.2: + resolution: {integrity: sha512-VjCn0388p6PMCVUYHgYmHZrKNc7WwNJRr2WLJsHbQRGDOKbpNL6YolCjQxUchcSPDhzwrq1cIdy4j0fpoXEsdw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-wasm32-wasi@1.9.0: + resolution: {integrity: sha512-ylaGmn9Wjwv/D5lxtawttx3H6Uu2WTTR7lWlRHGT6Ga/MB1Vj4OjSGUW8G8zIVnKuXpGbZ92pgHlt4HUpSLctw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/core': 0.45.0 + '@emnapi/runtime': 0.45.0 + '@tybys/wasm-util': 0.8.1 + memfs-browser: 3.5.10302 + dev: false + optional: true + + /@node-rs/bcrypt-wasm32-wasi@1.9.2: + resolution: {integrity: sha512-P06aHfMzm9makwU+nM7WA65yQnS1xuqJ8l/6I/LvXjnl+lfB3DtJ2B0CSLtjnUGpUgcHbWl5gEbNnTPxSAirjQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@napi-rs/wasm-runtime': 0.1.1 + dev: false + optional: true + + /@node-rs/bcrypt-win32-arm64-msvc@1.9.0: + resolution: {integrity: sha512-2h86gF7QFyEzODuDFml/Dp1MSJoZjxJ4yyT2Erf4NkwsiA5MqowUhUsorRwZhX6+2CtlGa7orbwi13AKMsYndw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1606,8 +2224,17 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@14.1.0: - resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} + /@node-rs/bcrypt-win32-arm64-msvc@1.9.2: + resolution: {integrity: sha512-Iyo/Q5/eNw27VRd3mLBgh1b9b5fnT3QHTVwxv3Siv/MRAIfJXH/cTOe18qSwYQzNh0ZioW4yemFPYCWSZi7szA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-win32-ia32-msvc@1.9.0: + resolution: {integrity: sha512-kqxalCvhs4FkN0+gWWfa4Bdy2NQAkfiqq/CEf6mNXC13RSV673Ev9V8sRlQyNpCHCNkeXfOT9pgoBdJmMs9muA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1615,8 +2242,17 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@14.1.0: - resolution: {integrity: sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==} + /@node-rs/bcrypt-win32-ia32-msvc@1.9.2: + resolution: {integrity: sha512-6LHWMaPylyyHoS5863YpxAACVB8DWCxro5W6pQ4h8WKSgHpJp8Um9jphTdN0A2w45HZjUnfcFuiFFC+TbftjCw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt-win32-x64-msvc@1.9.0: + resolution: {integrity: sha512-2y0Tuo6ZAT2Cz8V7DHulSlv1Bip3zbzeXyeur+uR25IRNYXKvI/P99Zl85Fbuu/zzYAZRLLlGTRe6/9IHofe/w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1624,9 +2260,53 @@ packages: dev: false optional: true - /@noble/hashes@1.3.3: - resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} - engines: {node: '>= 16'} + /@node-rs/bcrypt-win32-x64-msvc@1.9.2: + resolution: {integrity: sha512-vZ9T1MOaYkLO9FTyl28YX0SYJneiYTKNFgM8PUv8nas8xrD+7OzokA0fEtlNp6413T7IKSD/iG9qi8nTWsiyGg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@node-rs/bcrypt@1.9.0: + resolution: {integrity: sha512-u2OlIxW264bFUfvbFqDz9HZKFjwe8FHFtn7T/U8mYjPZ7DWYpbUB+/dkW/QgYfMSfR0ejkyuWaBBe0coW7/7ig==} + engines: {node: '>= 10'} + optionalDependencies: + '@node-rs/bcrypt-android-arm-eabi': 1.9.0 + '@node-rs/bcrypt-android-arm64': 1.9.0 + '@node-rs/bcrypt-darwin-arm64': 1.9.0 + '@node-rs/bcrypt-darwin-x64': 1.9.0 + '@node-rs/bcrypt-freebsd-x64': 1.9.0 + '@node-rs/bcrypt-linux-arm-gnueabihf': 1.9.0 + '@node-rs/bcrypt-linux-arm64-gnu': 1.9.0 + '@node-rs/bcrypt-linux-arm64-musl': 1.9.0 + '@node-rs/bcrypt-linux-x64-gnu': 1.9.0 + '@node-rs/bcrypt-linux-x64-musl': 1.9.0 + '@node-rs/bcrypt-wasm32-wasi': 1.9.0 + '@node-rs/bcrypt-win32-arm64-msvc': 1.9.0 + '@node-rs/bcrypt-win32-ia32-msvc': 1.9.0 + '@node-rs/bcrypt-win32-x64-msvc': 1.9.0 + dev: false + + /@node-rs/bcrypt@1.9.2: + resolution: {integrity: sha512-FKUo9iCSIti+ldwoOlY1ztyIFhZxEgT7jZ/UCt/9bg1rLmNdbQQD2JKIMImDCqmTWuLPY4ZF4Q5MyOMIfDCd8Q==} + engines: {node: '>= 10'} + optionalDependencies: + '@node-rs/bcrypt-android-arm-eabi': 1.9.2 + '@node-rs/bcrypt-android-arm64': 1.9.2 + '@node-rs/bcrypt-darwin-arm64': 1.9.2 + '@node-rs/bcrypt-darwin-x64': 1.9.2 + '@node-rs/bcrypt-freebsd-x64': 1.9.2 + '@node-rs/bcrypt-linux-arm-gnueabihf': 1.9.2 + '@node-rs/bcrypt-linux-arm64-gnu': 1.9.2 + '@node-rs/bcrypt-linux-arm64-musl': 1.9.2 + '@node-rs/bcrypt-linux-x64-gnu': 1.9.2 + '@node-rs/bcrypt-linux-x64-musl': 1.9.2 + '@node-rs/bcrypt-wasm32-wasi': 1.9.2 + '@node-rs/bcrypt-win32-arm64-msvc': 1.9.2 + '@node-rs/bcrypt-win32-ia32-msvc': 1.9.2 + '@node-rs/bcrypt-win32-x64-msvc': 1.9.2 dev: false /@nodelib/fs.scandir@2.1.5: @@ -2023,6 +2703,14 @@ packages: tailwindcss: 3.4.1 dev: false + /@tybys/wasm-util@0.8.1: + resolution: {integrity: sha512-GSsTwyBl4pIzsxAY5wroZdyQKyhXk0d8PCRZtrSZ2WEB1cBdrp2EgGBwHOGCZtIIPun/DL3+AykCv+J6fyRH4Q==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + /@types/debug@4.1.12: resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: @@ -2062,8 +2750,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/node@20.11.7: - resolution: {integrity: sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==} + /@types/node@20.11.10: + resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==} dependencies: undici-types: 5.26.5 @@ -2074,7 +2762,7 @@ packages: /@types/pg@8.6.6: resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 20.11.7 + '@types/node': 20.11.10 pg-protocol: 1.6.0 pg-types: 2.2.0 dev: false @@ -2337,6 +3025,12 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 + /arctic@1.1.0: + resolution: {integrity: sha512-O2Mcoq991UMI2KCb2zuw7jWfCYCfMu4aveXVDUmfro3MAeq0gMCk7qTl4Y5WB0YXs21xgQFMsh2gs6WBlorAyQ==} + dependencies: + oslo: 1.0.1 + dev: false + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -2827,7 +3521,7 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.7)(cosmiconfig@8.3.6)(typescript@5.3.3): + /cosmiconfig-typescript-loader@5.0.0(@types/node@20.11.10)(cosmiconfig@8.3.6)(typescript@5.3.3): resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} engines: {node: '>=v16'} peerDependencies: @@ -2835,7 +3529,7 @@ packages: cosmiconfig: '>=8.2' typescript: '>=4' dependencies: - '@types/node': 20.11.7 + '@types/node': 20.11.10 cosmiconfig: 8.3.6(typescript@5.3.3) jiti: 1.21.0 typescript: 5.3.3 @@ -3294,11 +3988,6 @@ packages: tapable: 2.2.1 dev: true - /entities@3.0.1: - resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} - engines: {node: '>=0.12'} - dev: true - /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3998,6 +4687,12 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + requiresBuild: true + dev: false + optional: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -4718,8 +5413,8 @@ packages: engines: {node: '>=6'} hasBin: true - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true /jsonparse@1.3.1: @@ -4778,12 +5473,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /linkify-it@4.0.1: - resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} - dependencies: - uc.micro: 1.0.6 - dev: true - /linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} dependencies: @@ -4911,8 +5600,8 @@ packages: dependencies: js-tokens: 4.0.0 - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} /lru-cache@5.1.1: @@ -4933,6 +5622,12 @@ packages: es5-ext: 0.10.62 dev: true + /lucia@3.0.1: + resolution: {integrity: sha512-srwUkTCGgr6N4mFpaKZVZy5kwiRZdsrbIDv9Wrjar+xyw1MjojYQQ7oRbegjRWOZ3yI8xOOclK3sz/rga2J7/w==} + dependencies: + oslo: 1.0.1 + dev: false + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -4943,17 +5638,6 @@ packages: engines: {node: '>=8'} dev: true - /markdown-it@13.0.2: - resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} - hasBin: true - dependencies: - argparse: 2.0.1 - entities: 3.0.1 - linkify-it: 4.0.1 - mdurl: 1.0.1 - uc.micro: 1.0.6 - dev: true - /markdown-it@14.0.0: resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} hasBin: true @@ -4966,8 +5650,8 @@ packages: uc.micro: 2.0.0 dev: true - /markdownlint-cli@0.38.0: - resolution: {integrity: sha512-qkZRKJ4LVq6CJIkRIuJsEHvhWhm+FP0E7yhHvOMrrgdykgFWNYD4wuhZTjvigbJLTKPooP79yPiUDDZBCBI5JA==} + /markdownlint-cli@0.39.0: + resolution: {integrity: sha512-ZuFN7Xpsbn1Nbp0YYkeLOfXOMOfLQBik2lKRy8pVI/llmKQ2uW7x+8k5OMgF6o7XCsTDSYC/OOmeJ+3qplvnJQ==} engines: {node: '>=18'} hasBin: true dependencies: @@ -4976,30 +5660,17 @@ packages: glob: 10.3.10 ignore: 5.3.0 js-yaml: 4.1.0 - jsonc-parser: 3.2.0 - markdownlint: 0.32.1 + jsonc-parser: 3.2.1 + markdownlint: 0.33.0 minimatch: 9.0.3 run-con: 1.3.2 dev: true - /markdownlint-micromark@0.1.7: - resolution: {integrity: sha512-BbRPTC72fl5vlSKv37v/xIENSRDYL/7X/XoFzZ740FGEbs9vZerLrIkFRY0rv7slQKxDczToYuMmqQFN61fi4Q==} - engines: {node: '>=16'} - dev: true - /markdownlint-micromark@0.1.8: resolution: {integrity: sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==} engines: {node: '>=16'} dev: true - /markdownlint@0.32.1: - resolution: {integrity: sha512-3sx9xpi4xlHlokGyHO9k0g3gJbNY4DI6oNEeEYq5gQ4W7UkiJ90VDAnuDl2U+yyXOUa6BX+0gf69ZlTUGIBp6A==} - engines: {node: '>=18'} - dependencies: - markdown-it: 13.0.2 - markdownlint-micromark: 0.1.7 - dev: true - /markdownlint@0.33.0: resolution: {integrity: sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==} engines: {node: '>=18'} @@ -5033,14 +5704,27 @@ packages: '@types/mdast': 4.0.3 dev: true - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - dev: true - /mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} dev: true + /memfs-browser@3.5.10302: + resolution: {integrity: sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw==} + requiresBuild: true + dependencies: + memfs: 3.5.3 + dev: false + optional: true + + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + requiresBuild: true + dependencies: + fs-monkey: 1.0.5 + dev: false + optional: true + /memoizee@0.4.15: resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} dependencies: @@ -5575,6 +6259,20 @@ packages: engines: {node: '>=0.10.0'} dev: true + /oslo@1.0.1: + resolution: {integrity: sha512-esfzZry+HfGgK/GCYkg7BRlLd3RH5aHa08wgLJPYjENXybi0BvXxGk0LbUj+lXfz2TkjPDHe4rB/o6JxRLHxBg==} + dependencies: + '@node-rs/argon2': 1.7.2 + '@node-rs/bcrypt': 1.9.2 + dev: false + + /oslo@1.0.3: + resolution: {integrity: sha512-k3XTmHGqr++d5UsekRDRVY18riITJWerX2aNRg5pqCR8XsFpbGG7g81bbjm/5Cr113QoTkn/W7Vrc25PB0LSPA==} + dependencies: + '@node-rs/argon2': 1.7.0 + '@node-rs/bcrypt': 1.9.0 + dev: false + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5662,7 +6360,7 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.1.0 + lru-cache: 10.2.0 minipass: 7.0.4 /path-type@4.0.0: @@ -7005,10 +7703,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - /uc.micro@1.0.6: - resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - dev: true - /uc.micro@2.0.0: resolution: {integrity: sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==} dev: true diff --git a/prettier.config.js b/prettier.config.js index 0d1d27a5..b74ace8f 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -12,19 +12,22 @@ const config = { 'prettier-plugin-jsdoc', ], importOrder: [ - '^react$', '', - '', + '^react$', + '^next(-[^/]+)?(/.*)?$', '', '', '^[.]', '', + '', + '', '', '', - '^(@orbitkit/)(/.*)$', - '^(@/)(/.*)$', + '^@orbitkit/(.*)$', + '', + '^@/(.*)$', '', - '^[.]', + '^[./]', '', '^(?!.*[.]css$)[./].*$', '.css$',