medusa-plugin-tolgee
Version:
Medusa V2 Plugin to easily add translations to your models with Tolgee
60 lines • 6.39 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupBatchingAdapter = setupBatchingAdapter;
const axios_1 = __importDefault(require("axios"));
const bottleneck_1 = __importDefault(require("bottleneck"));
const dataloader_1 = __importDefault(require("dataloader"));
function setupBatchingAdapter(client, logger, options) {
const originalAdapter = client.defaults.adapter;
const limiter = new bottleneck_1.default({
reservoirRefreshAmount: options.rateLimit?.maxRequests ?? 15,
reservoirRefreshInterval: options.rateLimit?.perMilliseconds ?? 3000,
});
const loader = new dataloader_1.default(async (configs) => {
const queryValues = configs.map(r => r.params[options.batchQueryParam]).join(',');
const batchConfig = { ...configs[0], adapter: originalAdapter };
batchConfig.params = { ...batchConfig.params, [options.batchQueryParam]: queryValues };
try {
logger.debug(`medusal-plugin-tolgee: Sending batched request for ${queryValues}`);
// Schedule the API call through the rate limiter and execute with axios.
// Note: we use the default axios client with the default adapter here to avoid infinite loops.
const response = await limiter.schedule(() => axios_1.default.request(batchConfig));
return configs.map(config => {
const queryValue = config.params[options.batchQueryParam];
const individualResponseData = {
...response.data,
_embedded: {
keys: response.data._embedded?.keys?.filter(k => k.keyNamespace == queryValue) ?? []
}
};
return {
...response,
data: individualResponseData,
// the whole function should take an AxiosCacheInstance, but the type is outdated
// TODO: remove type cast when type is fixed
config: { ...response.config, id: config.id }
};
});
}
catch (error) {
logger.error(`Batch request failed for ${batchConfig.url}:`, error);
const batchError = error instanceof Error ? error : new Error('Batch request failed');
return configs.map(() => batchError);
}
}, {
batchScheduleFn: (callback) => setTimeout(callback, options.batchingDelayMilliseconds),
});
client.defaults.adapter = (config) => {
const queryValue = config?.params?.[options.batchQueryParam];
if (!queryValue || !config.url?.match(options.batchUrl) || config.method != "get") {
// fallback to the client's original adapter
return axios_1.default.getAdapter(originalAdapter)(config);
}
logger.debug(`medusa-plugin-tolgee: Requesting batch for ${queryValue}`);
return loader.load(config);
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hpbmctYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3RvbGdlZS9sb2FkZXJzL3V0aWxzL2JhdGNoaW5nLWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFpQkEsb0RBMkRDO0FBM0VELGtEQUF3RjtBQUV4Riw0REFBb0M7QUFDcEMsNERBQW9DO0FBYXBDLFNBQWdCLG9CQUFvQixDQUFDLE1BQXFCLEVBQUUsTUFBYyxFQUFFLE9BQXdCO0lBQ2xHLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFBO0lBRS9DLE1BQU0sT0FBTyxHQUFHLElBQUksb0JBQVUsQ0FBQztRQUM3QixzQkFBc0IsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLFdBQVcsSUFBSSxFQUFFO1FBQzVELHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxJQUFJLElBQUk7S0FDckUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQkFBVSxDQUMzQixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDaEIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFBO1FBQy9ELFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFFdEYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxDQUFDLEtB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