refactor: ♻️ normalize avatax errors

This commit is contained in:
Adrian Pilarczyk 2023-09-26 15:39:46 +02:00
parent 24c31d733a
commit 20e8ed4086
4 changed files with 32 additions and 3 deletions

View file

@ -0,0 +1,17 @@
import { createLogger } from "../../lib/logger";
import { AvalaraError } from "avatax/lib/AvaTaxClient";
import { TaxExternalError, TaxUnexpectedError } from "../taxes/tax-error";
export class AvataxErrorNormalizer {
private logger = createLogger({ name: "AvataxErrorNormalizer" });
normalize(error: unknown) {
if (error instanceof AvalaraError) {
this.logger.debug(error.stack, "AvalaraError occurred");
return new TaxExternalError(error.message);
}
return TaxUnexpectedError.normalize(error);
}
}

View file

@ -8,6 +8,7 @@ import { AvataxConfig } from "../avatax-connection-schema";
import { ClientLogger } from "../../logs/client-logger"; import { ClientLogger } from "../../logs/client-logger";
import { AvataxCalculateTaxesPayloadService } from "./avatax-calculate-taxes-payload.service"; import { AvataxCalculateTaxesPayloadService } from "./avatax-calculate-taxes-payload.service";
import { AvataxCalculateTaxesResponseTransformer } from "./avatax-calculate-taxes-response-transformer"; import { AvataxCalculateTaxesResponseTransformer } from "./avatax-calculate-taxes-response-transformer";
import { AvataxErrorNormalizer } from "../avatax-error-normalizer";
export const SHIPPING_ITEM_CODE = "Shipping"; export const SHIPPING_ITEM_CODE = "Shipping";
@ -67,6 +68,8 @@ export class AvataxCalculateTaxesAdapter
return transformedResponse; return transformedResponse;
} catch (error) { } catch (error) {
const errorNormalizer = new AvataxErrorNormalizer();
this.clientLogger.push({ this.clientLogger.push({
event: "[CalculateTaxes] createTransaction", event: "[CalculateTaxes] createTransaction",
status: "error", status: "error",
@ -75,7 +78,7 @@ export class AvataxCalculateTaxesAdapter
output: error, output: error,
}, },
}); });
throw error; throw errorNormalizer.normalize(error);
} }
} }
} }

View file

@ -5,6 +5,7 @@ import { AvataxClient, VoidTransactionArgs } from "../avatax-client";
import { AvataxConfig } from "../avatax-connection-schema"; import { AvataxConfig } from "../avatax-connection-schema";
import { ClientLogger } from "../../logs/client-logger"; import { ClientLogger } from "../../logs/client-logger";
import { AvataxOrderCancelledPayloadTransformer } from "./avatax-order-cancelled-payload-transformer"; import { AvataxOrderCancelledPayloadTransformer } from "./avatax-order-cancelled-payload-transformer";
import { AvataxErrorNormalizer } from "../avatax-error-normalizer";
export type AvataxOrderCancelledTarget = VoidTransactionArgs; export type AvataxOrderCancelledTarget = VoidTransactionArgs;
@ -43,6 +44,8 @@ export class AvataxOrderCancelledAdapter implements WebhookAdapter<OrderCancelle
this.logger.debug(`Successfully voided the transaction of id: ${target.transactionCode}`); this.logger.debug(`Successfully voided the transaction of id: ${target.transactionCode}`);
} catch (error) { } catch (error) {
const errorNormalizer = new AvataxErrorNormalizer();
this.clientLogger.push({ this.clientLogger.push({
event: "[OrderCancelled] voidTransaction", event: "[OrderCancelled] voidTransaction",
status: "error", status: "error",
@ -51,6 +54,8 @@ export class AvataxOrderCancelledAdapter implements WebhookAdapter<OrderCancelle
output: error, output: error,
}, },
}); });
throw errorNormalizer.normalize(error);
} }
} }
} }

View file

@ -1,13 +1,14 @@
import { AuthData } from "@saleor/app-sdk/APL"; import { AuthData } from "@saleor/app-sdk/APL";
import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql"; import { OrderConfirmedSubscriptionFragment } from "../../../../generated/graphql";
import { Logger, createLogger } from "../../../lib/logger"; import { Logger, createLogger } from "../../../lib/logger";
import { ClientLogger } from "../../logs/client-logger";
import { CreateOrderResponse } from "../../taxes/tax-provider-webhook"; import { CreateOrderResponse } from "../../taxes/tax-provider-webhook";
import { WebhookAdapter } from "../../taxes/tax-webhook-adapter"; import { WebhookAdapter } from "../../taxes/tax-webhook-adapter";
import { AvataxClient } from "../avatax-client"; import { AvataxClient } from "../avatax-client";
import { AvataxConfig } from "../avatax-connection-schema"; import { AvataxConfig } from "../avatax-connection-schema";
import { ClientLogger } from "../../logs/client-logger";
import { AvataxOrderConfirmedPayloadService } from "./avatax-order-confirmed-payload.service"; import { AvataxOrderConfirmedPayloadService } from "./avatax-order-confirmed-payload.service";
import { AvataxOrderConfirmedResponseTransformer } from "./avatax-order-confirmed-response-transformer"; import { AvataxOrderConfirmedResponseTransformer } from "./avatax-order-confirmed-response-transformer";
import { AvataxErrorNormalizer } from "../avatax-error-normalizer";
type AvataxOrderConfirmedPayload = { type AvataxOrderConfirmedPayload = {
order: OrderConfirmedSubscriptionFragment; order: OrderConfirmedSubscriptionFragment;
@ -68,6 +69,8 @@ export class AvataxOrderConfirmedAdapter
return transformedResponse; return transformedResponse;
} catch (error) { } catch (error) {
const errorNormalizer = new AvataxErrorNormalizer();
this.clientLogger.push({ this.clientLogger.push({
event: "[OrderConfirmed] createTransaction", event: "[OrderConfirmed] createTransaction",
status: "error", status: "error",
@ -76,7 +79,8 @@ export class AvataxOrderConfirmedAdapter
output: error, output: error,
}, },
}); });
throw error;
throw errorNormalizer.normalize(error);
} }
} }
} }