replace failureRetry/failureNoRetry webhook response with failure (#462)

* refactor: ♻️ replace failureRetry/failureNoRetry webhook response with failure

* build: 👷 add changeset

* refactor: ♻️ address feedback
This commit is contained in:
Adrian Pilarczyk 2023-05-15 11:52:14 +02:00 committed by GitHub
parent 842b7b9cdb
commit 72adeb3b13
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 21 additions and 21 deletions

View file

@ -0,0 +1,5 @@
---
"saleor-app-taxes": minor
---
Changed behavior of failed webhooks. The app will now return status 500 if the operation failed. Previously, it returned status 200 with an error message in the response body.

View file

@ -13,14 +13,9 @@ export class WebhookResponse {
this.logger = createLogger({ event: "WebhookResponse" }); this.logger = createLogger({ event: "WebhookResponse" });
} }
failureNoRetry(error: string) { failure(error: string) {
this.logger.debug({ error }, "failureNoRetry called with:"); this.logger.debug({ error }, "failure called with:");
return this.res.status(200).json({ success: false, error }); return this.res.status(500).json({ error });
}
failureRetry(error: string) {
this.logger.error({ error }, "failureRetry called with:");
return this.res.status(500).json({ success: false, error });
} }
success(data?: any) { success(data?: any) {

View file

@ -48,7 +48,7 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res,
logger.info("Payload validated succesfully"); logger.info("Payload validated succesfully");
} catch (error) { } catch (error) {
logger.info("Returning no data"); logger.info("Returning no data");
return webhookResponse.failureNoRetry("Payload is invalid"); return webhookResponse.failure("Payload is invalid");
} }
try { try {
@ -58,7 +58,7 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res,
if (!activeTaxProvider.ok) { if (!activeTaxProvider.ok) {
logger.info("Returning no data"); logger.info("Returning no data");
return webhookResponse.failureNoRetry(activeTaxProvider.error); return webhookResponse.failure(activeTaxProvider.error);
} }
logger.info({ activeTaxProvider }, "Fetched activeTaxProvider"); logger.info({ activeTaxProvider }, "Fetched activeTaxProvider");
@ -69,6 +69,6 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res,
return webhookResponse.success(ctx.buildResponse(calculatedTaxes)); return webhookResponse.success(ctx.buildResponse(calculatedTaxes));
} catch (error) { } catch (error) {
logger.error({ error }); logger.error({ error });
return webhookResponse.failureRetry("Error while calculating taxes"); return webhookResponse.failure("Error while calculating taxes");
} }
}); });

View file

@ -48,7 +48,7 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx
logger.info("Payload validated succesfully"); logger.info("Payload validated succesfully");
} catch (error) { } catch (error) {
logger.info("Returning no data"); logger.info("Returning no data");
return webhookResponse.failureNoRetry("Payload is invalid"); return webhookResponse.failure("Payload is invalid");
} }
try { try {
@ -58,7 +58,7 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx
if (!activeTaxProvider.ok) { if (!activeTaxProvider.ok) {
logger.info("Returning no data"); logger.info("Returning no data");
return webhookResponse.failureNoRetry(activeTaxProvider.error); return webhookResponse.failure(activeTaxProvider.error);
} }
logger.info({ activeTaxProvider }, "Fetched activeTaxProvider"); logger.info({ activeTaxProvider }, "Fetched activeTaxProvider");
@ -69,6 +69,6 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx
return webhookResponse.success(ctx.buildResponse(calculatedTaxes)); return webhookResponse.success(ctx.buildResponse(calculatedTaxes));
} catch (error) { } catch (error) {
logger.error({ error }); logger.error({ error });
return webhookResponse.failureRetry("Error while calculating taxes"); return webhookResponse.failure("Error while calculating taxes");
} }
}); });

View file

@ -78,7 +78,7 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => {
if (!activeTaxProvider.ok) { if (!activeTaxProvider.ok) {
logger.info("Returning no data"); logger.info("Returning no data");
return webhookResponse.failureNoRetry(activeTaxProvider.error); return webhookResponse.failure(activeTaxProvider.error);
} }
logger.info({ activeTaxProvider }, "Fetched activeTaxProvider"); logger.info({ activeTaxProvider }, "Fetched activeTaxProvider");
@ -86,11 +86,11 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => {
// todo: figure out what fields are needed and add validation // todo: figure out what fields are needed and add validation
if (!payload.order) { if (!payload.order) {
return webhookResponse.failureNoRetry("Insufficient order data"); return webhookResponse.failure("Insufficient order data");
} }
if (payload.order.status === OrderStatus.Fulfilled) { if (payload.order.status === OrderStatus.Fulfilled) {
return webhookResponse.failureNoRetry("Skipping fulfilled order to prevent duplication"); return webhookResponse.failure("Skipping fulfilled order to prevent duplication");
} }
const createdOrder = await taxProvider.createOrder(payload.order); const createdOrder = await taxProvider.createOrder(payload.order);
@ -104,6 +104,6 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => {
return webhookResponse.success(); return webhookResponse.success();
} catch (error) { } catch (error) {
logger.error({ error }); logger.error({ error });
return webhookResponse.failureRetry("Error while creating order in tax provider"); return webhookResponse.failure("Error while creating order in tax provider");
} }
}); });

View file

@ -40,7 +40,7 @@ export default orderFulfilledAsyncWebhook.createHandler(async (req, res, ctx) =>
if (!activeTaxProvider.ok) { if (!activeTaxProvider.ok) {
logger.info("Returning no data"); logger.info("Returning no data");
return webhookResponse.failureNoRetry(activeTaxProvider.error); return webhookResponse.failure(activeTaxProvider.error);
} }
logger.info({ activeTaxProvider }, "Fetched activeTaxProvider"); logger.info({ activeTaxProvider }, "Fetched activeTaxProvider");
@ -48,7 +48,7 @@ export default orderFulfilledAsyncWebhook.createHandler(async (req, res, ctx) =>
// todo: figure out what fields are needed and add validation // todo: figure out what fields are needed and add validation
if (!payload.order) { if (!payload.order) {
return webhookResponse.failureNoRetry("Insufficient order data"); return webhookResponse.failure("Insufficient order data");
} }
const fulfilledOrder = await taxProvider.fulfillOrder(payload.order); const fulfilledOrder = await taxProvider.fulfillOrder(payload.order);
@ -56,6 +56,6 @@ export default orderFulfilledAsyncWebhook.createHandler(async (req, res, ctx) =>
return webhookResponse.success(); return webhookResponse.success();
} catch (error) { } catch (error) {
return webhookResponse.failureRetry("Error while fulfilling tax provider order"); return webhookResponse.failure("Error while fulfilling tax provider order");
} }
}); });