From 34d6d41da5bc26a00e21e3fed516b806b3726b53 Mon Sep 17 00:00:00 2001 From: gwyneplaine Date: Thu, 29 Apr 2021 11:56:03 +1000 Subject: [PATCH 1/4] add maxFileSize --- docs/pages/apis/config.mdx | 2 ++ .../keystone/src/lib/server/createExpressServer.ts | 9 ++++++++- packages-next/types/src/config/index.ts | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/pages/apis/config.mdx b/docs/pages/apis/config.mdx index e324c6b8306..81f9de40df3 100644 --- a/docs/pages/apis/config.mdx +++ b/docs/pages/apis/config.mdx @@ -167,12 +167,14 @@ Options: - `cors` (default: `undefined`): Allows you to configure the [cors middleware](https://www.npmjs.com/package/cors#configuration-options) for your Express server. If left undefined `cors` will not be used. - `port` (default: `3000` ): The port your Express server will listen on. +- `maxFileSize` (default: `200 * 1024 * 1024`): The maximum file size allowed for uploads. If left undefined, defaults to `200 mb` ```typescript export default config({ server: { cors: { origin: ['http://localhost:7777'], credentials: true }: port: 3000 + maxFileSize: 200 * 1024 * 1024 }, /* ... */ }); diff --git a/packages-next/keystone/src/lib/server/createExpressServer.ts b/packages-next/keystone/src/lib/server/createExpressServer.ts index 8201d09ea01..58a877d69e8 100644 --- a/packages-next/keystone/src/lib/server/createExpressServer.ts +++ b/packages-next/keystone/src/lib/server/createExpressServer.ts @@ -7,14 +7,18 @@ import type { KeystoneConfig, CreateContext, SessionStrategy } from '@keystone-n import { createAdminUIServer } from '@keystone-next/admin-ui/system'; import { createApolloServerExpress } from './createApolloServer'; +const DEFAULT_MAX_FILE_SIZE = 200 * 1024 * 1024; // 200mb + const addApolloServer = ({ server, + config, graphQLSchema, createContext, sessionStrategy, apolloConfig, }: { server: express.Express; + config: KeystoneConfig; graphQLSchema: GraphQLSchema; createContext: CreateContext; sessionStrategy?: SessionStrategy; @@ -26,7 +30,9 @@ const addApolloServer = ({ sessionStrategy, apolloConfig, }); - server.use(graphqlUploadExpress()); + + const maxFileSize = config.server?.maxFileSize || DEFAULT_MAX_FILE_SIZE; + server.use(graphqlUploadExpress({ maxFileSize })); // FIXME: Support custom API path via config.graphql.path. // Note: Core keystone uses '/admin/api' as the default. apolloServer.applyMiddleware({ app: server, path: '/api/graphql', cors: false }); @@ -57,6 +63,7 @@ export const createExpressServer = async ( if (isVerbose) console.log('✨ Preparing GraphQL Server'); addApolloServer({ server, + config, graphQLSchema, createContext, sessionStrategy, diff --git a/packages-next/types/src/config/index.ts b/packages-next/types/src/config/index.ts index 8748ecf04a4..5a80fa2ea1e 100644 --- a/packages-next/types/src/config/index.ts +++ b/packages-next/types/src/config/index.ts @@ -121,6 +121,8 @@ export type ServerConfig = { cors?: CorsOptions | true; /** Port number to start the server on. Defaults to process.env.PORT || 3000 */ port?: number; + /** Maximum upload file size allowed (in bytes) */ + maxFileSize?: number; }; // config.graphql From 47558bb159aaf2e464a59431a9a89a3433a1a52e Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 29 Apr 2021 12:06:32 +1000 Subject: [PATCH 2/4] Update packages-next/keystone/src/lib/server/createExpressServer.ts Co-authored-by: Tim Leslie --- packages-next/keystone/src/lib/server/createExpressServer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages-next/keystone/src/lib/server/createExpressServer.ts b/packages-next/keystone/src/lib/server/createExpressServer.ts index 58a877d69e8..89138ab4cc8 100644 --- a/packages-next/keystone/src/lib/server/createExpressServer.ts +++ b/packages-next/keystone/src/lib/server/createExpressServer.ts @@ -7,7 +7,7 @@ import type { KeystoneConfig, CreateContext, SessionStrategy } from '@keystone-n import { createAdminUIServer } from '@keystone-next/admin-ui/system'; import { createApolloServerExpress } from './createApolloServer'; -const DEFAULT_MAX_FILE_SIZE = 200 * 1024 * 1024; // 200mb +const DEFAULT_MAX_FILE_SIZE = 200 * 1024 * 1024; // 200 MiB const addApolloServer = ({ server, From 655ad2ebc7dc432e6d7bc257dcf1573d12878190 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 29 Apr 2021 12:06:38 +1000 Subject: [PATCH 3/4] Update docs/pages/apis/config.mdx Co-authored-by: Tim Leslie --- docs/pages/apis/config.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/apis/config.mdx b/docs/pages/apis/config.mdx index 81f9de40df3..4d2dc51eade 100644 --- a/docs/pages/apis/config.mdx +++ b/docs/pages/apis/config.mdx @@ -167,7 +167,7 @@ Options: - `cors` (default: `undefined`): Allows you to configure the [cors middleware](https://www.npmjs.com/package/cors#configuration-options) for your Express server. If left undefined `cors` will not be used. - `port` (default: `3000` ): The port your Express server will listen on. -- `maxFileSize` (default: `200 * 1024 * 1024`): The maximum file size allowed for uploads. If left undefined, defaults to `200 mb` +- `maxFileSize` (default: `200 * 1024 * 1024`): The maximum file size allowed for uploads. If left undefined, defaults to `200 MiB` ```typescript export default config({ From 3eab9ab7abbd87a19061eb8c80f54f7cf22f0d3b Mon Sep 17 00:00:00 2001 From: gwyneplaine Date: Thu, 29 Apr 2021 12:07:57 +1000 Subject: [PATCH 4/4] changeset --- .changeset/shiny-snakes-rest.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/shiny-snakes-rest.md diff --git a/.changeset/shiny-snakes-rest.md b/.changeset/shiny-snakes-rest.md new file mode 100644 index 00000000000..3c3b7d4ddbe --- /dev/null +++ b/.changeset/shiny-snakes-rest.md @@ -0,0 +1,5 @@ +--- +'@keystone-next/keystone': minor +--- + +Added `maxFileSize` property to keystone config.