scratch-www/bin/lib/fastly-extended.js

89 lines
3.4 KiB
JavaScript

var Fastly = require('fastly');
module.exports = function (apiKey, serviceId) {
var fastly = Fastly(apiKey);
fastly.serviceId = serviceId;
fastly.negateConditionStatement = function (statement) {
return '!(' + statement + ')';
};
fastly.getFastlyAPIPrefix = function (serviceId, version) {
return '/service/' + encodeURIComponent(serviceId) + '/version/' + version;
};
fastly.getLatestVersion = function (cb) {
if (!this.serviceId) {
console.error('Failed to get latest version.');
return cb('No serviceId configured');
}
var url = '/service/'+ encodeURIComponent(this.serviceId) +'/version';
this.request('GET', url, function (err, versions) {
if (err) {
console.error('Failed to get versions', err);
return cb(err);
}
var latestVersion = versions.reduce(function (latestVersion, version) {
if (!latestVersion) return version;
if (version.number > latestVersion.number) return version;
return latestVersion;
});
return cb(null, latestVersion);
});
};
fastly.setCondition = function (version, condition, cb) {
if (!this.serviceId) {
console.error('Failed to set condition', condition);
return cb('No serviceId configured');
}
var name = condition.name;
var putUrl = this.getFastlyAPIPrefix(this.serviceId, version) + '/condition/' + encodeURIComponent(name);
var postUrl = this.getFastlyAPIPrefix(this.serviceId, version) + '/condition';
return this.request('PUT', putUrl, condition, function (err, response) {
if (err && err.statusCode === 404) {
this.request('POST', postUrl, condition, function (err, response) {
if (err) {
console.log('Failed to POST header', header);
return cb(err);
}
return cb(null, response);
});
return;
}
if (err) {
console.error('Failed to PUT condition', condition);
return cb(err);
}
return cb(null, response);
}.bind(this));
};
fastly.setFastlyHeader = function (version, header, cb) {
if (!this.serviceId) {
console.error('Failed to set header', header);
cb('No serviceId configured');
}
var name = header.name;
var putUrl = this.getFastlyAPIPrefix(this.serviceId, version) + '/header/' + encodeURIComponent(name);
var postUrl = this.getFastlyAPIPrefix(this.serviceId, version) + '/header';
return this.request('PUT', putUrl, header, function (err, response) {
if (err && err.statusCode === 404) {
this.request('POST', postUrl, header, function (err, response) {
if (err) {
console.error('Failed to POST header', header);
return cb(err);
}
return cb(null, response);
});
return;
}
if (err) {
console.error('Failed to PUT header', header);
return cb(err);
}
return cb(null, response);
}.bind(this));
};
return fastly;
};