"use strict"; require("typings-global"); var plugins = require("./cflare.plugins"); var CflareAccount = (function () { function CflareAccount() { } CflareAccount.prototype.authCheck = function () { return (this.authEmail && this.authKey); //check if auth is available }; ; CflareAccount.prototype.auth = function (optionsArg) { this.authEmail = optionsArg.email; this.authKey = optionsArg.key; }; CflareAccount.prototype.getZoneId = function (domainName) { var done = plugins.q.defer(); this.listZones(domainName) .then(function (responseArg) { var filteredResponse = responseArg.result.filter(function (zoneArg) { return zoneArg.name === domainName; }); if (filteredResponse.length >= 1) { done.resolve(filteredResponse[0].id); } else { plugins.beautylog.error("the domain " + domainName.blue + " does not appear to be in this account!"); done.reject(undefined); } }); return done.promise; }; CflareAccount.prototype.getRecord = function (domainNameArg, typeArg) { var done = plugins.q.defer(); var domain = new plugins.smartstring.Domain(domainNameArg); this.listRecords(domain.zoneName) .then(function (responseArg) { var filteredResponse = responseArg.result.filter(function (recordArg) { return (recordArg.type == typeArg && recordArg.name == domainNameArg); }); done.resolve(filteredResponse[0]); }); return done.promise; }; ; CflareAccount.prototype.createRecord = function (domainNameArg, typeArg, contentArg) { var _this = this; var done = plugins.q.defer(); var domain = new plugins.smartstring.Domain(domainNameArg); this.getZoneId(domain.zoneName) .then(function (domainIdArg) { var dataObject = { name: domain.fullName, type: typeArg, content: contentArg }; _this.request("POST", "/zones/" + domainIdArg + "/dns_records", dataObject) .then(function (responseArg) { done.resolve(responseArg); }); }); return done.promise; }; ; CflareAccount.prototype.removeRecord = function (domainNameArg, typeArg) { var _this = this; var done = plugins.q.defer(); var domain = new plugins.smartstring.Domain(domainNameArg); this.getRecord(domain.fullName, typeArg) .then(function (responseArg) { if (responseArg) { var requestRoute = "/zones/" + responseArg.zone_id + "/dns_records/" + responseArg.id; _this.request("DELETE", requestRoute) .then(function (responseArg) { done.resolve(responseArg); }); } else { done.reject(); } }); return done.promise; }; ; CflareAccount.prototype.updateRecord = function (domainNameArg, typeArg, valueArg) { var done = plugins.q.defer(); var domain = new plugins.smartstring.Domain(domainNameArg); return done.promise; }; ; CflareAccount.prototype.listRecords = function (domainNameArg) { var _this = this; var done = plugins.q.defer(); var domain = new plugins.smartstring.Domain(domainNameArg); this.getZoneId(domain.zoneName) .then(function (domainIdArg) { _this.request("GET", "/zones/" + domainIdArg + "/dns_records?per_page=100") .then(function (responseArg) { done.resolve(responseArg); }); }); return done.promise; }; CflareAccount.prototype.listZones = function (domainName) { var done = plugins.q.defer(); var requestRoute = "/zones?per_page=50"; if (domainName) requestRoute = requestRoute + "&name=" + domainName; var result = {}; this.request("GET", requestRoute) .then(function (responseArg) { result = responseArg; done.resolve(result); }); return done.promise; }; ; CflareAccount.prototype.request = function (methodArg, routeArg, dataArg) { if (dataArg === void 0) { dataArg = {}; } var done = plugins.q.defer(); var jsonArg = JSON.stringify(dataArg); var options = { method: methodArg, url: "https://api.cloudflare.com/client/v4" + routeArg, headers: { "Content-Type": "application/json", "X-Auth-Email": this.authEmail, "X-Auth-Key": this.authKey }, body: jsonArg }; //console.log(options); plugins.request(options, function (err, res, body) { if (!err && res.statusCode == 200) { var responseObj = JSON.parse(body); done.resolve(responseObj); } else { console.log(err); console.log(res); done.reject(err); } ; }); return done.promise; }; return CflareAccount; }()); exports.CflareAccount = CflareAccount; ; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNmbGFyZS5jbGFzc2VzLmNmbGFyZWFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFPLE9BQU8sV0FBVyxrQkFBa0IsQ0FBQyxDQUFDO0FBRzdDO0lBTUk7SUFFQSxDQUFDO0lBTE8saUNBQVMsR0FBakI7UUFDSSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtJQUN6RSxDQUFDOztJQUlELDRCQUFJLEdBQUosVUFBSyxVQUFvQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxpQ0FBUyxHQUFULFVBQVUsVUFBaUI7UUFDdkIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQzthQUNyQixJQUFJLENBQUMsVUFBQyxXQUFXO1lBQ2QsSUFBSSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFDLE9BQU87Z0JBQ3JELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDO2dCQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLElB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VyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUFBLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFDTCxvQkFBQztBQUFELENBbElBLEFBa0lDLElBQUE7QUFsSVkscUJBQWEsZ0JBa0l6QixDQUFBO0FBQUEsQ0FBQyIsImZpbGUiOiJjZmxhcmUuY2xhc3Nlcy5jZmxhcmVhY2NvdW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCBwbHVnaW5zID0gcmVxdWlyZShcIi4vY2ZsYXJlLnBsdWdpbnNcIik7XG5pbXBvcnQgaGVscGVycyA9IHJlcXVpcmUoXCIuL2NmbGFyZS5jbGFzc2VzLmhlbHBlcnNcIik7XG5cbmV4cG9ydCBjbGFzcyBDZmxhcmVBY2NvdW50IHtcbiAgICBwcml2YXRlIGF1dGhFbWFpbDpzdHJpbmc7XG4gICAgcHJpdmF0ZSBhdXRoS2V5OnN0cmluZztcbiAgICBwcml2YXRlIGF1dGhDaGVjaygpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYXV0aEVtYWlsICYmIHRoaXMuYXV0aEtleSk7IC8vY2hlY2sgaWYgYXV0aCBpcyBhdmFpbGFibGVcbiAgICB9XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgXG4gICAgfTtcbiAgICBhdXRoKG9wdGlvbnNBcmc6e2VtYWlsOnN0cmluZyxrZXk6c3RyaW5nfSl7XG4gICAgICAgIHRoaXMuYXV0aEVtYWlsID0gb3B0aW9uc0FyZy5lbWFpbDtcbiAgICAgICAgdGhpcy5hdXRoS2V5ID0gb3B0aW9uc0FyZy5rZXk7ICAgICAgIFxuICAgIH1cbiAgICBnZXRab25lSWQoZG9tYWluTmFtZTpzdHJpbmcpe1xuICAgICAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgICAgICB0aGlzLmxpc3Rab25lcyhkb21haW5OYW1lKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlQXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkUmVzcG9uc2UgPSByZXNwb25zZUFyZy5yZXN1bHQuZmlsdGVyKCh6b25lQXJnKT0+e1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gem9uZUFyZy5uYW1lID09PSBkb21haW5OYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZFJlc3BvbnNlLmxlbmd0aCA+PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgZG9uZS5yZXNvbHZlKGZpbHRlcmVkUmVzcG9uc2VbMF0uaWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbnMuYmVhdXR5bG9nLmVycm9yKFwidGhlIGRvbWFpbiBcIiArIGRvbWFpbk5hbWUuYmx1ZSArIFwiIGRvZXMgbm90IGFwcGVhciB0byBiZSBpbiB0aGlzIGFjY291bnQhXCIpO1xuICAgICAgICAgICAgICAgICAgICBkb25lLnJlamVjdCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICAgIH1cbiAgICBnZXRSZWNvcmQoZG9tYWluTmFtZUFyZzpzdHJpbmcsdHlwZUFyZzpzdHJpbmcpe1xuICAgICAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgICAgICBsZXQgZG9tYWluID0gbmV3IHBsdWdpbnMuc21hcnRzdHJpbmcuRG9tYWluKGRvbWFpbk5hbWVBcmcpO1xuICAgICAgICB0aGlzLmxpc3RSZWNvcmRzKGRvbWFpbi56b25lTmFtZSlcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZUFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFJlc3BvbnNlID0gcmVzcG9uc2VBcmcucmVzdWx0LmZpbHRlcigocmVjb3JkQXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAocmVjb3JkQXJnLnR5cGUgPT0gdHlwZUFyZyAmJiByZWNvcmRBcmcubmFtZSA9PSBkb21haW5OYW1lQXJnKTsgXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBkb25lLnJlc29sdmUoZmlsdGVyZWRSZXNwb25zZVswXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICAgIH07XG4gICAgY3JlYXRlUmVjb3JkKGRvbWFpbk5hbWVBcmc6c3RyaW5nLHR5cGVBcmc6c3RyaW5nLGNvbnRlbnRBcmc6c3RyaW5nKXtcbiAgICAgICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICAgICAgbGV0IGRvbWFpbiA9IG5ldyBwbHVnaW5zLnNtYXJ0c3RyaW5nLkRvbWFpbihkb21haW5OYW1lQXJnKTtcbiAgICAgICAgdGhpcy5nZXRab25lSWQoZG9tYWluLnpvbmVOYW1lKVxuICAgICAgICAgICAgLnRoZW4oKGRvbWFpbklkQXJnKT0+e1xuICAgICAgICAgICAgICAgIGxldCBkYXRhT2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBkb21haW4uZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVBcmcsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRBcmdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdChcIlBPU1RcIixcIi96b25lcy9cIiArIGRvbWFpbklkQXJnICsgXCIvZG5zX3JlY29yZHNcIixkYXRhT2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZUFyZyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lLnJlc29sdmUocmVzcG9uc2VBcmcpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICAgIH07XG4gICAgcmVtb3ZlUmVjb3JkKGRvbWFpbk5hbWVBcmc6c3RyaW5nLHR5cGVBcmc6c3RyaW5nKXtcbiAgICAgICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICAgICAgbGV0IGRvbWFpbiA9IG5ldyBwbHVnaW5zLnNtYXJ0c3RyaW5nLkRvbWFpbihkb21haW5OYW1lQXJnKTtcbiAgICAgICAgdGhpcy5nZXRSZWNvcmQoZG9tYWluLmZ1bGxOYW1lLHR5cGVBcmcpXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2VBcmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZihyZXNwb25zZUFyZyl7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0Um91dGU6c3RyaW5nID0gXCIvem9uZXMvXCIgKyByZXNwb25zZUFyZy56b25lX2lkICsgXCIvZG5zX3JlY29yZHMvXCIgKyByZXNwb25zZUFyZy5pZDsgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdChcIkRFTEVURVwiLHJlcXVlc3RSb3V0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZUFyZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUucmVzb2x2ZShyZXNwb25zZUFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkb25lLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xuICAgIH07XG4gICAgdXBkYXRlUmVjb3JkKGRvbWFpbk5hbWVBcmc6c3RyaW5nLHR5cGVBcmc6c3RyaW5nLHZhbHVlQXJnKXtcbiAgICAgICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICAgICAgbGV0IGRvbWFpbiA9IG5ldyBwbHVnaW5zLnNtYXJ0c3RyaW5nLkRvbWFpbihkb21haW5OYW1lQXJnKTtcbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9O1xuICAgIGxpc3RSZWNvcmRzKGRvbWFpbk5hbWVBcmc6c3RyaW5nKXtcbiAgICAgICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICAgICAgbGV0IGRvbWFpbiA9IG5ldyBwbHVnaW5zLnNtYXJ0c3RyaW5nLkRvbWFpbihkb21haW5OYW1lQXJnKTtcbiAgICAgICAgdGhpcy5nZXRab25lSWQoZG9tYWluLnpvbmVOYW1lKVxuICAgICAgICAgICAgLnRoZW4oKGRvbWFpbklkQXJnKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdChcIkdFVFwiLFwiL3pvbmVzL1wiICsgZG9tYWluSWRBcmcgKyBcIi9kbnNfcmVjb3Jkcz9wZXJfcGFnZT0xMDBcIilcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2VBcmcpe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHJlc3BvbnNlQXJnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9XG4gICAgbGlzdFpvbmVzKGRvbWFpbk5hbWU/OnN0cmluZyl7IC8vIFRPRE86IGhhbmRsZSBwYWdpbmF0aW9uXG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCByZXF1ZXN0Um91dGUgPSBcIi96b25lcz9wZXJfcGFnZT01MFwiXG4gICAgICAgIGlmKGRvbWFpbk5hbWUpIHJlcXVlc3RSb3V0ZSA9IHJlcXVlc3RSb3V0ZSArIFwiJm5hbWU9XCIgKyBkb21haW5OYW1lO1xuICAgICAgICBsZXQgcmVzdWx0ID0ge307IFxuICAgICAgICB0aGlzLnJlcXVlc3QoXCJHRVRcIixyZXF1ZXN0Um91dGUpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZUFyZyl7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2VBcmc7XG4gICAgICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9O1xuICAgIHJlcXVlc3QobWV0aG9kQXJnOnN0cmluZyxyb3V0ZUFyZzpzdHJpbmcsZGF0YUFyZyA9IHt9KXtcbiAgICAgICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICAgICAgbGV0IGpzb25Bcmc6c3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YUFyZyk7XG4gICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgbWV0aG9kOm1ldGhvZEFyZyxcbiAgICAgICAgICAgIHVybDpcImh0dHBzOi8vYXBpLmNsb3VkZmxhcmUuY29tL2NsaWVudC92NFwiICsgcm91dGVBcmcsXG4gICAgICAgICAgICBoZWFkZXJzOntcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOlwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIFwiWC1BdXRoLUVtYWlsXCI6dGhpcy5hdXRoRW1haWwsXG4gICAgICAgICAgICAgICAgXCJYLUF1dGgtS2V5XCI6dGhpcy5hdXRoS2V5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTpqc29uQXJnXG4gICAgICAgIH07XG4gICAgICAgIC8vY29uc29sZS5sb2cob3B0aW9ucyk7XG4gICAgICAgIHBsdWdpbnMucmVxdWVzdChvcHRpb25zLGZ1bmN0aW9uKGVyciwgcmVzLCBib2R5KXtcbiAgICAgICAgICAgIGlmICghZXJyICYmIHJlcy5zdGF0dXNDb2RlID09IDIwMCkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHJlc3BvbnNlT2JqKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgICAgICAgIGRvbmUucmVqZWN0KGVycik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9XG59OyJdfQ==