* chore: Update modules providers configuration with 'identifier' and 'PROVIDER' * update check * fix tests * type * normalize auth provider * emailpass * providers --------- Co-authored-by: Carlos R. L. Rodrigues <rodrigolr@gmail.com> Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
import { moduleProviderLoader } from "@medusajs/framework/modules-sdk"
|
|
import {
|
|
CreatePaymentProviderDTO,
|
|
LoaderOptions,
|
|
ModuleProvider,
|
|
ModulesSdkTypes,
|
|
} from "@medusajs/framework/types"
|
|
import { asFunction, asValue, Lifetime } from "awilix"
|
|
import { MedusaError } from "@medusajs/framework/utils"
|
|
|
|
import { PaymentProviderService } from "@services"
|
|
import * as providers from "../providers"
|
|
|
|
const PROVIDER_REGISTRATION_KEY = "payment_providers"
|
|
|
|
const registrationFn = async (klass, container, pluginOptions) => {
|
|
if (!klass?.identifier) {
|
|
throw new MedusaError(
|
|
MedusaError.Types.INVALID_ARGUMENT,
|
|
`Trying to register a payment provider without a provider identifier.`
|
|
)
|
|
}
|
|
|
|
const key = `pp_${klass.identifier}${
|
|
pluginOptions.id ? `_${pluginOptions.id}` : ""
|
|
}`
|
|
|
|
container.register({
|
|
[key]: asFunction((cradle) => new klass(cradle, pluginOptions.options), {
|
|
lifetime: klass.LIFE_TIME || Lifetime.SINGLETON,
|
|
}),
|
|
})
|
|
|
|
container.registerAdd(PROVIDER_REGISTRATION_KEY, asValue(key))
|
|
}
|
|
|
|
export default async ({
|
|
container,
|
|
options,
|
|
}: LoaderOptions<
|
|
(
|
|
| ModulesSdkTypes.ModuleServiceInitializeOptions
|
|
| ModulesSdkTypes.ModuleServiceInitializeCustomDataLayerOptions
|
|
) & { providers: ModuleProvider[] }
|
|
>): Promise<void> => {
|
|
// Local providers
|
|
for (const provider of Object.values(providers)) {
|
|
await registrationFn(provider, container, { id: "default" })
|
|
}
|
|
|
|
await moduleProviderLoader({
|
|
container,
|
|
providers: options?.providers || [],
|
|
registerServiceFn: registrationFn,
|
|
})
|
|
|
|
await registerProvidersInDb({ container })
|
|
}
|
|
|
|
const registerProvidersInDb = async ({
|
|
container,
|
|
}: LoaderOptions): Promise<void> => {
|
|
const providersToLoad = container.resolve<string[]>(PROVIDER_REGISTRATION_KEY)
|
|
const paymentProviderService = container.resolve<PaymentProviderService>(
|
|
"paymentProviderService"
|
|
)
|
|
|
|
const existingProviders = await paymentProviderService.list(
|
|
{ id: providersToLoad },
|
|
{}
|
|
)
|
|
|
|
const upsertData: CreatePaymentProviderDTO[] = []
|
|
|
|
for (const { id } of existingProviders) {
|
|
if (!providersToLoad.includes(id)) {
|
|
upsertData.push({ id, is_enabled: false })
|
|
}
|
|
}
|
|
|
|
for (const id of providersToLoad) {
|
|
upsertData.push({ id, is_enabled: true })
|
|
}
|
|
|
|
await paymentProviderService.upsert(upsertData)
|
|
}
|