@softchef/cdk-iot-device-management
Version:
IoT device management is composed of things, thing types, thing groups, jobs, files API services. The constructs can be used independently, that are based on full-managed service to create an API Gateway & Lambda function.
83 lines (82 loc) • 3.94 kB
JavaScript
import { __assign, __awaiter, __generator } from "tslib";
import { CredentialsProviderError } from "@aws-sdk/property-provider";
import { parse } from "url";
import { httpRequest } from "./remoteProvider/httpRequest";
import { fromImdsCredentials, isImdsCredentials } from "./remoteProvider/ImdsCredentials";
import { providerConfigFromInit } from "./remoteProvider/RemoteProviderInit";
import { retry } from "./remoteProvider/retry";
export var ENV_CMDS_FULL_URI = "AWS_CONTAINER_CREDENTIALS_FULL_URI";
export var ENV_CMDS_RELATIVE_URI = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI";
export var ENV_CMDS_AUTH_TOKEN = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
export var fromContainerMetadata = function (init) {
if (init === void 0) { init = {}; }
var _a = providerConfigFromInit(init), timeout = _a.timeout, maxRetries = _a.maxRetries;
return function () {
return retry(function () { return __awaiter(void 0, void 0, void 0, function () {
var requestOptions, credsResponse, _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0: return [4, getCmdsUri()];
case 1:
requestOptions = _c.sent();
_b = (_a = JSON).parse;
return [4, requestFromEcsImds(timeout, requestOptions)];
case 2:
credsResponse = _b.apply(_a, [_c.sent()]);
if (!isImdsCredentials(credsResponse)) {
throw new CredentialsProviderError("Invalid response received from instance metadata service.");
}
return [2, fromImdsCredentials(credsResponse)];
}
});
}); }, maxRetries);
};
};
var requestFromEcsImds = function (timeout, options) { return __awaiter(void 0, void 0, void 0, function () {
var buffer;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (process.env[ENV_CMDS_AUTH_TOKEN]) {
options.headers = __assign(__assign({}, options.headers), { Authorization: process.env[ENV_CMDS_AUTH_TOKEN] });
}
return [4, httpRequest(__assign(__assign({}, options), { timeout: timeout }))];
case 1:
buffer = _a.sent();
return [2, buffer.toString()];
}
});
}); };
var CMDS_IP = "169.254.170.2";
var GREENGRASS_HOSTS = {
localhost: true,
"127.0.0.1": true,
};
var GREENGRASS_PROTOCOLS = {
"http:": true,
"https:": true,
};
var getCmdsUri = function () { return __awaiter(void 0, void 0, void 0, function () {
var parsed;
return __generator(this, function (_a) {
if (process.env[ENV_CMDS_RELATIVE_URI]) {
return [2, {
hostname: CMDS_IP,
path: process.env[ENV_CMDS_RELATIVE_URI],
}];
}
if (process.env[ENV_CMDS_FULL_URI]) {
parsed = parse(process.env[ENV_CMDS_FULL_URI]);
if (!parsed.hostname || !(parsed.hostname in GREENGRASS_HOSTS)) {
throw new CredentialsProviderError(parsed.hostname + " is not a valid container metadata service hostname", false);
}
if (!parsed.protocol || !(parsed.protocol in GREENGRASS_PROTOCOLS)) {
throw new CredentialsProviderError(parsed.protocol + " is not a valid container metadata service protocol", false);
}
return [2, __assign(__assign({}, parsed), { port: parsed.port ? parseInt(parsed.port, 10) : undefined })];
}
throw new CredentialsProviderError("The container metadata credential provider cannot be used unless" +
(" the " + ENV_CMDS_RELATIVE_URI + " or " + ENV_CMDS_FULL_URI + " environment") +
" variable is set", false);
});
}); };