diff --git a/.changeset/khaki-berries-impress.md b/.changeset/khaki-berries-impress.md new file mode 100644 index 0000000000..b8f4c898f5 --- /dev/null +++ b/.changeset/khaki-berries-impress.md @@ -0,0 +1,6 @@ +--- +"@medusajs/tax": patch +"@medusajs/types": patch +--- + +feat(tax,types): Add method to retrieve a Tax Module Provider's service diff --git a/packages/core/types/src/tax/service.ts b/packages/core/types/src/tax/service.ts index 16945076f6..4ef6e29f27 100644 --- a/packages/core/types/src/tax/service.ts +++ b/packages/core/types/src/tax/service.ts @@ -25,6 +25,7 @@ import { UpdateTaxRegionDTO, UpsertTaxRateDTO, } from "./mutations" +import { ITaxProvider } from "./provider" /** * The main service interface for the Tax Module. @@ -915,4 +916,17 @@ export interface ITaxModuleService extends IModuleService { config?: RestoreReturn, sharedContext?: Context ): Promise | void> + + /** + * This method returns the service of a Tax Module Provider by its ID. A Tax Module Provider's ID is of the format + * `tp_{identifier}_{id}`, where `identifier` is the static `identifier` property defined in the provider's service, + * and `id` is the ID set in `medusa-config.ts` when registering the provider. + * + * @returns {ITaxProvider} An instance of the Tax Module Provider's service. + * + * @example + * const avalaraProvider = taxModuleService.getProvider("tp_avalara_avalara") + * // TODO: perform custom actions with the provider + */ + getProvider(providerId: string): ITaxProvider } diff --git a/packages/modules/tax/integration-tests/__tests__/index.spec.ts b/packages/modules/tax/integration-tests/__tests__/index.spec.ts index 87eb559c5f..52ea965603 100644 --- a/packages/modules/tax/integration-tests/__tests__/index.spec.ts +++ b/packages/modules/tax/integration-tests/__tests__/index.spec.ts @@ -1177,6 +1177,12 @@ moduleIntegrationTestRunner({ }), ]) }) + + it("should retrieve a tax module provider's service", async () => { + const providerService = service.getProvider("tp_system") + expect(providerService).toBeDefined() + expect(providerService.getIdentifier()).toEqual("system") + }) }) }, }) diff --git a/packages/modules/tax/src/services/tax-module-service.ts b/packages/modules/tax/src/services/tax-module-service.ts index 597089e5dd..fc4173b931 100644 --- a/packages/modules/tax/src/services/tax-module-service.ts +++ b/packages/modules/tax/src/services/tax-module-service.ts @@ -508,6 +508,10 @@ export default class TaxModuleService return taxLines } + getProvider(providerId: string): ITaxProvider { + return this.taxProviderService_.retrieveProvider(providerId) + } + private async getTaxLinesFromProvider( providerId: string, items: ItemWithRates[],