@medusajs/fulfillment
Version:
Medusa Fulfillment module
57 lines • 2.86 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
const utils_1 = require("@medusajs/framework/utils");
const _services_1 = require("../services");
const _types_1 = require("../types");
const awilix_1 = require("awilix");
const registrationFn = async (klass, container, pluginOptions) => {
const key = _services_1.FulfillmentProviderService.getRegistrationIdentifier(klass, pluginOptions.id);
container.register({
["fp_" + key]: (0, awilix_1.asFunction)((cradle) => new klass(cradle, pluginOptions.options), {
lifetime: klass.LIFE_TIME || awilix_1.Lifetime.SINGLETON,
}),
});
container.registerAdd(_types_1.FulfillmentIdentifiersRegistrationName, (0, awilix_1.asValue)(key));
};
exports.default = async ({ container, options, }) => {
container.registerAdd(_types_1.FulfillmentIdentifiersRegistrationName, (0, awilix_1.asValue)(undefined));
// Local providers
// TODO
await (0, modules_sdk_1.moduleProviderLoader)({
container,
providers: options?.providers || [],
registerServiceFn: registrationFn,
});
await syncDatabaseProviders({
container,
});
};
async function syncDatabaseProviders({ container }) {
const providerServiceRegistrationKey = (0, utils_1.lowerCaseFirst)(_services_1.FulfillmentProviderService.name);
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER) ?? console;
try {
const providerIdentifiers = (container.resolve(_types_1.FulfillmentIdentifiersRegistrationName) ?? []).filter(Boolean);
const providerService = container.resolve(providerServiceRegistrationKey);
const providers = await providerService.list({});
const loadedProvidersMap = new Map(providers.map((p) => [p.id, p]));
const providersToCreate = providerIdentifiers.filter((id) => !loadedProvidersMap.has(id));
const providersToEnabled = providerIdentifiers.filter((id) => loadedProvidersMap.has(id));
const providersToDisable = providers.filter((p) => !providerIdentifiers.includes(p.id));
const promises = [];
if (providersToCreate.length) {
promises.push(providerService.create(providersToCreate.map((id) => ({ id }))));
}
if (providersToEnabled.length) {
promises.push(providerService.update(providersToEnabled.map((id) => ({ id, is_enabled: true }))));
}
if (providersToDisable.length) {
promises.push(providerService.update(providersToDisable.map((p) => ({ id: p.id, is_enabled: false }))));
}
await (0, utils_1.promiseAll)(promises);
}
catch (error) {
logger.error(`Error syncing the fulfillment providers: ${error.message}`);
}
}
//# sourceMappingURL=providers.js.map
;