33 lines
1.3 KiB
JavaScript
33 lines
1.3 KiB
JavaScript
|
export const createConfigValueProvider = (configKey, canonicalEndpointParamKey, config) => {
|
||
|
const configProvider = async () => {
|
||
|
const configValue = config[configKey] ?? config[canonicalEndpointParamKey];
|
||
|
if (typeof configValue === "function") {
|
||
|
return configValue();
|
||
|
}
|
||
|
return configValue;
|
||
|
};
|
||
|
if (configKey === "credentialScope" || canonicalEndpointParamKey === "CredentialScope") {
|
||
|
return async () => {
|
||
|
const credentials = typeof config.credentials === "function" ? await config.credentials() : config.credentials;
|
||
|
const configValue = credentials?.credentialScope ?? credentials?.CredentialScope;
|
||
|
return configValue;
|
||
|
};
|
||
|
}
|
||
|
if (configKey === "endpoint" || canonicalEndpointParamKey === "endpoint") {
|
||
|
return async () => {
|
||
|
const endpoint = await configProvider();
|
||
|
if (endpoint && typeof endpoint === "object") {
|
||
|
if ("url" in endpoint) {
|
||
|
return endpoint.url.href;
|
||
|
}
|
||
|
if ("hostname" in endpoint) {
|
||
|
const { protocol, hostname, port, path } = endpoint;
|
||
|
return `${protocol}//${hostname}${port ? ":" + port : ""}${path}`;
|
||
|
}
|
||
|
}
|
||
|
return endpoint;
|
||
|
};
|
||
|
}
|
||
|
return configProvider;
|
||
|
};
|