From c490e08142dbe76a949bd63aada73672c7ad6cf9 Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Fri, 10 Jan 2025 02:16:33 +0100 Subject: [PATCH] fix(modules): Fix miss leading provider resolution error (#10900) FIXES SUP-560 **What** Currently, no matter the error when looking for a provider to exists in the container we are throwing a normalized error stating that the provider does not exists in the container. The issue is that the first initialization of the provider occurs the first time we resolve it, and the error can be that the provider failed to be instanciated for any reason. In this pr, we are explicitly checking for the error to be an awilix resolution error to throw the classic error and otherwise we provide the issue why the provider failed to be resolved. --- .../__tests__/auth-module-service/index.spec.ts | 5 +++-- .../modules/auth/src/services/auth-provider.ts | 13 +++++++++---- .../src/services/fulfillment-provider.ts | 13 +++++++++---- .../locking/src/services/locking-provider.ts | 13 +++++++++---- .../src/services/notification-provider.ts | 13 +++++++++---- .../payment/src/services/payment-provider.ts | 16 +++++++++------- 6 files changed, 48 insertions(+), 25 deletions(-) diff --git a/packages/modules/auth/integration-tests/__tests__/auth-module-service/index.spec.ts b/packages/modules/auth/integration-tests/__tests__/auth-module-service/index.spec.ts index 5f53ed9f12..cf185e4198 100644 --- a/packages/modules/auth/integration-tests/__tests__/auth-module-service/index.spec.ts +++ b/packages/modules/auth/integration-tests/__tests__/auth-module-service/index.spec.ts @@ -84,8 +84,9 @@ moduleIntegrationTestRunner({ expect(err).toEqual({ success: false, - error: - "\n Unable to retrieve the auth provider with id: facebook\n Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file.\n ", + error: ` +Unable to retrieve the auth provider with id: facebook +Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file.`, }) }) diff --git a/packages/modules/auth/src/services/auth-provider.ts b/packages/modules/auth/src/services/auth-provider.ts index 193d9f412f..f919faba84 100644 --- a/packages/modules/auth/src/services/auth-provider.ts +++ b/packages/modules/auth/src/services/auth-provider.ts @@ -31,11 +31,16 @@ export default class AuthProviderService { try { return this.dependencies[`${AuthProviderRegistrationPrefix}${providerId}`] } catch (err) { - const errMessage = ` - Unable to retrieve the auth provider with id: ${providerId} - Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file. - ` + if (err.name === "AwilixResolutionError") { + const errMessage = ` +Unable to retrieve the auth provider with id: ${providerId} +Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file.` + throw new Error(errMessage) + } + + const errMessage = `Unable to retrieve the auth provider with id: ${providerId}, the following error occurred: ${err.message}` this.#logger.error(errMessage) + throw new Error(errMessage) } } diff --git a/packages/modules/fulfillment/src/services/fulfillment-provider.ts b/packages/modules/fulfillment/src/services/fulfillment-provider.ts index f667ed2945..104410fc25 100644 --- a/packages/modules/fulfillment/src/services/fulfillment-provider.ts +++ b/packages/modules/fulfillment/src/services/fulfillment-provider.ts @@ -62,11 +62,16 @@ export default class FulfillmentProviderService extends ModulesSdkUtils.MedusaIn try { return this.__container__[`fp_${providerId}`] } catch (err) { - const errMessage = ` - Unable to retrieve the fulfillment provider with id: ${providerId} - Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file. - ` + if (err.name === "AwilixResolutionError") { + const errMessage = ` +Unable to retrieve the fulfillment provider with id: ${providerId} +Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file.` + throw new Error(errMessage) + } + + const errMessage = `Unable to retrieve the fulfillment provider with id: ${providerId}, the following error occurred: ${err.message}` this.#logger.error(errMessage) + throw new Error(errMessage) } } diff --git a/packages/modules/locking/src/services/locking-provider.ts b/packages/modules/locking/src/services/locking-provider.ts index d876a51ffe..75e972dc70 100644 --- a/packages/modules/locking/src/services/locking-provider.ts +++ b/packages/modules/locking/src/services/locking-provider.ts @@ -40,11 +40,16 @@ export default class LockingProviderService { `${LockingProviderRegistrationPrefix}${providerId}` ] } catch (err) { - const errMessage = ` - Unable to retrieve the locking provider with id: ${providerId} - Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file. - ` + if (err.name === "AwilixResolutionError") { + const errMessage = ` + Unable to retrieve the locking provider with id: ${providerId} +Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file.` + throw new Error(errMessage) + } + + const errMessage = `Unable to retrieve the locking provider with id: ${providerId}, the following error occurred: ${err.message}` this.#logger.error(errMessage) + throw new Error(errMessage) } } diff --git a/packages/modules/notification/src/services/notification-provider.ts b/packages/modules/notification/src/services/notification-provider.ts index 26fdb3f81b..54ae334856 100644 --- a/packages/modules/notification/src/services/notification-provider.ts +++ b/packages/modules/notification/src/services/notification-provider.ts @@ -54,11 +54,16 @@ export default class NotificationProviderService extends ModulesSdkUtils.MedusaI `${NotificationProviderRegistrationPrefix}${providerId}` ] } catch (err) { - const errMessage = ` - Unable to retrieve the notification provider with id: ${providerId} - Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file. - ` + if (err.name === "AwilixResolutionError") { + const errMessage = ` +Unable to retrieve the notification provider with id: ${providerId} +Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file.` + throw new Error(errMessage) + } + + const errMessage = `Unable to retrieve the notification provider with id: ${providerId}, the following error occurred: ${err.message}` this.#logger.error(errMessage) + throw new Error(errMessage) } } diff --git a/packages/modules/payment/src/services/payment-provider.ts b/packages/modules/payment/src/services/payment-provider.ts index e996dd30ae..bfb8fc6a67 100644 --- a/packages/modules/payment/src/services/payment-provider.ts +++ b/packages/modules/payment/src/services/payment-provider.ts @@ -42,14 +42,16 @@ export default class PaymentProviderService extends ModulesSdkUtils.MedusaIntern retrieveProvider(providerId: string): IPaymentProvider { try { return this.__container__[providerId] as IPaymentProvider - } catch (e) { - const errMessage = ` - Unable to retrieve the payment provider with id: ${providerId} - Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file. - ` + } catch (err) { + if (err.name === "AwilixResolutionError") { + const errMessage = ` +Unable to retrieve the payment provider with id: ${providerId} +Please make sure that the provider is registered in the container and it is configured correctly in your project configuration file.` + throw new Error(errMessage) + } - // Ensure that the logger captures the actual error - this.#logger.error(e) + const errMessage = `Unable to retrieve the payment provider with id: ${providerId}, the following error occurred: ${err.message}` + this.#logger.error(errMessage) throw new Error(errMessage) }