diff --git a/packages/backend/package.json b/packages/backend/package.json index e96d0f8ad..93a22bee9 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -42,6 +42,8 @@ ], "peerDependencies": { "@nestjs/apollo": "^12", + "@nestjs/common": "^10.3.10", + "@nestjs/core": "^10.3.10", "@nestjs/graphql": "^12", "@react-email/components": "^0.0.21", "class-validator": "^0.14.1", @@ -49,9 +51,7 @@ "drizzle-orm": "0.31.4", "react": "^19.0.0-rc.0", "react-dom": "^19.0.0-rc.0", - "typescript": "^5.5.3", - "@nestjs/core": "^10.3.10", - "@nestjs/common": "^10.3.10" + "typescript": "^5.5.3" }, "dependencies": { "@apollo/server": "^4.10.4", @@ -64,7 +64,6 @@ "@react-email/render": "^0.0.16", "@swc/cli": "^0.4.0", "@swc/core": "^1.6.13", - "bcrypt": "^5.1.1", "busboy": "^1.6.0", "cookie-parser": "^1.4.6", "helmet": "^7.1.0", @@ -77,11 +76,10 @@ "vitnode-shared": "workspace:*" }, "devDependencies": { - "@nestjs/graphql": "^12.2.0", "@nestjs/common": "^10.3.10", "@nestjs/core": "^10.3.10", + "@nestjs/graphql": "^12.2.0", "@react-email/components": "^0.0.21", - "@types/bcrypt": "^5.0.2", "@types/busboy": "^1.5.4", "@types/cookie-parser": "^1.4.7", "@types/express": "^4.17.21", @@ -91,12 +89,12 @@ "@types/object-path": "^0.11.4", "@types/pg": "^8.11.6", "@types/react": "^18.3.3", - "class-validator": "^0.14.1", "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", "concurrently": "^8.2.2", + "dotenv": "^16.4.5", "drizzle-kit": "^0.22.8", "drizzle-orm": "^0.31.4", - "dotenv": "^16.4.5", "eslint-config-typescript-vitnode": "workspace:*", "express": "^4.19.2", "graphql": "^16.9.0", diff --git a/packages/backend/src/app.module.ts b/packages/backend/src/app.module.ts index 3226e55bf..2c4d448aa 100644 --- a/packages/backend/src/app.module.ts +++ b/packages/backend/src/app.module.ts @@ -119,8 +119,6 @@ const config = () => { login_token_secret: process.env.LOGIN_TOKEN_SECRET ?? '', frontend_url: frontend_url.url, port: parseInt(process.env.PORT, 10) || 8080, - password_salt: 10, - password_reset_salt: 9, cookies: { domain: frontend_url.hostname === 'localhost' diff --git a/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts b/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts index dd4f3aa71..cb4c4d6f1 100644 --- a/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts +++ b/packages/backend/src/core/members/reset_password/change_password/change_password.service.ts @@ -1,12 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; import { eq } from 'drizzle-orm'; import { ChangePasswordCoreMembersArgs } from './dto/change_password.args'; import { DatabaseService } from '@/utils/database/database.service'; import { User } from '@/decorators'; -import { encryptPassword } from '@/core/sessions/encrypt_password'; +import { encryptPassword } from '@/core/sessions/password'; import { core_users, core_users_pass_reset, @@ -14,10 +13,7 @@ import { @Injectable() export class ChangePasswordCoreMembersService { - constructor( - private readonly databaseService: DatabaseService, - private readonly configService: ConfigService, - ) {} + constructor(private readonly databaseService: DatabaseService) {} async change_password({ hashKey, @@ -29,7 +25,7 @@ export class ChangePasswordCoreMembersService { }); const id = keyData.user_id; - const hashPassword = await encryptPassword(this.configService, password); + const hashPassword = await encryptPassword(password); const update = await this.databaseService.db .update(core_users) diff --git a/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts b/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts index b9143459a..2fd69b29c 100644 --- a/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts +++ b/packages/backend/src/core/members/reset_password/create_key/create_key.service.ts @@ -1,14 +1,12 @@ import { Inject, Injectable } from '@nestjs/common'; -import { genSalt, hash } from 'bcrypt'; -import { generateRandomString } from 'vitnode-shared'; -import { ConfigService } from '@nestjs/config'; +// import { generateRandomString } from 'vitnode-shared'; import { CreateKeyResetPasswordCoreMembersArgs } from './dto/create_key.args'; import { ContentCreateKeyEmail } from './_email/content'; import { DatabaseService } from '@/utils/database/database.service'; import { NotFoundError } from '@/errors'; -import { core_users_pass_reset } from '@/plugins/core/admin/database/schema/users'; +// import { core_users_pass_reset } from '@/plugins/core/admin/database/schema/users'; import { SendAdminEmailService } from '../../../admin/email/send/send.service'; import { EmailHelpersServiceType, getTranslationForEmail } from '@/providers'; @@ -16,7 +14,6 @@ import { EmailHelpersServiceType, getTranslationForEmail } from '@/providers'; export class CreateKeyResetPasswordCoreMembersService { constructor( private readonly databaseService: DatabaseService, - private readonly configService: ConfigService, private readonly mailService: SendAdminEmailService, @Inject('EmailHelpersService') private readonly emailHelpersService: EmailHelpersServiceType, @@ -33,16 +30,16 @@ export class CreateKeyResetPasswordCoreMembersService { throw new NotFoundError('User'); } - const key = generateRandomString(32); - const keySalt = await genSalt( - this.configService.getOrThrow('password_reset_salt'), - ); - const hashKey = await hash(key, keySalt); - await this.databaseService.db.insert(core_users_pass_reset).values({ - user_id: user.id, - key: hashKey, - expires: new Date(Date.now() + 1000 * 60 * 60), // 1 hour - }); + // const key = generateRandomString(32); + // const keySalt = await genSalt( + // this.configService.getOrThrow('password_reset_salt'), + // ); + // const hashKey = await hash(key, keySalt); + // await this.databaseService.db.insert(core_users_pass_reset).values({ + // user_id: user.id, + // key: hashKey, + // expires: new Date(Date.now() + 1000 * 60 * 60), // 1 hour + // }); const t = getTranslationForEmail('core.reset_password', user.language); @@ -52,7 +49,7 @@ export class CreateKeyResetPasswordCoreMembersService { message: ContentCreateKeyEmail({ language: user.language, helpers: this.emailHelpersService.getHelpersForEmail(), - key: hashKey, + key: '', }), preview_text: t('preview_text'), user, diff --git a/packages/backend/src/core/sessions/encrypt_password.ts b/packages/backend/src/core/sessions/encrypt_password.ts deleted file mode 100644 index e0b8c472d..000000000 --- a/packages/backend/src/core/sessions/encrypt_password.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ConfigService } from '@nestjs/config'; -import { genSalt, hash } from 'bcrypt'; - -async function encryptPassword( - configService: ConfigService, - password: string, -): Promise { - const passwordSalt = await genSalt(configService.getOrThrow('password_salt')); - const hashPassword = await hash(password, passwordSalt); - - return hashPassword; -} - -export { encryptPassword }; diff --git a/packages/backend/src/core/sessions/password.ts b/packages/backend/src/core/sessions/password.ts new file mode 100644 index 000000000..10efff113 --- /dev/null +++ b/packages/backend/src/core/sessions/password.ts @@ -0,0 +1,28 @@ +import crypto from 'crypto'; + +async function encryptPassword(password: string): Promise { + return new Promise((resolve, reject) => { + const salt = crypto.randomBytes(8).toString('hex'); + + crypto.scrypt(password, salt, 64, (err, derivedKey) => { + if (err) reject(err); + + resolve(salt + ':' + derivedKey.toString('hex')); + }); + }); +} + +async function verifyPassword( + password: string, + hash: string, +): Promise { + return new Promise((resolve, reject) => { + const [salt, key] = hash.split(':'); + crypto.scrypt(password, salt, 64, (err, derivedKey) => { + if (err) reject(err); + resolve(key == derivedKey.toString('hex')); + }); + }); +} + +export { encryptPassword, verifyPassword }; diff --git a/packages/backend/src/core/sessions/sign_in/sign_in.service.ts b/packages/backend/src/core/sessions/sign_in/sign_in.service.ts index ada6e2d54..f004d1123 100644 --- a/packages/backend/src/core/sessions/sign_in/sign_in.service.ts +++ b/packages/backend/src/core/sessions/sign_in/sign_in.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; -import { compare } from 'bcrypt'; import { JwtService } from '@nestjs/jwt'; import { ConfigService } from '@nestjs/config'; import { and, eq } from 'drizzle-orm'; import { SignInCoreSessionsArgs } from './dto/sign_in.args'; import { DeviceSignInCoreSessionsService } from './device.service'; +import { verifyPassword } from '../password'; import { GqlContext } from '../../../utils'; import { DatabaseService } from '@/utils/database/database.service'; @@ -182,7 +182,7 @@ export class SignInCoreSessionsService { }); if (!user) throw new AccessDeniedError(); - const validPassword = await compare(password, user.password); + const validPassword = await verifyPassword(password, user.password); if (!validPassword) throw new AccessDeniedError(); // If admin mode is enabled, check if user has access to admin cp diff --git a/packages/backend/src/core/sessions/sign_up/sign_up.service.ts b/packages/backend/src/core/sessions/sign_up/sign_up.service.ts index 94b1b4e2c..6bbf4edac 100644 --- a/packages/backend/src/core/sessions/sign_up/sign_up.service.ts +++ b/packages/backend/src/core/sessions/sign_up/sign_up.service.ts @@ -6,7 +6,7 @@ import { removeSpecialCharacters } from 'vitnode-shared'; import { SignUpCoreSessionsArgs } from './dto/sign_up.args'; import { SignUpCoreSessionsObj } from './dto/sign_up.obj'; import { AvatarColorService } from './helpers/avatar-color.service'; -import { encryptPassword } from '../encrypt_password'; +import { encryptPassword } from '../password'; import { CaptchaCoreCaptchaSecurityService } from '@/core/admin/security/captcha/captcha.service'; import { DatabaseService } from '@/utils/database/database.service'; @@ -83,7 +83,7 @@ export class SignUpCoreSessionsService extends AvatarColorService { }); } - const hashPassword = await encryptPassword(this.configService, password); + const hashPassword = await encryptPassword(password); const user = await this.databaseService.db .insert(core_users) diff --git a/packages/frontend/src/components/ui/form.tsx b/packages/frontend/src/components/ui/form.tsx index 0d347bdb7..b92063f44 100644 --- a/packages/frontend/src/components/ui/form.tsx +++ b/packages/frontend/src/components/ui/form.tsx @@ -13,8 +13,8 @@ import { useFormContext, } from 'react-hook-form'; import { useTranslations } from 'next-intl'; -import { useBeforeUnload } from '@/helpers/use-before-unload'; +import { useBeforeUnload } from '@/helpers/use-before-unload'; import { Label } from './label'; import { useDialog } from './dialog'; diff --git a/packages/frontend/src/hooks/core/sign/up/use-sign-up-view.ts b/packages/frontend/src/hooks/core/sign/up/use-sign-up-view.ts index f0019ec91..ada4772ed 100644 --- a/packages/frontend/src/hooks/core/sign/up/use-sign-up-view.ts +++ b/packages/frontend/src/hooks/core/sign/up/use-sign-up-view.ts @@ -81,6 +81,8 @@ export const useSignUpView = () => { } catch (err) { const error = err as ErrorType | undefined; + console.log('error', error); + if (error?.extensions) { const { code } = error.extensions; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e0ac0e7a..c67d6433e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,9 +312,6 @@ importers: '@swc/core': specifier: ^1.6.13 version: 1.7.0(@swc/helpers@0.5.12) - bcrypt: - specifier: ^5.1.1 - version: 5.1.1 busboy: specifier: ^1.6.0 version: 1.6.0 @@ -358,9 +355,6 @@ importers: '@react-email/components': specifier: ^0.0.21 version: 0.0.21(@types/react@18.3.3)(react-dom@19.0.0-rc-fb9a90fa48-20240614(react@19.0.0-rc-fb9a90fa48-20240614))(react@19.0.0-rc-fb9a90fa48-20240614) - '@types/bcrypt': - specifier: ^5.0.2 - version: 5.0.2 '@types/busboy': specifier: ^1.5.4 version: 1.5.4 @@ -429,7 +423,7 @@ importers: version: 10.9.2(@swc/core@1.7.0(@swc/helpers@0.5.12))(@types/node@20.14.11)(typescript@5.5.3) tsup: specifier: ^8.1.0 - version: 8.2.0(@swc/core@1.7.0)(jiti@1.21.6)(postcss@8.4.39)(typescript@5.5.3)(yaml@2.4.5) + version: 8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.12))(jiti@1.21.6)(postcss@8.4.39)(typescript@5.5.3)(yaml@2.4.5) typescript: specifier: ^5.5.3 version: 5.5.3 @@ -2278,10 +2272,6 @@ packages: resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} - '@mapbox/node-pre-gyp@1.0.11': - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} - hasBin: true - '@mdx-js/mdx@3.0.1': resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} @@ -3889,9 +3879,6 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/bcrypt@5.0.2': - resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} - '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -4229,9 +4216,6 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4259,10 +4243,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - agent-base@7.1.1: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} @@ -4332,17 +4312,9 @@ packages: append-field@1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} - aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -4501,10 +4473,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - bcrypt@5.1.1: - resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} - engines: {node: '>= 10.0.0'} - bin-check@4.1.0: resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} engines: {node: '>=4'} @@ -4658,10 +4626,6 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -4775,10 +4739,6 @@ packages: color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} @@ -4845,9 +4805,6 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} - console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} @@ -5046,9 +5003,6 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -5764,10 +5718,6 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - fs-monkey@1.0.6: resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} @@ -5809,11 +5759,6 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - deprecated: This package is no longer supported. - geist@1.3.1: resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} peerDependencies: @@ -5983,9 +5928,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -6053,10 +5995,6 @@ packages: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - https-proxy-agent@7.0.5: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} @@ -6806,10 +6744,6 @@ packages: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -7087,22 +7021,10 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - minizlib@3.0.1: resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} engines: {node: '>= 18'} @@ -7111,11 +7033,6 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} @@ -7233,9 +7150,6 @@ packages: node-addon-api@3.2.1: resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - node-addon-api@5.1.0: - resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} - node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} @@ -7262,11 +7176,6 @@ packages: resolution: {integrity: sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==} engines: {node: '>=6.0.0'} - nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -7300,10 +7209,6 @@ packages: resolution: {integrity: sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - deprecated: This package is no longer supported. - nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -8576,10 +8481,6 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - tar@7.4.0: resolution: {integrity: sha512-XQs0S8fuAkQWuqhDeCdMlJXDX80D7EOVLDPVFkna9yQfzS+PHKgfxcei0jf6/+QAWcjqrnC8uM3fSAnrQl+XYg==} engines: {node: '>=18'} @@ -9101,9 +9002,6 @@ packages: engines: {node: '>= 8'} hasBin: true - wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -9185,9 +9083,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} @@ -10944,21 +10839,6 @@ snapshots: '@lukeed/csprng@1.1.0': {} - '@mapbox/node-pre-gyp@1.0.11': - dependencies: - detect-libc: 2.0.3 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.7.0 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.6.3 - tar: 6.2.1 - transitivePeerDependencies: - - encoding - - supports-color - '@mdx-js/mdx@3.0.1': dependencies: '@types/estree': 1.0.5 @@ -12560,10 +12440,6 @@ snapshots: dependencies: '@babel/types': 7.24.9 - '@types/bcrypt@5.0.2': - dependencies: - '@types/node': 20.14.11 - '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 @@ -13005,8 +12881,6 @@ snapshots: '@xtuc/long@4.2.2': {} - abbrev@1.1.1: {} - abbrev@2.0.0: {} accepts@1.3.8: @@ -13028,12 +12902,6 @@ snapshots: acorn@8.12.1: {} - agent-base@6.0.2: - dependencies: - debug: 4.3.5 - transitivePeerDependencies: - - supports-color - agent-base@7.1.1: dependencies: debug: 4.3.5 @@ -13098,15 +12966,8 @@ snapshots: append-field@1.0.0: {} - aproba@2.0.0: {} - arch@2.2.0: {} - are-we-there-yet@2.0.0: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - arg@4.1.3: {} arg@5.0.2: {} @@ -13342,14 +13203,6 @@ snapshots: base64-js@1.5.1: {} - bcrypt@5.1.1: - dependencies: - '@mapbox/node-pre-gyp': 1.0.11 - node-addon-api: 5.1.0 - transitivePeerDependencies: - - encoding - - supports-color - bin-check@4.1.0: dependencies: execa: 0.7.0 @@ -13549,8 +13402,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chownr@2.0.0: {} - chownr@3.0.0: {} chrome-trace-event@1.0.4: {} @@ -13655,8 +13506,6 @@ snapshots: color-name: 1.1.4 simple-swizzle: 0.2.2 - color-support@1.1.3: {} - color@4.2.3: dependencies: color-convert: 2.0.1 @@ -13722,8 +13571,6 @@ snapshots: consola@3.2.3: {} - console-control-strings@1.1.0: {} - constant-case@3.0.4: dependencies: no-case: 3.0.4 @@ -13933,8 +13780,6 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: {} - depd@2.0.0: {} dependency-graph@0.11.0: {} @@ -14836,10 +14681,6 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - fs-monkey@1.0.6: {} fs.realpath@1.0.0: {} @@ -14921,18 +14762,6 @@ snapshots: functions-have-names@1.2.3: {} - gauge@3.0.2: - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - geist@1.3.1(next@14.2.5(react-dom@19.0.0-rc-fb9a90fa48-20240614(react@19.0.0-rc-fb9a90fa48-20240614))(react@19.0.0-rc-fb9a90fa48-20240614)): dependencies: next: 14.2.5(react-dom@19.0.0-rc-fb9a90fa48-20240614(react@19.0.0-rc-fb9a90fa48-20240614))(react@19.0.0-rc-fb9a90fa48-20240614) @@ -15125,8 +14954,6 @@ snapshots: dependencies: has-symbols: 1.0.3 - has-unicode@2.0.1: {} - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -15250,13 +15077,6 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.3.5 - transitivePeerDependencies: - - supports-color - https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 @@ -16171,10 +15991,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - make-dir@4.0.0: dependencies: semver: 7.6.3 @@ -16697,19 +16513,8 @@ snapshots: minimist@1.2.8: {} - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - minipass@7.1.2: {} - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - minizlib@3.0.1: dependencies: minipass: 7.1.2 @@ -16719,8 +16524,6 @@ snapshots: dependencies: minimist: 1.2.8 - mkdirp@1.0.4: {} - mkdirp@3.0.1: {} ms@2.0.0: {} @@ -16848,8 +16651,6 @@ snapshots: node-addon-api@3.2.1: optional: true - node-addon-api@5.1.0: {} - node-emoji@1.11.0: dependencies: lodash: 4.17.21 @@ -16867,10 +16668,6 @@ snapshots: nodemailer@6.9.14: {} - nopt@5.0.0: - dependencies: - abbrev: 1.1.1 - nopt@7.2.1: dependencies: abbrev: 2.0.0 @@ -16895,13 +16692,6 @@ snapshots: npm-to-yarn@2.2.1: {} - npmlog@5.0.1: - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - nprogress@0.2.0: {} nullthrows@1.1.1: {} @@ -18254,15 +18044,6 @@ snapshots: tapable@2.2.1: {} - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - tar@7.4.0: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -18431,6 +18212,33 @@ snapshots: tslib@2.6.3: {} + tsup@8.2.0(@swc/core@1.7.0(@swc/helpers@0.5.12))(jiti@1.21.6)(postcss@8.4.39)(typescript@5.5.3)(yaml@2.4.5): + dependencies: + bundle-require: 5.0.0(esbuild@0.23.0) + cac: 6.7.14 + chokidar: 3.6.0 + consola: 3.2.3 + debug: 4.3.5 + esbuild: 0.23.0 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.39)(yaml@2.4.5) + resolve-from: 5.0.0 + rollup: 4.18.1 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + optionalDependencies: + '@swc/core': 1.7.0(@swc/helpers@0.5.12) + postcss: 8.4.39 + typescript: 5.5.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + tsup@8.2.0(@swc/core@1.7.0)(jiti@1.21.6)(postcss@8.4.39)(typescript@5.5.3)(yaml@2.4.5): dependencies: bundle-require: 5.0.0(esbuild@0.23.0) @@ -18834,10 +18642,6 @@ snapshots: dependencies: isexe: 2.0.0 - wide-align@1.1.5: - dependencies: - string-width: 4.2.3 - word-wrap@1.2.5: {} wrap-ansi@6.2.0: @@ -18886,8 +18690,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} - yallist@5.0.0: {} yaml-ast-parser@0.0.43: {}