// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

import { reallyJsonStringify } from '../util/reallyJsonStringify';

/**
 * An error that wraps job errors.
 *
 * Should not be instantiated directly, except by `JobQueue`.
 */
export class JobError extends Error {
  constructor(public readonly lastErrorThrownByJob: unknown) {
    super(`Job failed. Last error: ${formatError(lastErrorThrownByJob)}`);
  }
}

function formatError(err: unknown): string {
  if (err instanceof Error) {
    return err.message;
  }
  return reallyJsonStringify(err);
}