58 lines
2.6 KiB
JavaScript
58 lines
2.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getCredentials = exports.createGetRequest = void 0;
|
|
const property_provider_1 = require("@smithy/property-provider");
|
|
const protocol_http_1 = require("@smithy/protocol-http");
|
|
const smithy_client_1 = require("@smithy/smithy-client");
|
|
const util_stream_1 = require("@smithy/util-stream");
|
|
function createGetRequest(url) {
|
|
return new protocol_http_1.HttpRequest({
|
|
protocol: url.protocol,
|
|
hostname: url.hostname,
|
|
port: Number(url.port),
|
|
path: url.pathname,
|
|
query: Array.from(url.searchParams.entries()).reduce((acc, [k, v]) => {
|
|
acc[k] = v;
|
|
return acc;
|
|
}, {}),
|
|
fragment: url.hash,
|
|
});
|
|
}
|
|
exports.createGetRequest = createGetRequest;
|
|
async function getCredentials(response) {
|
|
const contentType = response?.headers["content-type"] ?? response?.headers["Content-Type"] ?? "";
|
|
if (!contentType.includes("json")) {
|
|
console.warn("HTTP credential provider response header content-type was not application/json. Observed: " + contentType + ".");
|
|
}
|
|
const stream = (0, util_stream_1.sdkStreamMixin)(response.body);
|
|
const str = await stream.transformToString();
|
|
if (response.statusCode === 200) {
|
|
const parsed = JSON.parse(str);
|
|
if (typeof parsed.AccessKeyId !== "string" ||
|
|
typeof parsed.SecretAccessKey !== "string" ||
|
|
typeof parsed.Token !== "string" ||
|
|
typeof parsed.Expiration !== "string") {
|
|
throw new property_provider_1.CredentialsProviderError("HTTP credential provider response not of the required format, an object matching: " +
|
|
"{ AccessKeyId: string, SecretAccessKey: string, Token: string, Expiration: string(rfc3339) }");
|
|
}
|
|
return {
|
|
accessKeyId: parsed.AccessKeyId,
|
|
secretAccessKey: parsed.SecretAccessKey,
|
|
sessionToken: parsed.Token,
|
|
expiration: (0, smithy_client_1.parseRfc3339DateTime)(parsed.Expiration),
|
|
};
|
|
}
|
|
if (response.statusCode >= 400 && response.statusCode < 500) {
|
|
let parsedBody = {};
|
|
try {
|
|
parsedBody = JSON.parse(str);
|
|
}
|
|
catch (e) { }
|
|
throw Object.assign(new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`), {
|
|
Code: parsedBody.Code,
|
|
Message: parsedBody.Message,
|
|
});
|
|
}
|
|
throw new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`);
|
|
}
|
|
exports.getCredentials = getCredentials;
|