diff --git a/apps/server/.env.example b/apps/server/.env.example
index a81ef77001..6fd5336f41 100644
--- a/apps/server/.env.example
+++ b/apps/server/.env.example
@@ -1,2 +1,2 @@
-SECRET_KEY="secret"
DATABASE_URL="postgresql://affine@localhost:5432/affine"
+NEXTAUTH_URL="http://localhost:8080"
diff --git a/apps/server/package.json b/apps/server/package.json
index 4e716ed28c..e97cf85f26 100644
--- a/apps/server/package.json
+++ b/apps/server/package.json
@@ -27,6 +27,7 @@
"@node-rs/crc32": "^1.7.0",
"@node-rs/jsonwebtoken": "^0.2.0",
"@prisma/client": "^4.16.2",
+ "cookie-parser": "^1.4.6",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"graphql": "^16.7.1",
@@ -34,6 +35,7 @@
"graphql-upload": "^16.0.2",
"lodash-es": "^4.17.21",
"next-auth": "^4.22.1",
+ "nodemailer": "^6.9.3",
"parse-duration": "^1.1.0",
"prisma": "^4.16.2",
"reflect-metadata": "^0.1.13",
@@ -43,9 +45,11 @@
"@affine/storage": "workspace:*",
"@napi-rs/image": "^1.6.1",
"@nestjs/testing": "^10.0.4",
+ "@types/cookie-parser": "^1.4.3",
"@types/express": "^4.17.17",
"@types/lodash-es": "^4.17.7",
"@types/node": "^18.16.19",
+ "@types/nodemailer": "^6.4.8",
"@types/supertest": "^2.0.12",
"c8": "^8.0.0",
"nodemon": "^2.0.22",
diff --git a/apps/server/src/config/def.ts b/apps/server/src/config/def.ts
index fbb6785468..8c61cf10e5 100644
--- a/apps/server/src/config/def.ts
+++ b/apps/server/src/config/def.ts
@@ -233,5 +233,11 @@ export interface AFFiNEConfig {
}
>
>;
+ email: {
+ server: string;
+ port: number;
+ sender: string;
+ password: string;
+ };
};
}
diff --git a/apps/server/src/config/default.ts b/apps/server/src/config/default.ts
index 0c65dc4adf..21e74f899d 100644
--- a/apps/server/src/config/default.ts
+++ b/apps/server/src/config/default.ts
@@ -65,6 +65,10 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
OAUTH_GOOGLE_CLIENT_SECRET: 'auth.oauthProviders.google.clientSecret',
OAUTH_GITHUB_CLIENT_ID: 'auth.oauthProviders.github.clientId',
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'],
env: process.env.NODE_ENV ?? 'development',
get prod() {
@@ -102,7 +106,6 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
},
introspection: true,
playground: true,
- debug: true,
},
auth: {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -114,8 +117,16 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
publicKey: jwtKeyPair.publicKey,
enableSignup: true,
enableOauth: false,
- nextAuthSecret: '',
+ get nextAuthSecret() {
+ return this.privateKey;
+ },
oauthProviders: {},
+ email: {
+ server: 'smtp.gmail.com',
+ port: 465,
+ sender: '',
+ password: '',
+ },
},
objectStorage: {
r2: {
@@ -129,7 +140,7 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
path: join(homedir(), '.affine-storage'),
},
},
- } as const;
+ } satisfies AFFiNEConfig;
applyEnvToConfig(defaultConfig);
diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts
index 22846e24b1..2c506a5795 100644
--- a/apps/server/src/index.ts
+++ b/apps/server/src/index.ts
@@ -1,6 +1,7 @@
///
import { NestFactory } from '@nestjs/core';
import type { NestExpressApplication } from '@nestjs/platform-express';
+import cookieParser from 'cookie-parser';
import { static as staticMiddleware } from 'express';
// @ts-expect-error graphql-upload is not typed
import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.mjs';
@@ -27,6 +28,8 @@ app.use(
})
);
+app.use(cookieParser());
+
const config = app.get(Config);
const host = config.host ?? 'localhost';
diff --git a/apps/server/src/modules/auth/next-auth.controller.ts b/apps/server/src/modules/auth/next-auth.controller.ts
index 7aa30def33..b5306b8377 100644
--- a/apps/server/src/modules/auth/next-auth.controller.ts
+++ b/apps/server/src/modules/auth/next-auth.controller.ts
@@ -2,11 +2,10 @@ import { randomUUID } from 'node:crypto';
import { PrismaAdapter } from '@auth/prisma-adapter';
import {
+ All,
BadRequestException,
Controller,
- Get,
Next,
- Post,
Query,
Req,
Res,
@@ -15,6 +14,7 @@ import { Algorithm, sign, verify as jwtVerify } from '@node-rs/jsonwebtoken';
import type { NextFunction, Request, Response } from 'express';
import type { AuthAction, AuthOptions } from 'next-auth';
import { AuthHandler } from 'next-auth/core';
+import Email from 'next-auth/providers/email';
import Github from 'next-auth/providers/github';
import Google from 'next-auth/providers/google';
@@ -29,15 +29,40 @@ export class NextAuthController {
private readonly nextAuthOptions: AuthOptions;
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 = {
- 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 `,
+ }),
+ ],
// @ts-expect-error Third part library type mismatch
- adapter: PrismaAdapter(prisma),
+ adapter: prismaAdapter,
+ debug: !config.prod,
};
if (config.auth.oauthProviders.github) {
this.nextAuthOptions.providers.push(
- Github({
+ // @ts-expect-error esm interop issue
+ Github.default({
clientId: config.auth.oauthProviders.github.clientId,
clientSecret: config.auth.oauthProviders.github.clientSecret,
})
@@ -46,12 +71,14 @@ export class NextAuthController {
if (config.auth.oauthProviders.google) {
this.nextAuthOptions.providers.push(
- Google({
+ // @ts-expect-error esm interop issue
+ Google.default({
clientId: config.auth.oauthProviders.google.clientId,
clientSecret: config.auth.oauthProviders.google.clientSecret,
})
);
}
+
this.nextAuthOptions.jwt = {
encode: async ({ token, maxAge }) => {
if (!token?.email) {
@@ -108,8 +135,7 @@ export class NextAuthController {
this.nextAuthOptions.secret ??= config.auth.nextAuthSecret;
}
- @Get()
- @Post()
+ @All('*')
async auth(
@Req() req: Request,
@Res() res: Response,
diff --git a/yarn.lock b/yarn.lock
index 9140f9bc86..5c37bf4e99 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -419,11 +419,14 @@ __metadata:
"@node-rs/crc32": ^1.7.0
"@node-rs/jsonwebtoken": ^0.2.0
"@prisma/client": ^4.16.2
+ "@types/cookie-parser": ^1.4.3
"@types/express": ^4.17.17
"@types/lodash-es": ^4.17.7
"@types/node": ^18.16.19
+ "@types/nodemailer": ^6.4.8
"@types/supertest": ^2.0.12
c8: ^8.0.0
+ cookie-parser: ^1.4.6
dotenv: ^16.3.1
express: ^4.18.2
graphql: ^16.7.1
@@ -431,6 +434,7 @@ __metadata:
graphql-upload: ^16.0.2
lodash-es: ^4.17.21
next-auth: ^4.22.1
+ nodemailer: ^6.9.3
nodemon: ^2.0.22
parse-duration: ^1.1.0
prisma: ^4.16.2
@@ -732,16 +736,7 @@ __metadata:
languageName: node
linkType: hard
-"@apollo/usage-reporting-protobuf@npm:^4.1.0":
- 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":
+"@apollo/usage-reporting-protobuf@npm:^4.1.0, @apollo/usage-reporting-protobuf@npm:^4.1.1":
version: 4.1.1
resolution: "@apollo/usage-reporting-protobuf@npm:4.1.1"
dependencies:
@@ -9444,17 +9439,7 @@ __metadata:
languageName: node
linkType: hard
-"@smithy/protocol-http@npm:^1.0.1":
- 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":
+"@smithy/protocol-http@npm:^1.0.1, @smithy/protocol-http@npm:^1.1.0":
version: 1.1.0
resolution: "@smithy/protocol-http@npm:1.1.0"
dependencies:
@@ -9530,16 +9515,7 @@ __metadata:
languageName: node
linkType: hard
-"@smithy/types@npm:^1.0.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":
+"@smithy/types@npm:^1.0.0, @smithy/types@npm:^1.1.0":
version: 1.1.0
resolution: "@smithy/types@npm:1.1.0"
dependencies:
@@ -10176,20 +10152,6 @@ __metadata:
languageName: node
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":
version: 7.0.24
resolution: "@storybook/channel-postmessage@npm:7.0.24"
@@ -10223,13 +10185,6 @@ __metadata:
languageName: node
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":
version: 7.0.24
resolution: "@storybook/channels@npm:7.0.24"
@@ -10295,15 +10250,6 @@ __metadata:
languageName: node
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":
version: 7.0.24
resolution: "@storybook/client-logger@npm:7.0.24"
@@ -10334,7 +10280,7 @@ __metadata:
languageName: node
linkType: hard
-"@storybook/components@npm:7.0.24":
+"@storybook/components@npm:7.0.24, @storybook/components@npm:^7.0.0":
version: 7.0.24
resolution: "@storybook/components@npm:7.0.24"
dependencies:
@@ -10353,25 +10299,6 @@ __metadata:
languageName: node
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":
version: 7.0.24
resolution: "@storybook/core-client@npm:7.0.24"
@@ -10382,7 +10309,7 @@ __metadata:
languageName: node
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
resolution: "@storybook/core-common@npm:7.0.24"
dependencies:
@@ -10411,35 +10338,6 @@ __metadata:
languageName: node
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":
version: 7.0.21
resolution: "@storybook/core-events@npm:7.0.21"
@@ -10447,14 +10345,7 @@ __metadata:
languageName: node
linkType: hard
-"@storybook/core-events@npm:7.0.23, @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":
+"@storybook/core-events@npm:7.0.24, @storybook/core-events@npm:^7.0.0":
version: 7.0.24
resolution: "@storybook/core-events@npm:7.0.24"
checksum: 1bf563ed16551acf7caee56c5be5a47f67612b13ad1e97bb23cdd3f337a2fc82a0c0160421f02f254dba7d7bfc641c6aa36b534903ffca9afb2ec67c01870845
@@ -10520,7 +10411,7 @@ __metadata:
languageName: node
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
resolution: "@storybook/csf-tools@npm:7.0.24"
dependencies:
@@ -10537,23 +10428,6 @@ __metadata:
languageName: node
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":
version: 0.1.1
resolution: "@storybook/csf@npm:0.1.1"
@@ -10601,7 +10475,7 @@ __metadata:
languageName: node
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
resolution: "@storybook/instrumenter@npm:7.0.24"
dependencies:
@@ -10614,19 +10488,6 @@ __metadata:
languageName: node
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":
version: 0.1.0
resolution: "@storybook/jest@npm:0.1.0"
@@ -10705,18 +10566,6 @@ __metadata:
languageName: node
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":
version: 7.0.24
resolution: "@storybook/node-logger@npm:7.0.24"
@@ -10759,30 +10608,7 @@ __metadata:
languageName: node
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":
- 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":
+"@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.24
resolution: "@storybook/preview-api@npm:7.0.24"
dependencies:
@@ -11001,22 +10827,7 @@ __metadata:
languageName: node
linkType: hard
-"@storybook/theming@npm:7.0.23, @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":
+"@storybook/theming@npm:7.0.24, @storybook/theming@npm:^7.0.0":
version: 7.0.24
resolution: "@storybook/theming@npm:7.0.24"
dependencies:
@@ -11043,18 +10854,6 @@ __metadata:
languageName: node
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":
version: 7.0.24
resolution: "@storybook/types@npm:7.0.24"
@@ -11657,6 +11456,15 @@ __metadata:
languageName: node
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":
version: 0.4.1
resolution: "@types/cookie@npm:0.4.1"
@@ -11754,7 +11562,7 @@ __metadata:
languageName: node
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
resolution: "@types/express@npm:4.17.17"
dependencies:
@@ -12044,20 +11852,22 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:^18.11.18, @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":
+"@types/node@npm:^18.11.18, @types/node@npm:^18.16.19, @types/node@npm:^18.16.3":
version: 18.16.19
resolution: "@types/node@npm:18.16.19"
checksum: 63c31f09616508aa7135380a4c79470a897b75f9ff3a70eb069e534dfabdec3f32fb0f9df5939127f1086614d980ddea0fa5e8cc29a49103c4f74cd687618aaf
languageName: node
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":
version: 2.4.1
resolution: "@types/normalize-package-data@npm:2.4.1"
@@ -12540,26 +12350,7 @@ __metadata:
languageName: node
linkType: hard
-"@vanilla-extract/css@npm:^1.10.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":
+"@vanilla-extract/css@npm:^1.10.0, @vanilla-extract/css@npm:^1.12.0":
version: 1.12.0
resolution: "@vanilla-extract/css@npm:1.12.0"
dependencies:
@@ -15691,6 +15482,16 @@ __metadata:
languageName: node
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":
version: 1.0.6
resolution: "cookie-signature@npm:1.0.6"
@@ -15698,6 +15499,13 @@ __metadata:
languageName: node
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":
version: 0.5.0
resolution: "cookie@npm:0.5.0"
@@ -19397,7 +19205,7 @@ __metadata:
languageName: node
linkType: hard
-"get-tsconfig@npm:^4.2.0":
+"get-tsconfig@npm:^4.2.0, get-tsconfig@npm:^4.5.0":
version: 4.6.2
resolution: "get-tsconfig@npm:4.6.2"
dependencies:
@@ -19406,15 +19214,6 @@ __metadata:
languageName: node
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":
version: 1.1.2
resolution: "giget@npm:1.1.2"
@@ -24599,6 +24398,13 @@ __metadata:
languageName: node
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":
version: 2.0.22
resolution: "nodemon@npm:2.0.22"
@@ -27696,7 +27502,7 @@ __metadata:
languageName: node
linkType: hard
-"rollup@npm:*":
+"rollup@npm:*, rollup@npm:^2.25.0 || ^3.3.0, rollup@npm:^3.21.0":
version: 3.26.0
resolution: "rollup@npm:3.26.0"
dependencies:
@@ -27724,20 +27530,6 @@ __metadata:
languageName: node
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":
version: 5.0.0
resolution: "run-applescript@npm:5.0.0"
@@ -29773,7 +29565,7 @@ __metadata:
languageName: node
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
resolution: "tslib@npm:2.6.0"
checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f
@@ -29787,7 +29579,7 @@ __metadata:
languageName: node
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
resolution: "tslib@npm:2.5.3"
checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c
@@ -29973,17 +29765,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:^4.6.4 || ^5.0.0":
- 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":
+"typescript@npm:^4.6.4 || ^5.0.0, typescript@npm:^5.1.6":
version: 5.1.6
resolution: "typescript@npm:5.1.6"
bin:
@@ -30023,17 +29805,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@^4.6.4 || ^5.0.0#~builtin":
- version: 5.1.3
- resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin::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":
+"typescript@patch:typescript@^4.6.4 || ^5.0.0#~builtin, typescript@patch:typescript@^5.1.6#~builtin":
version: 5.1.6
resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=5da071"
bin: