45 lines
2.1 KiB
JavaScript
45 lines
2.1 KiB
JavaScript
import { resolveParamsForS3 } from "../service-customizations";
|
|
import { createConfigValueProvider } from "./createConfigValueProvider";
|
|
import { getEndpointFromConfig } from "./getEndpointFromConfig";
|
|
import { toEndpointV1 } from "./toEndpointV1";
|
|
export const getEndpointFromInstructions = async (commandInput, instructionsSupplier, clientConfig, context) => {
|
|
if (!clientConfig.endpoint) {
|
|
const endpointFromConfig = await getEndpointFromConfig(clientConfig.serviceId || "");
|
|
if (endpointFromConfig) {
|
|
clientConfig.endpoint = () => Promise.resolve(toEndpointV1(endpointFromConfig));
|
|
}
|
|
}
|
|
const endpointParams = await resolveParams(commandInput, instructionsSupplier, clientConfig);
|
|
if (typeof clientConfig.endpointProvider !== "function") {
|
|
throw new Error("config.endpointProvider is not set.");
|
|
}
|
|
const endpoint = clientConfig.endpointProvider(endpointParams, context);
|
|
return endpoint;
|
|
};
|
|
export const resolveParams = async (commandInput, instructionsSupplier, clientConfig) => {
|
|
const endpointParams = {};
|
|
const instructions = instructionsSupplier?.getEndpointParameterInstructions?.() || {};
|
|
for (const [name, instruction] of Object.entries(instructions)) {
|
|
switch (instruction.type) {
|
|
case "staticContextParams":
|
|
endpointParams[name] = instruction.value;
|
|
break;
|
|
case "contextParams":
|
|
endpointParams[name] = commandInput[instruction.name];
|
|
break;
|
|
case "clientContextParams":
|
|
case "builtInParams":
|
|
endpointParams[name] = await createConfigValueProvider(instruction.name, name, clientConfig)();
|
|
break;
|
|
default:
|
|
throw new Error("Unrecognized endpoint parameter instruction: " + JSON.stringify(instruction));
|
|
}
|
|
}
|
|
if (Object.keys(instructions).length === 0) {
|
|
Object.assign(endpointParams, clientConfig);
|
|
}
|
|
if (String(clientConfig.serviceId).toLowerCase() === "s3") {
|
|
await resolveParamsForS3(endpointParams);
|
|
}
|
|
return endpointParams;
|
|
};
|