diff --git a/server/errors.ts b/server/errors.ts index 5b7f89609..fc5b6c0f0 100644 --- a/server/errors.ts +++ b/server/errors.ts @@ -1,5 +1,11 @@ import httpErrors from "http-errors"; +export function InternalError(message = "Internal error") { + return httpErrors(500, message, { + id: "internal_error", + }); +} + export function AuthenticationError( message = "Authentication required", redirectUrl = "/" diff --git a/server/queues/tasks/ImportTask.ts b/server/queues/tasks/ImportTask.ts index 70ca6bf86..5ef5b77cd 100644 --- a/server/queues/tasks/ImportTask.ts +++ b/server/queues/tasks/ImportTask.ts @@ -1,9 +1,10 @@ +import { S3 } from "aws-sdk"; import { truncate } from "lodash"; import { CollectionValidation } from "@shared/validations"; import attachmentCreator from "@server/commands/attachmentCreator"; import documentCreator from "@server/commands/documentCreator"; import { sequelize } from "@server/database/sequelize"; -import { ValidationError } from "@server/errors"; +import { InternalError, ValidationError } from "@server/errors"; import Logger from "@server/logging/Logger"; import { User, @@ -86,6 +87,9 @@ export default abstract class ImportTask extends BaseTask { try { Logger.info("task", `ImportTask fetching data for ${fileOperationId}`); const data = await this.fetchData(fileOperation); + if (!data) { + throw InternalError("Failed to fetch data for import from storage."); + } Logger.info("task", `ImportTask parsing data for ${fileOperationId}`); const parsed = await this.parseData(data, fileOperation); @@ -176,7 +180,7 @@ export default abstract class ImportTask extends BaseTask { * @returns A promise that resolves to the structured data */ protected abstract parseData( - data: any, + data: S3.Body, fileOperation: FileOperation ): Promise;