2025-11-13 13:13:34 -07:00

46 lines
1.8 KiB
JavaScript

import { HttpRequest } from "@smithy/protocol-http";
import { getCacheKey } from "./getCacheKey";
import { updateDiscoveredEndpointInCache } from "./updateDiscoveredEndpointInCache";
export const endpointDiscoveryMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {
if (config.isCustomEndpoint) {
if (config.isClientEndpointDiscoveryEnabled) {
throw new Error(`Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.`);
}
return next(args);
}
const { endpointDiscoveryCommandCtor } = config;
const { isDiscoveredEndpointRequired, identifiers } = middlewareConfig;
const clientName = context.clientName;
const commandName = context.commandName;
const isEndpointDiscoveryEnabled = await config.endpointDiscoveryEnabled();
const cacheKey = await getCacheKey(commandName, config, { identifiers });
if (isDiscoveredEndpointRequired) {
if (isEndpointDiscoveryEnabled === false) {
throw new Error(`Endpoint Discovery is disabled but ${commandName} on ${clientName} requires it.` +
` Please check your configurations.`);
}
await updateDiscoveredEndpointInCache(config, {
...middlewareConfig,
commandName,
cacheKey,
endpointDiscoveryCommandCtor,
});
}
else if (isEndpointDiscoveryEnabled) {
updateDiscoveredEndpointInCache(config, {
...middlewareConfig,
commandName,
cacheKey,
endpointDiscoveryCommandCtor,
});
}
const { request } = args;
if (cacheKey && HttpRequest.isInstance(request)) {
const endpoint = config.endpointCache.getEndpoint(cacheKey);
if (endpoint) {
request.hostname = endpoint;
}
}
return next(args);
};