2023-04-17 11:58:21 +00:00
|
|
|
import { NextApiResponse } from "next";
|
2023-05-05 06:15:47 +00:00
|
|
|
|
2023-08-02 09:46:32 +00:00
|
|
|
import { AvalaraError } from "avatax/lib/AvaTaxClient";
|
|
|
|
import { ZodError } from "zod";
|
2023-05-05 06:15:47 +00:00
|
|
|
import { createLogger, Logger } from "../../lib/logger";
|
2023-04-17 11:58:21 +00:00
|
|
|
|
2023-08-01 08:24:16 +00:00
|
|
|
class WebhookErrorResolver {
|
2023-04-17 11:58:21 +00:00
|
|
|
private logger: Logger;
|
2023-08-01 08:24:16 +00:00
|
|
|
constructor() {
|
|
|
|
this.logger = createLogger({ event: "WebhookErrorResolver" });
|
2023-05-29 08:35:34 +00:00
|
|
|
}
|
|
|
|
|
2023-08-02 09:46:32 +00:00
|
|
|
private resolveErrorMessage(error: unknown) {
|
|
|
|
if (error instanceof ZodError) {
|
|
|
|
this.logger.error(error.message, "Unexpected Zod error caught:");
|
|
|
|
this.logger.debug(error.stack, "Error details:");
|
|
|
|
return error.message;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (error instanceof AvalaraError) {
|
|
|
|
this.logger.error(error.message, "Unexpected Avalara error caught:");
|
|
|
|
this.logger.debug(error.stack, "Error stack:");
|
|
|
|
this.logger.debug(error.target, "Error target:");
|
|
|
|
return error.message;
|
|
|
|
}
|
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
if (error instanceof Error) {
|
|
|
|
this.logger.error(error.stack, "Unexpected error caught:");
|
2023-08-01 08:24:16 +00:00
|
|
|
return error.message;
|
2023-05-29 08:35:34 +00:00
|
|
|
}
|
2023-08-02 09:46:32 +00:00
|
|
|
|
2023-08-01 08:24:16 +00:00
|
|
|
return "Internal server error";
|
2023-05-29 08:35:34 +00:00
|
|
|
}
|
|
|
|
|
2023-08-01 08:24:16 +00:00
|
|
|
resolve(error: unknown) {
|
2023-08-02 09:46:32 +00:00
|
|
|
return this.resolveErrorMessage(error);
|
2023-05-29 08:35:34 +00:00
|
|
|
}
|
2023-08-01 08:24:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export class WebhookResponse {
|
|
|
|
private logger: Logger;
|
|
|
|
constructor(private res: NextApiResponse) {
|
|
|
|
this.logger = createLogger({ event: "WebhookResponse" });
|
|
|
|
}
|
|
|
|
|
|
|
|
error(error: unknown) {
|
|
|
|
const errorResolver = new WebhookErrorResolver();
|
|
|
|
const errorMessage = errorResolver.resolve(error);
|
|
|
|
|
|
|
|
this.logger.debug({ errorMessage }, "Responding to Saleor with error:");
|
|
|
|
|
|
|
|
return this.res.status(500).json({ error: errorMessage });
|
|
|
|
}
|
2023-05-29 08:35:34 +00:00
|
|
|
|
|
|
|
success(data?: unknown) {
|
2023-08-01 08:24:16 +00:00
|
|
|
return this.res.status(200).json(data ?? {});
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|
|
|
|
}
|