aws-cdk
Version:
AWS CDK Toolkit CLI, the command line tool for CDK apps
115 lines • 12.3 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProxyAgentProvider = void 0;
exports.validateProxyAddress = validateProxyAddress;
const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
const fs = __importStar(require("fs-extra"));
const proxy_agent_1 = require("proxy-agent");
/**
* Validate a proxy address up front.
*
* `proxy-agent` only rejects an address with a missing or unsupported protocol
* lazily, on the first request, so without `-vvv` the CLI appears to hang or
* fails later with a misleading error (e.g. missing credentials). Fail fast
* here with an actionable message instead.
*/
function validateProxyAddress(proxyAddress) {
let protocol;
try {
protocol = new URL(proxyAddress).protocol.replace(/:$/, '');
}
catch {
throw new toolkit_lib_1.ToolkitError('InvalidProxyAddress', `Invalid proxy address '${proxyAddress}': it must be a URL that includes a protocol, e.g. 'http://${proxyAddress}'.`);
}
if (!(protocol in proxy_agent_1.proxies)) {
throw new toolkit_lib_1.ToolkitError('InvalidProxyAddress', `Unsupported protocol '${protocol}' in proxy address '${proxyAddress}'. Supported protocols are: ${Object.keys(proxy_agent_1.proxies).join(', ')}.`);
}
}
class ProxyAgentProvider {
ioHelper;
constructor(ioHelper) {
this.ioHelper = ioHelper;
}
async create(options) {
// Only validate when an actual proxy address was configured. When `--proxy`
// is not given the setting is unset (and can surface at runtime as an empty
// string or empty array), in which case we skip validation and let
// ProxyAgent fall back to environment-variable detection.
if (typeof options.proxyAddress === 'string' && options.proxyAddress.length > 0) {
validateProxyAddress(options.proxyAddress);
}
// Force it to use the proxy provided through the command line.
// Otherwise, let the ProxyAgent auto-detect the proxy using environment variables.
const getProxyForUrl = options.proxyAddress != null
? () => Promise.resolve(options.proxyAddress)
: undefined;
return new proxy_agent_1.ProxyAgent({
ca: await this.tryGetCACert(options.caBundlePath),
getProxyForUrl,
});
}
async tryGetCACert(bundlePath) {
const path = bundlePath || this.caBundlePathFromEnvironment();
if (path) {
await this.ioHelper.defaults.debug(`Using CA bundle path: ${path}`);
try {
if (!fs.pathExistsSync(path)) {
return undefined;
}
return fs.readFileSync(path, { encoding: 'utf-8' });
}
catch (e) {
await this.ioHelper.defaults.debug(String(e));
return undefined;
}
}
return undefined;
}
/**
* Find and return a CA certificate bundle path to be passed into the SDK.
*/
caBundlePathFromEnvironment() {
if (process.env.aws_ca_bundle) {
return process.env.aws_ca_bundle;
}
if (process.env.AWS_CA_BUNDLE) {
return process.env.AWS_CA_BUNDLE;
}
return undefined;
}
}
exports.ProxyAgentProvider = ProxyAgentProvider;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHktYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcm94eS1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhQSxvREFpQkM7QUE5QkQsc0RBQW9EO0FBQ3BELDZDQUErQjtBQUMvQiw2Q0FBa0Q7QUFHbEQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLFlBQW9CO0lBQ3ZELElBQUksUUFBZ0IsQ0FBQztJQUNyQixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSwwQkFBWSxDQUNwQixxQkFBcUIsRUFDckIsMEJBQTBCLFlBQVksOERBQThELFlBQVksSUFBSSxDQUNySCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxxQkFBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksMEJBQVksQ0FDcEIscUJBQXFCLEVBQ3JCLHlCQUF5QixRQUFRLHVCQUF1QixZQUFZLCtCQUErQixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDdEksQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBcUJELE1BQWEsa0JBQWtCO0lBQ1osUUFBUSxDQUFXO0lBRXBDLFlBQW1CLFFBQWtCO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQTBCO1FBQzVDLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsbUVBQW1FO1FBQ25FLDBEQUEwRDtRQUMxRCxJQUFJLE9BQU8sT0FBTyxDQUFDLFlBQVksS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEYsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCwrREFBK0Q7UUFDL0QsbUZBQW1GO1FBQ25GLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSTtZQUNqRCxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBYSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxPQUFPLElBQUksd0JBQVUsQ0FBQztZQUNwQixFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDakQsY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQW1CO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUM5RCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMseUJBQXlCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMkJBQTJCO1FBQ2pDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBekRELGdEQXlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IFByb3h5QWdlbnQsIHByb3hpZXMgfSBmcm9tICdwcm94eS1hZ2VudCc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vYXBpLXByaXZhdGUnO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgcHJveHkgYWRkcmVzcyB1cCBmcm9udC5cbiAqXG4gKiBgcHJveHktYWdlbnRgIG9ubHkgcmVqZWN0cyBhbiBhZGRyZXNzIHdpdGggYSBtaXNzaW5nIG9yIHVuc3VwcG9ydGVkIHByb3RvY29sXG4gKiBsYXppbHksIG9uIHRoZSBmaXJzdCByZXF1ZXN0LCBzbyB3aXRob3V0IGAtdnZ2YCB0aGUgQ0xJIGFwcGVhcnMgdG8gaGFuZyBvclxuICogZmFpbHMgbGF0ZXIgd2l0aCBhIG1pc2xlYWRpbmcgZXJyb3IgKGUuZy4gbWlzc2luZyBjcmVkZW50aWFscykuIEZhaWwgZmFzdFxuICogaGVyZSB3aXRoIGFuIGFjdGlvbmFibGUgbWVzc2FnZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcm94eUFkZHJlc3MocHJveHlBZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgbGV0IHByb3RvY29sOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgcHJvdG9jb2wgPSBuZXcgVVJMKHByb3h5QWRkcmVzcykucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAnSW52YWxpZFByb3h5QWRkcmVzcycsXG4gICAgICBgSW52YWxpZCBwcm94eSBhZGRyZXNzICcke3Byb3h5QWRkcmVzc30nOiBpdCBtdXN0IGJlIGEgVVJMIHRoYXQgaW5jbHVkZXMgYSBwcm90b2NvbCwgZS5nLiAnaHR0cDovLyR7cHJveHlBZGRyZXNzfScuYCxcbiAgICApO1xuICB9XG5cbiAgaWYgKCEocHJvdG9jb2wgaW4gcHJveGllcykpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgJ0ludmFsaWRQcm94eUFkZHJlc3MnLFxuICAgICAgYFVuc3VwcG9ydGVkIHByb3RvY29sICcke3Byb3RvY29sfScgaW4gcHJveHkgYWRkcmVzcyAnJHtwcm94eUFkZHJlc3N9Jy4gU3VwcG9ydGVkIHByb3RvY29scyBhcmU6ICR7T2JqZWN0LmtleXMocHJveGllcykuam9pbignLCAnKX0uYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHJveHktYWdlbnQgU0RLc1xuICovXG5pbnRlcmZhY2UgUHJveHlBZ2VudE9wdGlvbnMge1xuICAvKipcbiAgICogUHJveHkgYWRkcmVzcyB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5QWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwYXRoIHRvIGEgY2VydGlmaWNhdGUgYnVuZGxlIHRoYXQgY29udGFpbnMgYSBjZXJ0IHRvIGJlIHRydXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGNlcnRpZmljYXRlIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUHJveHlBZ2VudFByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGUob3B0aW9uczogUHJveHlBZ2VudE9wdGlvbnMpIHtcbiAgICAvLyBPbmx5IHZhbGlkYXRlIHdoZW4gYW4gYWN0dWFsIHByb3h5IGFkZHJlc3Mgd2FzIGNvbmZpZ3VyZWQuIFdoZW4gYC0tcHJveHlgXG4gICAgLy8gaXMgbm90IGdpdmVuIHRoZSBzZXR0aW5nIGlzIHVuc2V0IChhbmQgY2FuIHN1cmZhY2UgYXQgcnVudGltZSBhcyBhbiBlbXB0eVxuICAgIC8vIHN0cmluZyBvciBlbXB0eSBhcnJheSksIGluIHdoaWNoIGNhc2Ugd2Ugc2tpcCB2YWxpZGF0aW9uIGFuZCBsZXRcbiAgICAvLyBQcm94eUFnZW50IGZhbGwgYmFjayB0byBlbnZpcm9ubWVudC12YXJpYWJsZSBkZXRlY3Rpb24uXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3h5QWRkcmVzcyA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5wcm94eUFkZHJlc3MubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGVQcm94eUFkZHJlc3Mob3B0aW9ucy5wcm94eUFkZHJlc3MpO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGl0IHRvIHVzZSB0aGUgcHJveHkgcHJvdmlkZWQgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lLlxuICAgIC8vIE90aGVyd2lzZSwgbGV0IHRoZSBQcm94eUFnZW50IGF1dG8tZGV0ZWN0IHRoZSBwcm94eSB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAgY29uc3QgZ2V0UHJveHlGb3JVcmwgPSBvcHRpb25zLnByb3h5QWRkcmVzcyAhPSBudWxsXG4gICAgICA/ICgpID0+IFByb21pc2UucmVzb2x2ZShvcHRpb25zLnByb3h5QWRkcmVzcyEpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBuZXcgUHJveHlBZ2VudCh7XG4gICAgICBjYTogYXdhaXQgdGhpcy50cnlHZXRDQUNlcnQob3B0aW9ucy5jYUJ1bmRsZVBhdGgpLFxuICAgICAgZ2V0UHJveHlGb3JVcmwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUdldENBQ2VydChidW5kbGVQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGF0aCA9IGJ1bmRsZVBhdGggfHwgdGhpcy5jYUJ1bmRsZVBhdGhGcm9tRW52aXJvbm1lbnQoKTtcbiAgICBpZiAocGF0aCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgVXNpbmcgQ0EgYnVuZGxlIHBhdGg6ICR7cGF0aH1gKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFN0cmluZyhlKSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbmQgcmV0dXJuIGEgQ0EgY2VydGlmaWNhdGUgYnVuZGxlIHBhdGggdG8gYmUgcGFzc2VkIGludG8gdGhlIFNESy5cbiAgICovXG4gIHByaXZhdGUgY2FCdW5kbGVQYXRoRnJvbUVudmlyb25tZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb2Nlc3MuZW52LmF3c19jYV9idW5kbGUpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLmVudi5hd3NfY2FfYnVuZGxlO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuQVdTX0NBX0JVTkRMRSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFXU19DQV9CVU5ETEU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==