feat: update server login feature (#3004)

Co-authored-by: LongYinan <lynweklm@gmail.com>
This commit is contained in:
Alex Yang 2023-07-05 11:13:20 +08:00 committed by GitHub
parent 9cd1f013f8
commit 3084c427f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 127 additions and 305 deletions

View File

@ -1,2 +1,2 @@
SECRET_KEY="secret"
DATABASE_URL="postgresql://affine@localhost:5432/affine" DATABASE_URL="postgresql://affine@localhost:5432/affine"
NEXTAUTH_URL="http://localhost:8080"

View File

@ -27,6 +27,7 @@
"@node-rs/crc32": "^1.7.0", "@node-rs/crc32": "^1.7.0",
"@node-rs/jsonwebtoken": "^0.2.0", "@node-rs/jsonwebtoken": "^0.2.0",
"@prisma/client": "^4.16.2", "@prisma/client": "^4.16.2",
"cookie-parser": "^1.4.6",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"express": "^4.18.2", "express": "^4.18.2",
"graphql": "^16.7.1", "graphql": "^16.7.1",
@ -34,6 +35,7 @@
"graphql-upload": "^16.0.2", "graphql-upload": "^16.0.2",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"next-auth": "^4.22.1", "next-auth": "^4.22.1",
"nodemailer": "^6.9.3",
"parse-duration": "^1.1.0", "parse-duration": "^1.1.0",
"prisma": "^4.16.2", "prisma": "^4.16.2",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
@ -43,9 +45,11 @@
"@affine/storage": "workspace:*", "@affine/storage": "workspace:*",
"@napi-rs/image": "^1.6.1", "@napi-rs/image": "^1.6.1",
"@nestjs/testing": "^10.0.4", "@nestjs/testing": "^10.0.4",
"@types/cookie-parser": "^1.4.3",
"@types/express": "^4.17.17", "@types/express": "^4.17.17",
"@types/lodash-es": "^4.17.7", "@types/lodash-es": "^4.17.7",
"@types/node": "^18.16.19", "@types/node": "^18.16.19",
"@types/nodemailer": "^6.4.8",
"@types/supertest": "^2.0.12", "@types/supertest": "^2.0.12",
"c8": "^8.0.0", "c8": "^8.0.0",
"nodemon": "^2.0.22", "nodemon": "^2.0.22",

View File

@ -233,5 +233,11 @@ export interface AFFiNEConfig {
} }
> >
>; >;
email: {
server: string;
port: number;
sender: string;
password: string;
};
}; };
} }

View File

@ -65,6 +65,10 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
OAUTH_GOOGLE_CLIENT_SECRET: 'auth.oauthProviders.google.clientSecret', OAUTH_GOOGLE_CLIENT_SECRET: 'auth.oauthProviders.google.clientSecret',
OAUTH_GITHUB_CLIENT_ID: 'auth.oauthProviders.github.clientId', OAUTH_GITHUB_CLIENT_ID: 'auth.oauthProviders.github.clientId',
OAUTH_GITHUB_CLIENT_SECRET: 'auth.oauthProviders.github.clientSecret', OAUTH_GITHUB_CLIENT_SECRET: 'auth.oauthProviders.github.clientSecret',
OAUTH_EMAIL_SENDER: 'auth.email.sender',
OAUTH_EMAIL_SERVER: 'auth.email.server',
OAUTH_EMAIL_PORT: 'auth.email.port',
OAUTH_EMAIL_PASSWORD: 'auth.email.password',
} satisfies AFFiNEConfig['ENV_MAP'], } satisfies AFFiNEConfig['ENV_MAP'],
env: process.env.NODE_ENV ?? 'development', env: process.env.NODE_ENV ?? 'development',
get prod() { get prod() {
@ -102,7 +106,6 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
}, },
introspection: true, introspection: true,
playground: true, playground: true,
debug: true,
}, },
auth: { auth: {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@ -114,8 +117,16 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
publicKey: jwtKeyPair.publicKey, publicKey: jwtKeyPair.publicKey,
enableSignup: true, enableSignup: true,
enableOauth: false, enableOauth: false,
nextAuthSecret: '', get nextAuthSecret() {
return this.privateKey;
},
oauthProviders: {}, oauthProviders: {},
email: {
server: 'smtp.gmail.com',
port: 465,
sender: '',
password: '',
},
}, },
objectStorage: { objectStorage: {
r2: { r2: {
@ -129,7 +140,7 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
path: join(homedir(), '.affine-storage'), path: join(homedir(), '.affine-storage'),
}, },
}, },
} as const; } satisfies AFFiNEConfig;
applyEnvToConfig(defaultConfig); applyEnvToConfig(defaultConfig);

View File

@ -1,6 +1,7 @@
/// <reference types="./global.d.ts" /> /// <reference types="./global.d.ts" />
import { NestFactory } from '@nestjs/core'; import { NestFactory } from '@nestjs/core';
import type { NestExpressApplication } from '@nestjs/platform-express'; import type { NestExpressApplication } from '@nestjs/platform-express';
import cookieParser from 'cookie-parser';
import { static as staticMiddleware } from 'express'; import { static as staticMiddleware } from 'express';
// @ts-expect-error graphql-upload is not typed // @ts-expect-error graphql-upload is not typed
import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.mjs'; import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.mjs';
@ -27,6 +28,8 @@ app.use(
}) })
); );
app.use(cookieParser());
const config = app.get(Config); const config = app.get(Config);
const host = config.host ?? 'localhost'; const host = config.host ?? 'localhost';

View File

@ -2,11 +2,10 @@ import { randomUUID } from 'node:crypto';
import { PrismaAdapter } from '@auth/prisma-adapter'; import { PrismaAdapter } from '@auth/prisma-adapter';
import { import {
All,
BadRequestException, BadRequestException,
Controller, Controller,
Get,
Next, Next,
Post,
Query, Query,
Req, Req,
Res, Res,
@ -15,6 +14,7 @@ import { Algorithm, sign, verify as jwtVerify } from '@node-rs/jsonwebtoken';
import type { NextFunction, Request, Response } from 'express'; import type { NextFunction, Request, Response } from 'express';
import type { AuthAction, AuthOptions } from 'next-auth'; import type { AuthAction, AuthOptions } from 'next-auth';
import { AuthHandler } from 'next-auth/core'; import { AuthHandler } from 'next-auth/core';
import Email from 'next-auth/providers/email';
import Github from 'next-auth/providers/github'; import Github from 'next-auth/providers/github';
import Google from 'next-auth/providers/google'; import Google from 'next-auth/providers/google';
@ -29,15 +29,40 @@ export class NextAuthController {
private readonly nextAuthOptions: AuthOptions; private readonly nextAuthOptions: AuthOptions;
constructor(readonly config: Config, readonly prisma: PrismaService) { constructor(readonly config: Config, readonly prisma: PrismaService) {
const prismaAdapter = PrismaAdapter(prisma);
// createUser exists in the adapter
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const createUser = prismaAdapter.createUser!.bind(prismaAdapter);
prismaAdapter.createUser = async data => {
if (data.email && !data.name) {
data.name = data.email.split('@')[0];
}
return createUser(data);
};
this.nextAuthOptions = { this.nextAuthOptions = {
providers: [], providers: [
// @ts-expect-error esm interop issue
Email.default({
server: {
host: config.auth.email.server,
port: config.auth.email.port,
auth: {
user: config.auth.email.sender,
pass: config.auth.email.password,
},
},
from: `AFFiNE <no-reply@toeverything.info>`,
}),
],
// @ts-expect-error Third part library type mismatch // @ts-expect-error Third part library type mismatch
adapter: PrismaAdapter(prisma), adapter: prismaAdapter,
debug: !config.prod,
}; };
if (config.auth.oauthProviders.github) { if (config.auth.oauthProviders.github) {
this.nextAuthOptions.providers.push( this.nextAuthOptions.providers.push(
Github({ // @ts-expect-error esm interop issue
Github.default({
clientId: config.auth.oauthProviders.github.clientId, clientId: config.auth.oauthProviders.github.clientId,
clientSecret: config.auth.oauthProviders.github.clientSecret, clientSecret: config.auth.oauthProviders.github.clientSecret,
}) })
@ -46,12 +71,14 @@ export class NextAuthController {
if (config.auth.oauthProviders.google) { if (config.auth.oauthProviders.google) {
this.nextAuthOptions.providers.push( this.nextAuthOptions.providers.push(
Google({ // @ts-expect-error esm interop issue
Google.default({
clientId: config.auth.oauthProviders.google.clientId, clientId: config.auth.oauthProviders.google.clientId,
clientSecret: config.auth.oauthProviders.google.clientSecret, clientSecret: config.auth.oauthProviders.google.clientSecret,
}) })
); );
} }
this.nextAuthOptions.jwt = { this.nextAuthOptions.jwt = {
encode: async ({ token, maxAge }) => { encode: async ({ token, maxAge }) => {
if (!token?.email) { if (!token?.email) {
@ -108,8 +135,7 @@ export class NextAuthController {
this.nextAuthOptions.secret ??= config.auth.nextAuthSecret; this.nextAuthOptions.secret ??= config.auth.nextAuthSecret;
} }
@Get() @All('*')
@Post()
async auth( async auth(
@Req() req: Request, @Req() req: Request,
@Res() res: Response, @Res() res: Response,

358
yarn.lock
View File

@ -419,11 +419,14 @@ __metadata:
"@node-rs/crc32": ^1.7.0 "@node-rs/crc32": ^1.7.0
"@node-rs/jsonwebtoken": ^0.2.0 "@node-rs/jsonwebtoken": ^0.2.0
"@prisma/client": ^4.16.2 "@prisma/client": ^4.16.2
"@types/cookie-parser": ^1.4.3
"@types/express": ^4.17.17 "@types/express": ^4.17.17
"@types/lodash-es": ^4.17.7 "@types/lodash-es": ^4.17.7
"@types/node": ^18.16.19 "@types/node": ^18.16.19
"@types/nodemailer": ^6.4.8
"@types/supertest": ^2.0.12 "@types/supertest": ^2.0.12
c8: ^8.0.0 c8: ^8.0.0
cookie-parser: ^1.4.6
dotenv: ^16.3.1 dotenv: ^16.3.1
express: ^4.18.2 express: ^4.18.2
graphql: ^16.7.1 graphql: ^16.7.1
@ -431,6 +434,7 @@ __metadata:
graphql-upload: ^16.0.2 graphql-upload: ^16.0.2
lodash-es: ^4.17.21 lodash-es: ^4.17.21
next-auth: ^4.22.1 next-auth: ^4.22.1
nodemailer: ^6.9.3
nodemon: ^2.0.22 nodemon: ^2.0.22
parse-duration: ^1.1.0 parse-duration: ^1.1.0
prisma: ^4.16.2 prisma: ^4.16.2
@ -732,16 +736,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@apollo/usage-reporting-protobuf@npm:^4.1.0": "@apollo/usage-reporting-protobuf@npm:^4.1.0, @apollo/usage-reporting-protobuf@npm:^4.1.1":
version: 4.1.0
resolution: "@apollo/usage-reporting-protobuf@npm:4.1.0"
dependencies:
"@apollo/protobufjs": 1.2.7
checksum: 442532d7077a728a499de6c2c2340d106b26f14695446361f947a14d3092e4109239a86cfb99e4bb795d913523c1f61a05bb799b45fc72615560693bbd62e645
languageName: node
linkType: hard
"@apollo/usage-reporting-protobuf@npm:^4.1.1":
version: 4.1.1 version: 4.1.1
resolution: "@apollo/usage-reporting-protobuf@npm:4.1.1" resolution: "@apollo/usage-reporting-protobuf@npm:4.1.1"
dependencies: dependencies:
@ -9444,17 +9439,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@smithy/protocol-http@npm:^1.0.1": "@smithy/protocol-http@npm:^1.0.1, @smithy/protocol-http@npm:^1.1.0":
version: 1.0.1
resolution: "@smithy/protocol-http@npm:1.0.1"
dependencies:
"@smithy/types": ^1.0.0
tslib: ^2.5.0
checksum: ba9ac4880fed48eeea0813663c94c765fe5b900f2fdac4f5de6524306bbc6645829f48bc175d202076b83acaccf008ed77f4b5546a4c180315f253e22fe6c89f
languageName: node
linkType: hard
"@smithy/protocol-http@npm:^1.1.0":
version: 1.1.0 version: 1.1.0
resolution: "@smithy/protocol-http@npm:1.1.0" resolution: "@smithy/protocol-http@npm:1.1.0"
dependencies: dependencies:
@ -9530,16 +9515,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@smithy/types@npm:^1.0.0": "@smithy/types@npm:^1.0.0, @smithy/types@npm:^1.1.0":
version: 1.0.0
resolution: "@smithy/types@npm:1.0.0"
dependencies:
tslib: ^2.5.0
checksum: ec05163564af050088f3c21cb047640ca842bea645c2a73624475b486d5df8ad9c494bf683a498f4b467b84fab2817cc199893dfb5cee30dce1e0172ab38db00
languageName: node
linkType: hard
"@smithy/types@npm:^1.1.0":
version: 1.1.0 version: 1.1.0
resolution: "@smithy/types@npm:1.1.0" resolution: "@smithy/types@npm:1.1.0"
dependencies: dependencies:
@ -10176,20 +10152,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/channel-postmessage@npm:7.0.23":
version: 7.0.23
resolution: "@storybook/channel-postmessage@npm:7.0.23"
dependencies:
"@storybook/channels": 7.0.23
"@storybook/client-logger": 7.0.23
"@storybook/core-events": 7.0.23
"@storybook/global": ^5.0.0
qs: ^6.10.0
telejson: ^7.0.3
checksum: 6ecac4b7e778b4e015e3b645ca02b072242b6bc7d1638646459bc7dd022a51c8bd1c4ab8c2b206e67c1dc53f4d74eccc61b7b2c782bb7cd41f5690c0dd55466a
languageName: node
linkType: hard
"@storybook/channel-postmessage@npm:7.0.24": "@storybook/channel-postmessage@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/channel-postmessage@npm:7.0.24" resolution: "@storybook/channel-postmessage@npm:7.0.24"
@ -10223,13 +10185,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/channels@npm:7.0.23":
version: 7.0.23
resolution: "@storybook/channels@npm:7.0.23"
checksum: 259074e34c8ed1052f790f7bafc7c2599a8e823fd9e8fc142c497f44bb3d08a415ee0974f02d971f4e2ca5a4d8e860675563352679cdd55bd1d4d37ee29fe038
languageName: node
linkType: hard
"@storybook/channels@npm:7.0.24": "@storybook/channels@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/channels@npm:7.0.24" resolution: "@storybook/channels@npm:7.0.24"
@ -10295,15 +10250,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/client-logger@npm:7.0.23":
version: 7.0.23
resolution: "@storybook/client-logger@npm:7.0.23"
dependencies:
"@storybook/global": ^5.0.0
checksum: ba63da80f0704bcaea55b43497880ff449b221ed2f799d2140d1d8e29b06533843619b902739ee432481af97d6566d5dcf4fbe25e54d721f07b6dc9ea4ad003d
languageName: node
linkType: hard
"@storybook/client-logger@npm:7.0.24": "@storybook/client-logger@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/client-logger@npm:7.0.24" resolution: "@storybook/client-logger@npm:7.0.24"
@ -10334,7 +10280,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/components@npm:7.0.24": "@storybook/components@npm:7.0.24, @storybook/components@npm:^7.0.0":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/components@npm:7.0.24" resolution: "@storybook/components@npm:7.0.24"
dependencies: dependencies:
@ -10353,25 +10299,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/components@npm:^7.0.0":
version: 7.0.23
resolution: "@storybook/components@npm:7.0.23"
dependencies:
"@storybook/client-logger": 7.0.23
"@storybook/csf": ^0.1.0
"@storybook/global": ^5.0.0
"@storybook/theming": 7.0.23
"@storybook/types": 7.0.23
memoizerific: ^1.11.3
use-resize-observer: ^9.1.0
util-deprecate: ^1.0.2
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
checksum: 8c9c42178b6c5c84d7b1ccdde4a6f9536e7c63b855b4a35eb993480a8709c0a7fff6b08229844a326fc29eff2fbfe1919a07f15c655410f6fdcfa495c0434a65
languageName: node
linkType: hard
"@storybook/core-client@npm:7.0.24": "@storybook/core-client@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/core-client@npm:7.0.24" resolution: "@storybook/core-client@npm:7.0.24"
@ -10382,7 +10309,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/core-common@npm:7.0.24": "@storybook/core-common@npm:7.0.24, @storybook/core-common@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/core-common@npm:7.0.24" resolution: "@storybook/core-common@npm:7.0.24"
dependencies: dependencies:
@ -10411,35 +10338,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/core-common@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
version: 7.0.23
resolution: "@storybook/core-common@npm:7.0.23"
dependencies:
"@storybook/node-logger": 7.0.23
"@storybook/types": 7.0.23
"@types/node": ^16.0.0
"@types/node-fetch": ^2.6.4
"@types/pretty-hrtime": ^1.0.0
chalk: ^4.1.0
esbuild: ^0.17.0
esbuild-register: ^3.4.0
file-system-cache: ^2.0.0
find-up: ^5.0.0
fs-extra: ^11.1.0
glob: ^8.1.0
glob-promise: ^6.0.2
handlebars: ^4.7.7
lazy-universal-dotenv: ^4.0.0
node-fetch: ^2.0.0
picomatch: ^2.3.0
pkg-dir: ^5.0.0
pretty-hrtime: ^1.0.3
resolve-from: ^5.0.0
ts-dedent: ^2.0.0
checksum: e63ca7563fcb6762a51d55862b7c4873ddec53873e0f0425cdc8ed622dd0eeb6c336de28c127dd3b290f43b05ff4c87e6051fba55e80ecf22896c4dd5b5ad89c
languageName: node
linkType: hard
"@storybook/core-events@npm:7.0.21": "@storybook/core-events@npm:7.0.21":
version: 7.0.21 version: 7.0.21
resolution: "@storybook/core-events@npm:7.0.21" resolution: "@storybook/core-events@npm:7.0.21"
@ -10447,14 +10345,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/core-events@npm:7.0.23, @storybook/core-events@npm:^7.0.0": "@storybook/core-events@npm:7.0.24, @storybook/core-events@npm:^7.0.0":
version: 7.0.23
resolution: "@storybook/core-events@npm:7.0.23"
checksum: 0a7e6bee982b32145942740136ec8c492082dfb2362e52531d9deaefadd8878da477328409709fc5e48c0066ea3941f73ff59bac32c7eb2c75cef0f9509a5052
languageName: node
linkType: hard
"@storybook/core-events@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/core-events@npm:7.0.24" resolution: "@storybook/core-events@npm:7.0.24"
checksum: 1bf563ed16551acf7caee56c5be5a47f67612b13ad1e97bb23cdd3f337a2fc82a0c0160421f02f254dba7d7bfc641c6aa36b534903ffca9afb2ec67c01870845 checksum: 1bf563ed16551acf7caee56c5be5a47f67612b13ad1e97bb23cdd3f337a2fc82a0c0160421f02f254dba7d7bfc641c6aa36b534903ffca9afb2ec67c01870845
@ -10520,7 +10411,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/csf-tools@npm:7.0.24": "@storybook/csf-tools@npm:7.0.24, @storybook/csf-tools@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/csf-tools@npm:7.0.24" resolution: "@storybook/csf-tools@npm:7.0.24"
dependencies: dependencies:
@ -10537,23 +10428,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/csf-tools@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
version: 7.0.23
resolution: "@storybook/csf-tools@npm:7.0.23"
dependencies:
"@babel/generator": ~7.21.1
"@babel/parser": ~7.21.2
"@babel/traverse": ~7.21.2
"@babel/types": ~7.21.2
"@storybook/csf": ^0.1.0
"@storybook/types": 7.0.23
fs-extra: ^11.1.0
recast: ^0.23.1
ts-dedent: ^2.0.0
checksum: a4c13b3bb25f92b0ed0a6ae0080b3c95282290bee01ceb92c9aa389d88310f4ea0b4db1f9732ada63057e82438d7bc12e57287408e915beb346d5e0dd13f666d
languageName: node
linkType: hard
"@storybook/csf@npm:^0.1.0, @storybook/csf@npm:^0.1.1": "@storybook/csf@npm:^0.1.0, @storybook/csf@npm:^0.1.1":
version: 0.1.1 version: 0.1.1
resolution: "@storybook/csf@npm:0.1.1" resolution: "@storybook/csf@npm:0.1.1"
@ -10601,7 +10475,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/instrumenter@npm:7.0.24": "@storybook/instrumenter@npm:7.0.24, @storybook/instrumenter@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/instrumenter@npm:7.0.24" resolution: "@storybook/instrumenter@npm:7.0.24"
dependencies: dependencies:
@ -10614,19 +10488,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/instrumenter@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
version: 7.0.23
resolution: "@storybook/instrumenter@npm:7.0.23"
dependencies:
"@storybook/channels": 7.0.23
"@storybook/client-logger": 7.0.23
"@storybook/core-events": 7.0.23
"@storybook/global": ^5.0.0
"@storybook/preview-api": 7.0.23
checksum: d81e3b49b4120570b7493c31532275127330b7dc714da3138db28150594b58211343bfe4eb01874b0e53e9e02d091d017c4f2f34a22c024da1bb57d3c97163d2
languageName: node
linkType: hard
"@storybook/jest@npm:^0.1.0": "@storybook/jest@npm:^0.1.0":
version: 0.1.0 version: 0.1.0
resolution: "@storybook/jest@npm:0.1.0" resolution: "@storybook/jest@npm:0.1.0"
@ -10705,18 +10566,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/node-logger@npm:7.0.23":
version: 7.0.23
resolution: "@storybook/node-logger@npm:7.0.23"
dependencies:
"@types/npmlog": ^4.1.2
chalk: ^4.1.0
npmlog: ^5.0.1
pretty-hrtime: ^1.0.3
checksum: 600a5799f96254e3c98b431989166089fe6e1844e3dad95092b1948a98746fb0a096433cde5553b258f33c04f400f9b2127ead55589183ce8cfb911134a2cbf9
languageName: node
linkType: hard
"@storybook/node-logger@npm:7.0.24": "@storybook/node-logger@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/node-logger@npm:7.0.24" resolution: "@storybook/node-logger@npm:7.0.24"
@ -10759,30 +10608,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/preview-api@npm:7.0.23, @storybook/preview-api@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": "@storybook/preview-api@npm:7.0.24, @storybook/preview-api@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0":
version: 7.0.23
resolution: "@storybook/preview-api@npm:7.0.23"
dependencies:
"@storybook/channel-postmessage": 7.0.23
"@storybook/channels": 7.0.23
"@storybook/client-logger": 7.0.23
"@storybook/core-events": 7.0.23
"@storybook/csf": ^0.1.0
"@storybook/global": ^5.0.0
"@storybook/types": 7.0.23
"@types/qs": ^6.9.5
dequal: ^2.0.2
lodash: ^4.17.21
memoizerific: ^1.11.3
qs: ^6.10.0
synchronous-promise: ^2.0.15
ts-dedent: ^2.0.0
util-deprecate: ^1.0.2
checksum: 0dc9b6b454ebfec09a6646cf738d616ab45864aef5a7cee59aa9dbb11a79650474d05fdd34461e269a68cf72f0961109c6bad6798c37617aea4efd362223b3ea
languageName: node
linkType: hard
"@storybook/preview-api@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/preview-api@npm:7.0.24" resolution: "@storybook/preview-api@npm:7.0.24"
dependencies: dependencies:
@ -11001,22 +10827,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/theming@npm:7.0.23, @storybook/theming@npm:^7.0.0": "@storybook/theming@npm:7.0.24, @storybook/theming@npm:^7.0.0":
version: 7.0.23
resolution: "@storybook/theming@npm:7.0.23"
dependencies:
"@emotion/use-insertion-effect-with-fallbacks": ^1.0.0
"@storybook/client-logger": 7.0.23
"@storybook/global": ^5.0.0
memoizerific: ^1.11.3
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
checksum: 83845f645fa5a136af0bdaab70a6a101d8893602cd1240f6403a752d333ccfe135d44fb7cb6b3d6deb94b48945f01c173e2bebea938418f952343e007d2ed4a4
languageName: node
linkType: hard
"@storybook/theming@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/theming@npm:7.0.24" resolution: "@storybook/theming@npm:7.0.24"
dependencies: dependencies:
@ -11043,18 +10854,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@storybook/types@npm:7.0.23":
version: 7.0.23
resolution: "@storybook/types@npm:7.0.23"
dependencies:
"@storybook/channels": 7.0.23
"@types/babel__core": ^7.0.0
"@types/express": ^4.7.0
file-system-cache: ^2.0.0
checksum: da8f65c0846aea047763bf83e5d941dbf63dbd472c2b8435cead6de5473e01c8bc8622d463fe2863dab054958bfbe4f53ceb307e3fdcf5417613874d50468433
languageName: node
linkType: hard
"@storybook/types@npm:7.0.24": "@storybook/types@npm:7.0.24":
version: 7.0.24 version: 7.0.24
resolution: "@storybook/types@npm:7.0.24" resolution: "@storybook/types@npm:7.0.24"
@ -11657,6 +11456,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/cookie-parser@npm:^1.4.3":
version: 1.4.3
resolution: "@types/cookie-parser@npm:1.4.3"
dependencies:
"@types/express": "*"
checksum: f390f3af1b1711190dee2c2ecd9af33af81fbde8d81ee820dadb6fe1e0d80c3faba40af37c6ed36fb88b04b64870f6a021f7e9edceecd17c42fe22abe0af5005
languageName: node
linkType: hard
"@types/cookie@npm:^0.4.1": "@types/cookie@npm:^0.4.1":
version: 0.4.1 version: 0.4.1
resolution: "@types/cookie@npm:0.4.1" resolution: "@types/cookie@npm:0.4.1"
@ -11754,7 +11562,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/express@npm:^4.17.13, @types/express@npm:^4.17.17, @types/express@npm:^4.7.0": "@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.17, @types/express@npm:^4.7.0":
version: 4.17.17 version: 4.17.17
resolution: "@types/express@npm:4.17.17" resolution: "@types/express@npm:4.17.17"
dependencies: dependencies:
@ -12044,20 +11852,22 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/node@npm:^18.11.18, @types/node@npm:^18.16.3": "@types/node@npm:^18.11.18, @types/node@npm:^18.16.19, @types/node@npm:^18.16.3":
version: 18.16.18
resolution: "@types/node@npm:18.16.18"
checksum: d32d8a0a04cd3f5ecb361bcb42f3a07623881ac90d680e06bf626defb3c663a94860d11690babe607cfe67265eceeb8a59ba5fe40c0e49f5a1b01e0088640469
languageName: node
linkType: hard
"@types/node@npm:^18.16.19":
version: 18.16.19 version: 18.16.19
resolution: "@types/node@npm:18.16.19" resolution: "@types/node@npm:18.16.19"
checksum: 63c31f09616508aa7135380a4c79470a897b75f9ff3a70eb069e534dfabdec3f32fb0f9df5939127f1086614d980ddea0fa5e8cc29a49103c4f74cd687618aaf checksum: 63c31f09616508aa7135380a4c79470a897b75f9ff3a70eb069e534dfabdec3f32fb0f9df5939127f1086614d980ddea0fa5e8cc29a49103c4f74cd687618aaf
languageName: node languageName: node
linkType: hard linkType: hard
"@types/nodemailer@npm:^6.4.8":
version: 6.4.8
resolution: "@types/nodemailer@npm:6.4.8"
dependencies:
"@types/node": "*"
checksum: 3cc9b6a0e54f25a1b36124df413964ff5a69e8dc4558c5dfc06818917313a50f4dbfe31fc9190e4270d07a0f8678474da24a2eae42f907933ea81d983b4772d4
languageName: node
linkType: hard
"@types/normalize-package-data@npm:^2.4.0": "@types/normalize-package-data@npm:^2.4.0":
version: 2.4.1 version: 2.4.1
resolution: "@types/normalize-package-data@npm:2.4.1" resolution: "@types/normalize-package-data@npm:2.4.1"
@ -12540,26 +12350,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@vanilla-extract/css@npm:^1.10.0": "@vanilla-extract/css@npm:^1.10.0, @vanilla-extract/css@npm:^1.12.0":
version: 1.11.1
resolution: "@vanilla-extract/css@npm:1.11.1"
dependencies:
"@emotion/hash": ^0.9.0
"@vanilla-extract/private": ^1.0.3
ahocorasick: 1.0.2
chalk: ^4.1.1
css-what: ^6.1.0
cssesc: ^3.0.0
csstype: ^3.0.7
deep-object-diff: ^1.1.9
deepmerge: ^4.2.2
media-query-parser: ^2.0.2
outdent: ^0.8.0
checksum: 1498ced4ba1fd78f3e42567a49daac9eea15e0fa1418d39e4ba5a3e84ded66a5567733f5fa364eaf5fe9c0354124bd62a32ffd603427b76e36004ed49b55c7d2
languageName: node
linkType: hard
"@vanilla-extract/css@npm:^1.12.0":
version: 1.12.0 version: 1.12.0
resolution: "@vanilla-extract/css@npm:1.12.0" resolution: "@vanilla-extract/css@npm:1.12.0"
dependencies: dependencies:
@ -15691,6 +15482,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"cookie-parser@npm:^1.4.6":
version: 1.4.6
resolution: "cookie-parser@npm:1.4.6"
dependencies:
cookie: 0.4.1
cookie-signature: 1.0.6
checksum: 1e5a63aa82e8eb4e02d2977c6902983dee87b02e87ec5ec43ac3cb1e72da354003716570cd5190c0ad9e8a454c9d3237f4ad6e2f16d0902205a96a1c72b77ba5
languageName: node
linkType: hard
"cookie-signature@npm:1.0.6": "cookie-signature@npm:1.0.6":
version: 1.0.6 version: 1.0.6
resolution: "cookie-signature@npm:1.0.6" resolution: "cookie-signature@npm:1.0.6"
@ -15698,6 +15499,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"cookie@npm:0.4.1":
version: 0.4.1
resolution: "cookie@npm:0.4.1"
checksum: bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8
languageName: node
linkType: hard
"cookie@npm:0.5.0, cookie@npm:^0.5.0": "cookie@npm:0.5.0, cookie@npm:^0.5.0":
version: 0.5.0 version: 0.5.0
resolution: "cookie@npm:0.5.0" resolution: "cookie@npm:0.5.0"
@ -19397,7 +19205,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"get-tsconfig@npm:^4.2.0": "get-tsconfig@npm:^4.2.0, get-tsconfig@npm:^4.5.0":
version: 4.6.2 version: 4.6.2
resolution: "get-tsconfig@npm:4.6.2" resolution: "get-tsconfig@npm:4.6.2"
dependencies: dependencies:
@ -19406,15 +19214,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"get-tsconfig@npm:^4.5.0":
version: 4.6.0
resolution: "get-tsconfig@npm:4.6.0"
dependencies:
resolve-pkg-maps: ^1.0.0
checksum: fd2589a50e21543cf416285e5c4ac605359f49209b6c2e66bb8698fac907356e060de0a681e40881f00182b6f19771377411a88adcc78fd3954732ff54f4a54d
languageName: node
linkType: hard
"giget@npm:^1.0.0": "giget@npm:^1.0.0":
version: 1.1.2 version: 1.1.2
resolution: "giget@npm:1.1.2" resolution: "giget@npm:1.1.2"
@ -24599,6 +24398,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"nodemailer@npm:^6.9.3":
version: 6.9.3
resolution: "nodemailer@npm:6.9.3"
checksum: 3bea8316652c0578515d9146d2f24660e4855807520153f061d39af76b440a4f61b4e70f10fed35f8f12f115f6aea1aeb483ea7ba0337c0e3e675f117c41c611
languageName: node
linkType: hard
"nodemon@npm:^2.0.22": "nodemon@npm:^2.0.22":
version: 2.0.22 version: 2.0.22
resolution: "nodemon@npm:2.0.22" resolution: "nodemon@npm:2.0.22"
@ -27696,7 +27502,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"rollup@npm:*": "rollup@npm:*, rollup@npm:^2.25.0 || ^3.3.0, rollup@npm:^3.21.0":
version: 3.26.0 version: 3.26.0
resolution: "rollup@npm:3.26.0" resolution: "rollup@npm:3.26.0"
dependencies: dependencies:
@ -27724,20 +27530,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"rollup@npm:^2.25.0 || ^3.3.0, rollup@npm:^3.21.0":
version: 3.25.1
resolution: "rollup@npm:3.25.1"
dependencies:
fsevents: ~2.3.2
dependenciesMeta:
fsevents:
optional: true
bin:
rollup: dist/bin/rollup
checksum: f483b28a0605097a725b080c088262b0fa21f7bce66f741df73d9ff0be6a3baaf2927916b094ce95412f4f15cc59bb5eae020f59cae3d3a6993d123faceb5b41
languageName: node
linkType: hard
"run-applescript@npm:^5.0.0": "run-applescript@npm:^5.0.0":
version: 5.0.0 version: 5.0.0
resolution: "run-applescript@npm:5.0.0" resolution: "run-applescript@npm:5.0.0"
@ -29773,7 +29565,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"tslib@npm:2.6.0, tslib@npm:^2.4.1 || ^1.9.3": "tslib@npm:2.6.0, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1 || ^1.9.3, tslib@npm:^2.5.0":
version: 2.6.0 version: 2.6.0
resolution: "tslib@npm:2.6.0" resolution: "tslib@npm:2.6.0"
checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f
@ -29787,7 +29579,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:~2.5.0": "tslib@npm:~2.5.0":
version: 2.5.3 version: 2.5.3
resolution: "tslib@npm:2.5.3" resolution: "tslib@npm:2.5.3"
checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c
@ -29973,17 +29765,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@npm:^4.6.4 || ^5.0.0": "typescript@npm:^4.6.4 || ^5.0.0, typescript@npm:^5.1.6":
version: 5.1.3
resolution: "typescript@npm:5.1.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: d9d51862d98efa46534f2800a1071a613751b1585dc78884807d0c179bcd93d6e9d4012a508e276742f5f33c480adefc52ffcafaf9e0e00ab641a14cde9a31c7
languageName: node
linkType: hard
"typescript@npm:^5.1.6":
version: 5.1.6 version: 5.1.6
resolution: "typescript@npm:5.1.6" resolution: "typescript@npm:5.1.6"
bin: bin:
@ -30023,17 +29805,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"typescript@patch:typescript@^4.6.4 || ^5.0.0#~builtin<compat/typescript>": "typescript@patch:typescript@^4.6.4 || ^5.0.0#~builtin<compat/typescript>, typescript@patch:typescript@^5.1.6#~builtin<compat/typescript>":
version: 5.1.3
resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin<compat/typescript>::version=5.1.3&hash=5da071"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 6f0a9dca6bf4ce9dcaf4e282aade55ef4c56ecb5fb98d0a4a5c0113398815aea66d871b5611e83353e5953a19ed9ef103cf5a76ac0f276d550d1e7cd5344f61e
languageName: node
linkType: hard
"typescript@patch:typescript@^5.1.6#~builtin<compat/typescript>":
version: 5.1.6 version: 5.1.6
resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin<compat/typescript>::version=5.1.6&hash=5da071" resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin<compat/typescript>::version=5.1.6&hash=5da071"
bin: bin: