diff --git a/packages/api/src/elastic/pages.ts b/packages/api/src/elastic/pages.ts index 70bfd4d9c..fc4671be2 100644 --- a/packages/api/src/elastic/pages.ts +++ b/packages/api/src/elastic/pages.ts @@ -27,6 +27,8 @@ import { SearchResponse, } from './types' +const MAX_CONTENT_LENGTH = 10 * 1024 * 1024 // 10MB + const appendQuery = (builder: ESBuilder, query: string): ESBuilder => { interface Field { field: string @@ -404,6 +406,17 @@ export const createPage = async ( ctx: PageContext ): Promise => { try { + // max 10MB + if (page.content.length > MAX_CONTENT_LENGTH) { + logger.info('page content is too large', { + pageId: page.id, + contentLength: page.content.length, + }) + + page.content = 'Your page content is too large to be saved.' + page.state = ArticleSavingRequestStatus.Failed + } + const { body } = await client.index({ id: page.id || undefined, index: INDEX_ALIAS, @@ -432,6 +445,17 @@ export const updatePage = async ( ctx: PageContext ): Promise => { try { + // max 10MB + if (page.content && page.content.length > MAX_CONTENT_LENGTH) { + logger.info('page content is too large', { + pageId: page.id, + contentLength: page.content.length, + }) + + page.content = 'Your page content is too large to be saved.' + page.state = ArticleSavingRequestStatus.Failed + } + await client.update({ index: INDEX_ALIAS, id, @@ -519,6 +543,7 @@ export const getPageByParam = async ( const { body } = await client.search>({ index: INDEX_ALIAS, body: builder.build(), + track_total_hits: true, }) if (body.hits.total.value === 0) { diff --git a/packages/api/src/routers/svc/newsletters.ts b/packages/api/src/routers/svc/newsletters.ts index 4bf7d15ca..ecebed602 100644 --- a/packages/api/src/routers/svc/newsletters.ts +++ b/packages/api/src/routers/svc/newsletters.ts @@ -160,7 +160,7 @@ export function newsletterServiceRouter() { res.status(200).send('newsletter created') } catch (e) { - logger.info(e) + logger.error(e) if (e instanceof SyntaxError) { // when message is not a valid json string res.status(400).send(e)