From 72adeb3b136529731e92ed75cfa18ea1a50aa3ae Mon Sep 17 00:00:00 2001 From: Adrian Pilarczyk Date: Mon, 15 May 2023 11:52:14 +0200 Subject: [PATCH] replace failureRetry/failureNoRetry webhook response with failure (#462) * refactor: :recycle: replace failureRetry/failureNoRetry webhook response with failure * build: :construction_worker: add changeset * refactor: :recycle: address feedback --- .changeset/hot-numbers-hide.md | 5 +++++ apps/taxes/src/modules/app/webhook-response.ts | 11 +++-------- .../pages/api/webhooks/checkout-calculate-taxes.ts | 6 +++--- .../src/pages/api/webhooks/order-calculate-taxes.ts | 6 +++--- apps/taxes/src/pages/api/webhooks/order-created.ts | 8 ++++---- apps/taxes/src/pages/api/webhooks/order-fulfilled.ts | 6 +++--- 6 files changed, 21 insertions(+), 21 deletions(-) create mode 100644 .changeset/hot-numbers-hide.md diff --git a/.changeset/hot-numbers-hide.md b/.changeset/hot-numbers-hide.md new file mode 100644 index 0000000..39a823d --- /dev/null +++ b/.changeset/hot-numbers-hide.md @@ -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. diff --git a/apps/taxes/src/modules/app/webhook-response.ts b/apps/taxes/src/modules/app/webhook-response.ts index b486393..be0f381 100644 --- a/apps/taxes/src/modules/app/webhook-response.ts +++ b/apps/taxes/src/modules/app/webhook-response.ts @@ -13,14 +13,9 @@ export class WebhookResponse { this.logger = createLogger({ event: "WebhookResponse" }); } - failureNoRetry(error: string) { - this.logger.debug({ error }, "failureNoRetry called with:"); - return this.res.status(200).json({ success: false, error }); - } - - failureRetry(error: string) { - this.logger.error({ error }, "failureRetry called with:"); - return this.res.status(500).json({ success: false, error }); + failure(error: string) { + this.logger.debug({ error }, "failure called with:"); + return this.res.status(500).json({ error }); } success(data?: any) { diff --git a/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts b/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts index 10b5d83..0989f0b 100644 --- a/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts +++ b/apps/taxes/src/pages/api/webhooks/checkout-calculate-taxes.ts @@ -48,7 +48,7 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res, logger.info("Payload validated succesfully"); } catch (error) { logger.info("Returning no data"); - return webhookResponse.failureNoRetry("Payload is invalid"); + return webhookResponse.failure("Payload is invalid"); } try { @@ -58,7 +58,7 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res, if (!activeTaxProvider.ok) { logger.info("Returning no data"); - return webhookResponse.failureNoRetry(activeTaxProvider.error); + return webhookResponse.failure(activeTaxProvider.error); } logger.info({ activeTaxProvider }, "Fetched activeTaxProvider"); @@ -69,6 +69,6 @@ export default checkoutCalculateTaxesSyncWebhook.createHandler(async (req, res, return webhookResponse.success(ctx.buildResponse(calculatedTaxes)); } catch (error) { logger.error({ error }); - return webhookResponse.failureRetry("Error while calculating taxes"); + return webhookResponse.failure("Error while calculating taxes"); } }); diff --git a/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts b/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts index 14b3023..2502c73 100644 --- a/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts +++ b/apps/taxes/src/pages/api/webhooks/order-calculate-taxes.ts @@ -48,7 +48,7 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx logger.info("Payload validated succesfully"); } catch (error) { logger.info("Returning no data"); - return webhookResponse.failureNoRetry("Payload is invalid"); + return webhookResponse.failure("Payload is invalid"); } try { @@ -58,7 +58,7 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx if (!activeTaxProvider.ok) { logger.info("Returning no data"); - return webhookResponse.failureNoRetry(activeTaxProvider.error); + return webhookResponse.failure(activeTaxProvider.error); } logger.info({ activeTaxProvider }, "Fetched activeTaxProvider"); @@ -69,6 +69,6 @@ export default orderCalculateTaxesSyncWebhook.createHandler(async (req, res, ctx return webhookResponse.success(ctx.buildResponse(calculatedTaxes)); } catch (error) { logger.error({ error }); - return webhookResponse.failureRetry("Error while calculating taxes"); + return webhookResponse.failure("Error while calculating taxes"); } }); diff --git a/apps/taxes/src/pages/api/webhooks/order-created.ts b/apps/taxes/src/pages/api/webhooks/order-created.ts index e920e9c..ef718c7 100644 --- a/apps/taxes/src/pages/api/webhooks/order-created.ts +++ b/apps/taxes/src/pages/api/webhooks/order-created.ts @@ -78,7 +78,7 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => { if (!activeTaxProvider.ok) { logger.info("Returning no data"); - return webhookResponse.failureNoRetry(activeTaxProvider.error); + return webhookResponse.failure(activeTaxProvider.error); } 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 if (!payload.order) { - return webhookResponse.failureNoRetry("Insufficient order data"); + return webhookResponse.failure("Insufficient order data"); } 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); @@ -104,6 +104,6 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => { return webhookResponse.success(); } catch (error) { logger.error({ error }); - return webhookResponse.failureRetry("Error while creating order in tax provider"); + return webhookResponse.failure("Error while creating order in tax provider"); } }); diff --git a/apps/taxes/src/pages/api/webhooks/order-fulfilled.ts b/apps/taxes/src/pages/api/webhooks/order-fulfilled.ts index 6320e4b..8bad013 100644 --- a/apps/taxes/src/pages/api/webhooks/order-fulfilled.ts +++ b/apps/taxes/src/pages/api/webhooks/order-fulfilled.ts @@ -40,7 +40,7 @@ export default orderFulfilledAsyncWebhook.createHandler(async (req, res, ctx) => if (!activeTaxProvider.ok) { logger.info("Returning no data"); - return webhookResponse.failureNoRetry(activeTaxProvider.error); + return webhookResponse.failure(activeTaxProvider.error); } 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 if (!payload.order) { - return webhookResponse.failureNoRetry("Insufficient order data"); + return webhookResponse.failure("Insufficient order data"); } const fulfilledOrder = await taxProvider.fulfillOrder(payload.order); @@ -56,6 +56,6 @@ export default orderFulfilledAsyncWebhook.createHandler(async (req, res, ctx) => return webhookResponse.success(); } catch (error) { - return webhookResponse.failureRetry("Error while fulfilling tax provider order"); + return webhookResponse.failure("Error while fulfilling tax provider order"); } });