cloudfront-ip-ranges
Version:
Get Cloudfront IPs for use in trust proxy configurations
63 lines • 2.52 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CloudfrontService = void 0;
const https = require("https");
const logger_1 = require("./logger");
class CloudfrontService {
constructor(_apiUrl = 'https://ip-ranges.amazonaws.com/ip-ranges.json') {
this._apiUrl = _apiUrl;
this._logger = new logger_1.Logger('CloudfrontIpService');
}
get apiUrl() {
return this._apiUrl;
}
getJSON() {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
https.get(this.apiUrl, (res) => {
let body = '';
res.on('data', (data) => {
body += data;
});
res.on('end', () => {
// @ts-ignore
resolve(JSON.parse(body));
});
})
.on('error', (error) => {
reject(error);
});
});
});
}
getIpRange(service = 'CLOUDFRONT') {
return __awaiter(this, void 0, void 0, function* () {
const ips = [];
try {
const results = yield this.getJSON();
ips.push(...results.prefixes.filter((p) => p.service === service).map(({ ip_prefix }) => ip_prefix));
}
catch (e) {
this._logger.error(e);
}
return ips;
});
}
updateTrustProxy(expressApp) {
return this.getIpRange()
.then((ips) => {
expressApp.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal', ...ips]);
});
}
}
exports.CloudfrontService = CloudfrontService;
//# sourceMappingURL=cloudfront.service.js.map
;