2023-06-20 15:53:27 +00:00
|
|
|
import { AuthData } from "@saleor/app-sdk/APL";
|
2023-04-17 11:58:21 +00:00
|
|
|
import {
|
2023-08-10 11:08:20 +00:00
|
|
|
OrderConfirmedSubscriptionFragment,
|
2023-04-17 11:58:21 +00:00
|
|
|
OrderCreatedSubscriptionFragment,
|
|
|
|
OrderFulfilledSubscriptionFragment,
|
|
|
|
TaxBaseFragment,
|
|
|
|
} from "../../../generated/graphql";
|
2023-05-29 08:35:34 +00:00
|
|
|
import { Logger, createLogger } from "../../lib/logger";
|
2023-08-10 11:08:20 +00:00
|
|
|
import { OrderCancelledPayload } from "../../pages/api/webhooks/order-cancelled";
|
2023-04-17 11:58:21 +00:00
|
|
|
import { ProviderWebhookService } from "../taxes/tax-provider-webhook";
|
|
|
|
import { AvataxClient } from "./avatax-client";
|
2023-06-15 07:01:50 +00:00
|
|
|
import { AvataxConfig, defaultAvataxConfig } from "./avatax-connection-schema";
|
2023-05-29 08:35:34 +00:00
|
|
|
import { AvataxCalculateTaxesAdapter } from "./calculate-taxes/avatax-calculate-taxes-adapter";
|
2023-08-10 11:08:20 +00:00
|
|
|
import { AvataxOrderCancelledAdapter } from "./order-cancelled/avatax-order-cancelled-adapter";
|
|
|
|
import { AvataxOrderConfirmedAdapter } from "./order-confirmed/avatax-order-confirmed-adapter";
|
2023-05-29 08:35:34 +00:00
|
|
|
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
|
|
|
|
2023-06-20 15:53:27 +00:00
|
|
|
constructor(config: AvataxConfig, private authData: AuthData) {
|
2023-04-17 11:58:21 +00:00
|
|
|
this.logger = createLogger({
|
2023-06-20 15:53:27 +00:00
|
|
|
name: "AvataxWebhookService",
|
2023-04-17 11:58:21 +00:00
|
|
|
});
|
|
|
|
const avataxClient = new AvataxClient(config);
|
|
|
|
|
|
|
|
this.config = config;
|
|
|
|
this.client = avataxClient;
|
|
|
|
}
|
|
|
|
|
2023-06-15 07:01:50 +00:00
|
|
|
async calculateTaxes(taxBase: TaxBaseFragment) {
|
2023-06-20 15:53:27 +00:00
|
|
|
const adapter = new AvataxCalculateTaxesAdapter(this.config, this.authData);
|
2023-05-29 08:35:34 +00:00
|
|
|
|
2023-06-15 07:01:50 +00:00
|
|
|
const response = await adapter.send({ taxBase });
|
2023-05-29 08:35:34 +00:00
|
|
|
|
|
|
|
return response;
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|
|
|
|
|
2023-08-10 11:08:20 +00:00
|
|
|
async confirmOrder(order: OrderConfirmedSubscriptionFragment) {
|
|
|
|
const adapter = new AvataxOrderConfirmedAdapter(this.config, this.authData);
|
2023-04-17 11:58:21 +00:00
|
|
|
|
2023-06-15 07:01:50 +00:00
|
|
|
const response = await adapter.send({ order });
|
2023-05-29 08:35:34 +00:00
|
|
|
|
|
|
|
return response;
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|
|
|
|
|
2023-08-10 11:08:20 +00:00
|
|
|
/**
|
|
|
|
* @deprecated This method is deprecated and will be removed in the future.
|
|
|
|
*/
|
2023-06-15 07:01:50 +00:00
|
|
|
async fulfillOrder(order: OrderFulfilledSubscriptionFragment) {
|
2023-05-29 08:35:34 +00:00
|
|
|
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
|
|
|
return response;
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|
2023-08-10 11:08:20 +00:00
|
|
|
|
|
|
|
async cancelOrder(payload: OrderCancelledPayload) {
|
|
|
|
const adapter = new AvataxOrderCancelledAdapter(this.config);
|
|
|
|
|
|
|
|
await adapter.send(payload);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @deprecated This method is deprecated and will be removed in the future.
|
|
|
|
*/
|
|
|
|
async createOrder(payload: OrderCreatedSubscriptionFragment) {
|
|
|
|
const adapter = new AvataxOrderCreatedAdapter(this.config, this.authData);
|
|
|
|
|
|
|
|
const response = await adapter.send({ order: payload });
|
|
|
|
|
|
|
|
return response;
|
|
|
|
}
|
2023-04-17 11:58:21 +00:00
|
|
|
}
|