2023-04-17 11:58:21 +00:00
|
|
|
import {
|
|
|
|
OrderCreatedSubscriptionFragment,
|
|
|
|
OrderFulfilledSubscriptionFragment,
|
|
|
|
TaxBaseFragment,
|
|
|
|
} from "../../../generated/graphql";
|
2023-05-29 08:35:34 +00:00
|
|
|
import { Logger, createLogger } from "../../lib/logger";
|
2023-04-17 11:58:21 +00:00
|
|
|
import { ChannelConfig } from "../channels-configuration/channels-config";
|
|
|
|
import { ProviderWebhookService } from "../taxes/tax-provider-webhook";
|
|
|
|
import { AvataxClient } from "./avatax-client";
|
|
|
|
import { AvataxConfig, defaultAvataxConfig } from "./avatax-config";
|
2023-05-29 08:35:34 +00:00
|
|
|
import { AvataxCalculateTaxesAdapter } from "./calculate-taxes/avatax-calculate-taxes-adapter";
|
|
|
|
import { AvataxOrderCreatedAdapter } from "./order-created/avatax-order-created-adapter";
|
|
|
|
import { AvataxOrderFulfilledAdapter } from "./order-fulfilled/avatax-order-fulfilled-adapter";
|
2023-04-17 11:58:21 +00:00
|
|
|
|
|
|
|
export class AvataxWebhookService implements ProviderWebhookService {
|
|
|
|
config = defaultAvataxConfig;
|
|
|
|
client: AvataxClient;
|
2023-05-05 06:15:47 +00:00
|
|
|
private logger: Logger;
|
2023-04-17 11:58:21 +00:00
|
|
|
|
|
|
|
constructor(config: AvataxConfig) {
|
|
|
|
this.logger = createLogger({
|
|
|
|
service: "AvataxWebhookService",
|
|
|
|
});
|
|
|
|
const avataxClient = new AvataxClient(config);
|
|
|
|
|
|
|
|
this.logger.trace({ client: avataxClient }, "Internal Avatax client created");
|
|
|
|
|
|
|
|
this.config = config;
|
|
|
|
this.client = avataxClient;
|
|
|
|
}
|
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
async calculateTaxes(taxBase: TaxBaseFragment, channelConfig: ChannelConfig) {
|
|
|
|
this.logger.debug({ taxBase, channelConfig }, "calculateTaxes called with:");
|
|
|
|
const adapter = new AvataxCalculateTaxesAdapter(this.config);
|
|
|
|
|
|
|
|
const response = await adapter.send({ channelConfig, taxBase });
|
2023-04-17 11:58:21 +00:00
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
this.logger.debug({ response }, "calculateTaxes response:");
|
|
|
|
|
|
|
|
return response;
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
async createOrder(order: OrderCreatedSubscriptionFragment, channelConfig: ChannelConfig) {
|
|
|
|
this.logger.debug({ order, channelConfig }, "createOrder called with:");
|
|
|
|
|
|
|
|
const adapter = new AvataxOrderCreatedAdapter(this.config);
|
2023-04-17 11:58:21 +00:00
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
const response = await adapter.send({ channelConfig, order });
|
2023-04-17 11:58:21 +00:00
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
this.logger.debug({ response }, "createOrder response:");
|
|
|
|
|
|
|
|
return response;
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
async fulfillOrder(order: OrderFulfilledSubscriptionFragment, channelConfig: ChannelConfig) {
|
|
|
|
this.logger.debug({ order, channelConfig }, "fulfillOrder called with:");
|
|
|
|
|
|
|
|
const adapter = new AvataxOrderFulfilledAdapter(this.config);
|
|
|
|
|
|
|
|
const response = await adapter.send({ order });
|
2023-04-17 11:58:21 +00:00
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
this.logger.debug({ response }, "fulfillOrder response:");
|
2023-04-17 11:58:21 +00:00
|
|
|
|
2023-05-29 08:35:34 +00:00
|
|
|
return response;
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|
|
|
|
}
|