saleor-apps-redis_apl/apps/taxes/src/modules/taxjar/taxjar-client.ts
Adrian Pilarczyk d55b2f9b2a
fix/333 taxes not calculated (#345)
* refactor: 🔊 improve logging in taxes

* refactor: 🔥 redundant channels call

* refactor: ♻️ get app config from payload

* build: add changeset

* refactor: 🔊 routers info -> debug

* refactor: 🔊 redact logs
2023-03-30 13:12:52 +02:00

47 lines
1.4 KiB
TypeScript

import pino from "pino";
import TaxJar from "taxjar";
import { Config, TaxForOrderRes, TaxParams } from "taxjar/dist/util/types";
import { createLogger } from "../../lib/logger";
import { TaxJarConfig } from "./taxjar-config";
const createTaxJarSettings = (config: TaxJarConfig): Config => {
const settings: Config = {
apiKey: config.apiKey,
apiUrl: config.isSandbox ? TaxJar.SANDBOX_API_URL : TaxJar.DEFAULT_API_URL,
};
return settings;
};
export class TaxJarClient {
private client: TaxJar;
private logger: pino.Logger;
constructor(providerConfig: TaxJarConfig) {
this.logger = createLogger({ service: "TaxJarClient" });
this.logger.trace("TaxJarClient constructor");
const settings = createTaxJarSettings(providerConfig);
const taxJarClient = new TaxJar(settings);
this.logger.trace({ client: taxJarClient }, "External TaxJar client created");
this.client = taxJarClient;
}
async fetchTaxesForOrder(params: TaxParams) {
this.logger.debug({ params }, "fetchTaxesForOrder called with:");
const response: TaxForOrderRes = await this.client.taxForOrder(params);
return response;
}
async ping() {
this.logger.debug("ping called");
try {
await this.client.categories();
return { authenticated: true };
} catch (error) {
return {
authenticated: false,
error: "TaxJar was not able to authenticate with the provided credentials.",
};
}
}
}