cloudflare4
Version:
CloudFlare V4 API wrapper
1,958 lines (1,850 loc) • 115 kB
JavaScript
var extend = require('xtend'),
request = require('request'),
querystring = require('querystring'),
BlueBird = require('bluebird'),
PromiseRetryer = require('promise-retryer')(BlueBird),
PromiseObject = require('promise-object')(BlueBird),
debug = require('debug')('http'),
colors = require('colors'),
Joi = require('joi'),
_ = require('lodash');
BlueBird.promisifyAll(Joi);
/**
* CloudFlare v4 API Client
*/
var CloudFlare = PromiseObject.create({
initialize: function ($config) {
this._key = $config.key;
this._email = $config.email;
this._itemsPerPage = $config.itemsPerPage || 100;
this._maxRetries = $config.maxRetries || 1;
this._raw = $config.raw || false;
this._autoPagination = $config.autoPagination || false;
this._autoPaginationConcurrency = $config.autoPaginationConcurrency || 1;
},
API_URL: 'https://api.cloudflare.com/client/v4',
_request: function ($deferred, schema, payload, raw) {
var hasQuery = !!(payload && payload.query),
hasBody = !!(payload && payload.body);
schema = schema || {};
payload = payload || {};
payload.raw = raw;
if (hasQuery) {
payload.query = extend({
page: 1,
per_page: this._itemsPerPage
}, payload.query);
payload.pagination = {};
if (payload.query.auto_pagination || this._autoPagination && _.isUndefined(payload.query.auto_pagination) && schema.query.auto_pagination) {
payload.pagination.auto_pagination = true;
payload.pagination.auto_pagination_concurrency = payload.query.auto_pagination_concurrency || this._autoPaginationConcurrency;
delete payload.query.auto_pagination;
delete payload.query.auto_pagination_concurrency;
if (!schema.query.auto_pagination) {
throw payload.callee + ': does not support pagination';
}
}
}
if (hasBody) {
if (hasQuery && payload.body.per_page) {
payload.query.per_page = payload.body.per_page;
delete payload.body.per_page;
}
if (hasQuery && payload.body.page) {
payload.query.page = payload.body.page;
delete payload.body.page;
}
}
schema.contentType = Joi.string();
schema.path = Joi.string().required();
schema.callee = Joi.string().required();
schema.required = Joi.string();
schema.method = Joi.valid(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']).required();
schema.query = extend({
per_page: Joi.number().min(1).max(100),
page: Joi.number().min(1)
}, schema.query);
schema.pagination = Joi.object({
auto_pagination: Joi.boolean(),
auto_pagination_concurrency: Joi.number()
});
schema.raw = Joi.boolean();
$deferred.resolve(this._validateAndMakeRequest(schema, payload));
},
_tryRequest: function($deferred, $self, $config) {
$config.query = extend({}, $config.query);
if (typeof $config.body === 'object') {
$config.body = extend({}, $config.body);
$config.contentType = 'application/json';
}
var getURL = this.API_URL + '/' + $self._resolvePath($config.path, $config.params) + (Object.keys($config.query).length ? '?' + querystring.stringify($config.query) : ''); // Construct URL with parameters
$deferred.resolve(PromiseRetryer.run({
delay: function (attempt) {
return attempt * 1000;
},
maxRetries: $self._maxRetries,
onAttempt: function (attempt) {
if (attempt === 1) {
debug(('[CloudFlare] ' + $config.method + ' "' + getURL + '"')[attempt > 1 ? 'red' : 'grey']);
} else {
debug(('[CloudFlare Attempt ' + attempt + '] ' + $config.method + ' "' + getURL + '"')[attempt > 1 ? 'red' : 'grey']);
}
},
promise: function (attempt) {
return new BlueBird(function (resolve, reject) {
request(
{
method: $config.method,
url: getURL,
headers: {
'X-Auth-Key': $self._key,
'X-Auth-Email': $self._email,
'Content-Type': $config.contentType
},
body: typeof $config.body === 'object' ? JSON.stringify($config.body) : $config.body
},
function(error, response, body) {
if (body && response.headers['content-type'].match(/application\/json/)) {
body = JSON.parse(body);
}
if (!error && body && (response.statusCode < 200 || response.statusCode > 299)) {
var error = body.errors[0] || {};
return reject(new Error(
'\nAPI Error: ' + (error.code + ' - ' + error.message)
));
} else if (error) {
return reject(new Error(
'Request Failed: ' + error
));
} else if ($config.required && body && !body[$config.required]) {
return reject(new Error(
'\nAPI Error: Response was missing required field (' + $config.required + ')'
));
} else {
if ($config.raw || $self._raw && $config.raw !== false) {
resolve(body || {});
} else if (body && $config.required) {
resolve(body[$config.required] || {});
} else {
resolve(body || {});
}
}
}
);
});
}
}));
},
_resolvePath: function (path, params) {
return path.replace(/\:([a-z0-9_-]+)\b/gi, function (string, match) {
return params.hasOwnProperty(match) ? params[match] : string;
});
},
_validateAndMakeRequest: function ($deferred, $self, schema, payload) {
Joi.validateAsync(payload, schema, {abortEarly: false})
.then(function () {
if (payload.pagination && payload.pagination.auto_pagination) {
$deferred.resolve($self._paginateRequest(payload));
} else {
$deferred.resolve($self._tryRequest(payload));
}
})
.catch(function (error) {
console.log(error)
var errorMessage = ('CloudFlareApiError: validation error when calling "' + payload.callee + '"\n[' + payload.method + '] /' + $self._resolvePath(payload.path, payload.params) + '\n').red;
errorMessage += error.annotate();
$deferred.reject(errorMessage);
});
},
_paginateRequest: function ($deferred, $self, payload) {
var results = [];
payload.raw = true;
this._tryRequest(payload).then(function (result) {
if (!result.result_info || !result.result_info.total_pages) {
return $deferred.resolve(result.result);
}
results = results.concat(result.result);
var pages = _.range(2, result.result_info.total_pages + 1).map(function (page) {
var pagePayload = _.cloneDeep(payload);
pagePayload.query.page = page;
pagePayload.raw = false;
return pagePayload;
});
BlueBird.map(pages, $self._tryRequest, {concurrency: payload.pagination.auto_pagination_concurrency}).then(function (responses) {
results = results.concat.apply(results, responses);
$deferred.resolve(results);
}, function (error) {
$deferred.reject(error);
});
});
},
/**
* Create billing profile for user
*
* https://api.cloudflare.com/#user-billing-profile-create-billing-profile
*/
userBillingProfileNew: function ($deferred, body, raw) {
$deferred.resolve(this._request({
body: Joi.object({
first_name: Joi.string().max(50).required(),
last_name: Joi.string().max(90).required(),
address: Joi.string().max(100).required(),
city: Joi.string().max(80).required(),
state: Joi.string().max(40).required(),
zipcode: Joi.string().max(25).required(),
country: Joi.string().max(50).required(),
telephone: Joi.string().max(20).required(),
card_number: Joi.string().max(19).required(),
card_expiry_year: Joi.number().required(),
card_expiry_month: Joi.number().required(),
card_cvv: Joi.string().max(4).required(),
address2: Joi.string().max(100),
vat: Joi.string().max(255)
}).required()
}, {
callee: 'userBillingProfileNew',
method: 'POST',
path: 'user/billing/profile',
required: 'result',
body: body
}, raw));
},
/**
* Update billing profile for user
*
* https://api.cloudflare.com/#user-billing-profile-update-billing-profile
*/
userBillingProfileUpdate: function ($deferred, body, raw) {
$deferred.resolve(this._request({
body: Joi.object({
first_name: Joi.string().max(50).required(),
last_name: Joi.string().max(90).required(),
address: Joi.string().max(100).required(),
city: Joi.string().max(80).required(),
state: Joi.string().max(40).required(),
zipcode: Joi.string().max(25).required(),
country: Joi.string().max(50).required(),
telephone: Joi.string().max(20).required(),
card_number: Joi.string().max(19).required(),
card_expiry_year: Joi.number().required(),
card_expiry_month: Joi.number().required(),
card_cvv: Joi.string().max(4).required(),
address2: Joi.string().max(100),
vat: Joi.string().max(255)
}).required()
}, {
callee: 'userBillingProfileUpdate',
method: 'PUT',
path: 'user/billing/profile',
required: 'result',
body: body
}, raw));
},
/**
* Update billing profile VAT for user
*
* https://api.cloudflare.com/#user-billing-profile-update-particular-elements-of-your-billing-profile
*/
userBillingProfileVATUpdate: function ($deferred, body, raw) {
$deferred.resolve(this._request({
body: Joi.object({
vat: Joi.string().max(255).required()
}).required()
}, {
callee: 'userBillingProfileVATUpdate',
method: 'PATCH',
path: 'user/billing/profile',
required: 'result',
body: body
}, raw));
},
/**
* Get billing profile for user
*
* https://api.cloudflare.com/#user-billing-profile-billing-profile
*/
userBillingProfileGet: function ($deferred, raw) {
$deferred.resolve(this._request(null, {
callee: 'userBillingProfileGet',
method: 'GET',
path: 'user/billing/profile',
required: 'result'
}, raw));
},
/**
* Delete billing profile for user
*
* https://api.cloudflare.com/#user-billing-profile-delete-billing-profile
*/
userBillingProfileDestroy: function ($deferred, raw) {
$deferred.resolve(this._request(null, {
callee: 'userBillingProfileDestroy',
method: 'DELETE',
path: 'user/billing/profile',
required: 'result'
}, raw));
},
/**
* Get billing history
*
* https://api.cloudflare.com/#user-billing-history-billing-history
*/
userBillingHistoryGetAll: function ($deferred, query, raw) {
$deferred.resolve(this._request({
query: {
auto_pagination: Joi.boolean(),
order: Joi.string().valid('type', 'occured_at', 'action'),
type: Joi.string(),
occured_at: Joi.string(),
action: Joi.string()
}
}, {
callee: 'userBillingHistoryGetAll',
method: 'GET',
path: 'user/billing/history',
required: 'result',
query: query || {}
}, raw));
},
/**
* Get app subscriptions for user
*
* https://api.cloudflare.com/#app-subscription-list
* https://api.cloudflare.com/#app-subscription-search-sort-and-paginate
*/
userBillingSubscriptionsAppGetAll: function ($deferred, query, raw) {
$deferred.resolve(this._request({
query: {
auto_pagination: Joi.boolean(),
order: Joi.string().valid(
'created_on',
'expires_on',
'activated_on',
'renewed_on',
'cancelled_on',
'name',
'status',
'price'
),
status: Joi.string().valid('active', 'expired', 'cancelled'),
price: Joi.number(),
activated_on: Joi.string(),
expires_on: Joi.string(),
expired_on: Joi.string(),
cancelled_on: Joi.string(),
renewed_on: Joi.string(),
occured_at: Joi.string(),
action: Joi.string(),
direction: Joi.string().valid('asc', 'desc'),
match: Joi.string().valid('any', 'all'),
}
}, {
callee: 'userBillingSubscriptionsAppGetAll',
method: 'GET',
path: 'user/billing/subscriptions/apps',
required: 'result',
query: query || {}
}, raw));
},
/**
* Get app subscription for user
*
* https://api.cloudflare.com/#zone-zone-details
*/
userBillingSubscriptionsAppGet: function ($deferred, identifier, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
}
}, {
callee: 'userBillingSubscriptionsAppGet',
method: 'GET',
path: 'user/billing/subscriptions/apps/:identifier',
required: 'result',
params: {
identifier: identifier
}
}, raw));
},
/**
* Get app subscriptions for zone
*
* https://api.cloudflare.com/#zone-subscription-list
* https://api.cloudflare.com/#zone-subscription-search-sort-and-paginate
*/
userBillingSubscriptionsZoneGetAll: function ($deferred, query, raw) {
$deferred.resolve(this._request({
query: {
auto_pagination: Joi.boolean(),
order: Joi.string().valid(
'created_on',
'expires_on',
'activated_on',
'renewed_on',
'cancelled_on',
'name',
'status',
'price'
),
status: Joi.string().valid('active', 'expired', 'cancelled'),
price: Joi.number(),
activated_on: Joi.string(),
expires_on: Joi.string(),
expired_on: Joi.string(),
cancelled_on: Joi.string(),
renewed_on: Joi.string(),
occured_at: Joi.string(),
action: Joi.string(),
direction: Joi.string().valid('asc', 'desc'),
match: Joi.string().valid('any', 'all'),
}
}, {
callee: 'userBillingSubscriptionsZoneGetAll',
method: 'GET',
path: 'user/billing/subscriptions/zones',
required: 'result',
query: query || {}
}, raw));
},
/**
* Get app subscription for zone
*
* https://api.cloudflare.com/#zone-zone-details
*/
userBillingSubscriptionsZoneGet: function ($deferred, identifier, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
}
}, {
callee: 'userBillingSubscriptionsZoneGet',
method: 'GET',
path: 'user/billing/subscriptions/zones/:identifier',
required: 'result',
params: {
identifier: identifier
}
}, raw));
},
/**
* Get user details
*
* https://api.cloudflare.com/#user-user-details
*/
userGet: function ($deferred, raw) {
$deferred.resolve(this._request(null, {
callee: 'userGet',
method: 'GET',
path: 'user',
required: 'result'
}, raw));
},
/**
* Update user details
*
* https://api.cloudflare.com/#user-update-user
*/
userUpdate: function ($deferred, body, raw) {
$deferred.resolve(this._request({
body: Joi.object({
first_name: Joi.string().max(60),
last_name: Joi.string().max(60),
telephone: Joi.string().max(20),
country: Joi.string().max(30),
zipcode: Joi.string().max(20)
}).required()
}, {
callee: 'userUpdate',
method: 'PATCH',
path: 'user',
required: 'result',
body: body
}, raw));
},
/**
* Get all invites for user
*
* https://api.cloudflare.com/#user-s-invites-list-invitations
*/
userInviteGetAll: function ($deferred, query, raw) {
$deferred.resolve(this._request({
query: {
auto_pagination: Joi.boolean()
}
}, {
callee: 'userInviteGetAll',
method: 'GET',
path: 'user/invites',
required: 'result',
query: query || {}
}, raw));
},
/**
* Get a invites for user
*
* https://api.cloudflare.com/#user-s-invites-list-invitations
*/
userInviteGet: function ($deferred, identifier, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
}
}, {
callee: 'userInviteGet',
method: 'GET',
path: 'user/invites/:identifier',
required: 'result',
params: {
identifier: identifier
}
}, raw));
},
/**
* Update an invite for user
*
* https://api.cloudflare.com/#user-s-invites-respond-to-invitation
*/
userInviteUpdate: function($deferred, identifier, body, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
},
body: Joi.object({
status: Joi.string().valid('accepted', 'rejected').required()
}).required()
}, {
callee: 'userInviteUpdate',
method: 'PATCH',
path: 'user/invites/:identifier',
required: 'result',
params: {
identifier: identifier
},
body: body
}, raw));
},
/**
* Get all available plans for zone
*
* https://api.cloudflare.com/#zone-plan-available-plans
*/
zoneAvailablePlanGetAll: function ($deferred, zone_identifier, query, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
query: {
auto_pagination: Joi.boolean()
}
}, {
callee: 'zoneAvailablePlanGetAll',
method: 'GET',
path: 'zones/:zone_identifier/available_plans',
required: 'result',
params: {
zone_identifier: zone_identifier
},
query: query || {}
}, raw));
},
/**
* Get available plan for zone
*
* https://api.cloudflare.com/#zone-plan-plan-details
*/
zoneAvailablePlanGet: function ($deferred, zone_identifier, identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required(),
identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneAvailablePlanGet',
method: 'GET',
path: 'zones/:zone_identifier/available_plans/:identifier',
required: 'result',
params: {
zone_identifier: zone_identifier,
identifier: identifier
}
}, raw));
},
/**
* Create a zone
*
* https://api.cloudflare.com/#zone-create-a-zone
*/
zoneNew: function ($deferred, body, raw) {
$deferred.resolve(this._request({
body: Joi.object({
name: Joi.string().max(253).required(),
jump_start: Joi.boolean(),
organization: Joi.object({
id: Joi.string().required().length(32),
name: Joi.string().max(100)
})
}).required()
}, {
callee: 'zoneNew',
method: 'POST',
path: 'zones',
required: 'result',
body: body
}, raw));
},
/**
* Initiate another zone activation check
*
* https://api.cloudflare.com/#zone-initiate-another-zone-activation-check
*/
zoneActivationCheckNew: function ($deferred, identifier, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneActivationCheckNew',
method: 'PUT',
path: 'zones/:identifier/activation_check',
required: 'result',
params: {
identifier: identifier
}
}, raw));
},
/**
* Get zones
*
* https://api.cloudflare.com/#zone-list-zones
*/
zoneGetAll: function ($deferred, query, raw) {
$deferred.resolve(this._request({
query: {
auto_pagination: Joi.boolean(),
name: Joi.string().max(253),
status: Joi.string().valid('active', 'pending', 'initializing', 'moved', 'deleted', 'deactivated'),
order: Joi.string().valid('name', 'status', 'email'),
direction: Joi.string().valid('asc', 'desc'),
match: Joi.string().valid('any', 'all')
}
}, {
callee: 'zoneGetAll',
method: 'GET',
path: 'zones',
required: 'result',
query: query || {}
}, raw));
},
/**
* Zone details
*
* https://api.cloudflare.com/#zone-zone-details
*/
zoneGet: function ($deferred, identifier, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneGet',
method: 'GET',
path: 'zones/:identifier',
required: 'result',
params: {
identifier: identifier
}
}, raw));
},
/**
* Zone update
*
* https://api.cloudflare.com/#zone-edit-zone-properties
*/
zoneUpdate: function($deferred, identifier, body, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
},
body: Joi.object({
paused: Joi.boolean(),
vanity_name_servers: Joi.array(),
plan: {
id: Joi.string().max(32)
}
}).required()
}, {
callee: 'zoneUpdate',
method: 'PATCH',
path: 'zones/:identifier',
required: 'result',
params: {
identifier: identifier
},
body: body
}, raw));
},
zoneWorkersScriptGet: function($deferred, identifier, body, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneWorkersScriptGet',
method: 'GET',
path: 'zones/:identifier/workers/script',
params: {
identifier: identifier
}
}, raw));
},
zoneWorkersScriptUpdate: function($deferred, identifier, body, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
},
body: Joi.string().required()
}, {
callee: 'zoneWorkersScriptGet',
method: 'PUT',
path: 'zones/:identifier/workers/script',
required: 'result',
params: {
identifier: identifier
},
contentType: 'text/javascript',
body: body
}, raw));
},
/**
* Zone purge cache
*
* https://api.cloudflare.com/#zone-purge-all-files
*/
zonePurgeCache: function($deferred, identifier, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
},
body: Joi.object({
purge_everything: Joi.boolean().required()
}).required()
}, {
callee: 'zonePurgeCache',
method: 'DELETE',
path: 'zones/:identifier/purge_cache',
required: 'result',
params: {
identifier: identifier
},
body: {
purge_everything: true
}
}, raw));
},
/**
* Zone purge cachge by URL or Cache-Tags
*
* https://api.cloudflare.com/#zone-purge-individual-files-by-url-and-cache-tags
*/
zonePurgeCacheBy: function($deferred, identifier, body, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
},
body: Joi.alternatives().try(
{
files: Joi.array().max(30).required()
},
{
tags: Joi.array().max(30).required()
}
).required()
}, {
callee: 'zonePurgeCacheBy',
method: 'DELETE',
path: 'zones/:identifier/purge_cache',
required: 'result',
params: {
identifier: identifier
},
body: body
}, raw));
},
/**
* Zone delete
*
* https://api.cloudflare.com/#zone-delete-a-zone
*/
zoneDestroy: function($deferred, identifier, raw) {
$deferred.resolve(this._request({
params: {
identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneDestroy',
method: 'DELETE',
path: 'zones/:identifier',
required: 'result',
params: {
identifier: identifier
}
}, raw));
},
/**
* Get all settings for zone
*
* https://api.cloudflare.com/#zone-settings-get-all-zone-settings
*/
zoneSettingsGetAll: function ($deferred, zone_identifier, query, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
query: {
auto_pagination: Joi.boolean()
}
}, {
callee: 'zoneSettingsGetAll',
method: 'GET',
path: 'zones/:zone_identifier/settings',
required: 'result',
params: {
zone_identifier: zone_identifier
},
query: query
}, raw));
},
/**
* Get advanced DDOS setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-advanced-ddos-setting
*/
zoneSettingsAdvancedDDOSGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsAdvancedDDOSGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/advanced_ddos',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get always online setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-always-online-setting
*/
zoneSettingsAlwaysOnlineGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsAlwaysOnlineGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/always_online',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get browser cache TTL setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-always-online-setting
*/
zoneSettingsBrowserCacheTTLGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsBrowserCacheTTLGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/browser_cache_ttl',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get browser check setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-browser-check-setting
*/
zoneSettingsBrowserCheckGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsBrowserCheckGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/browser_check',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get cache level setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-cache-level-setting
*/
zoneSettingsCacheLevelGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsCacheLevelGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/cache_level',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get challenge TTL setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-challenge-ttl-setting
*/
zoneSettingsChallengeTTLGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsChallengeTTLGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/challenge_ttl',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get development mode setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-development-mode-setting
*/
zoneSettingsDevelopmentModeGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsDevelopmentModeGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/development_mode',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get email obfuscation setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-email-obfuscation-setting
*/
zoneSettingsEmailObfuscationGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsEmailObfuscationGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/email_obfuscation',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get hotlink protection setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-hotlink-protection-setting
*/
zoneSettingsHotlinkProtectionGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsHotlinkProtectionGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/hotlink_protection',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get IP geolocation setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-ip-geolocation-setting
*/
zoneSettingsIPGeolocationGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsIPGeolocationGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/ip_geolocation',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get ipv6 setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-ipv6-setting
*/
zoneSettingsIPv6Get: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsIPv6Get',
method: 'GET',
path: 'zones/:zone_identifier/settings/ipv6',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get minify setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-minify-setting
*/
zoneSettingsMinifyGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsMinifyGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/minify',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get mobile redirect setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-mobile-redirect-setting
*/
zoneSettingsMobileRedirectGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsMobileRedirectGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/mobile_redirect',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get mirage setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-mirage-setting
*/
zoneSettingsMirageGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsMirageGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/mirage',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get origin error page pass through setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-enable-error-pages-on-setting
*/
zoneSettingsOriginErrorPagePassThruGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsOriginErrorPagePassThruGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/origin_error_page_pass_thru',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get polish setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-polish-setting
*/
zoneSettingsPolishGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsPolishGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/polish',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get prefetch preload setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-prefetch-preload-setting
*/
zoneSettingsPrefetchPreloadGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsPrefetchPreloadGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/prefetch_preload',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get response buffering setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-response-buffering-setting
*/
zoneSettingsResponseBufferingGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsResponseBufferingGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/response_buffering',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get rocket loader setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-rocket-loader-setting
*/
zoneSettingsRocketLoaderGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsRocketLoaderGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/rocket_loader',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get security header setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-security-header-hsts-setting
*/
zoneSettingsSecurityHeaderGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsSecurityHeaderGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/security_header',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get security level setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-security-level-setting
*/
zoneSettingsSecurityLevelGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsSecurityLevelGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/security_level',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get server side exclude setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-server-side-exclude-setting
*/
zoneSettingsServerSideExcludeGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsServerSideExcludeGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/server_side_exclude',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get sort query string for cache setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-enable-query-string-sort-setting
*/
zoneSettingsSortQueryStringForCacheGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsSortQueryStringForCacheGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/sort_query_string_for_cache',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get SSL setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-ssl-setting
*/
zoneSettingsSSLGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsSSLGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/ssl',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get TLS client auth setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-tls-client-auth-setting
*/
zoneSettingsTLSClientAuthGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsTLSClientAuthGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/tls_client_auth',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get true client IP header setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-true-client-ip-setting
*/
zoneSettingsTrueClientIPHeaderGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsTrueClientIPHeaderGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/true_client_ip_header',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get enable TLS 1.2 setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-zone-enable-tls-1-2-setting
*/
zoneSettingsTLS1Point2OnlyGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsTLS1Point2OnlyGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/tls_1_2_only',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Get WAF setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-web-application-firewall-waf-setting
*/
zoneSettingsWAFGet: function ($deferred, zone_identifier, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
}
}, {
callee: 'zoneSettingsWAFGet',
method: 'GET',
path: 'zones/:zone_identifier/settings/waf',
required: 'result',
params: {
zone_identifier: zone_identifier
}
}, raw));
},
/**
* Update settings for zone
*
* zones/:zone_identifier/settings
*
* https://api.cloudflare.com/#zone-settings-edit-zone-settings-info
*/
zoneSettingsUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
items: Joi.array().items(
Joi.object().keys({
id: Joi.string().required(),
value: Joi.string().required()
}).required()
).required()
}).required()
}, {
callee: 'zoneSettingsUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update always online setting for zone
*
* https://api.cloudflare.com/#zone-settings-get-always-online-setting
*/
zoneSettingsAlwaysOnlineUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsAlwaysOnlineUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/always_online',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update browser cache TTL setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-browser-cache-ttl-setting
*/
zoneSettingsBrowserCacheTTLUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.number().valid(
30,
60,
300,
1200,
1800,
3600,
7200,
10800,
14400,
18000,
28800,
43200,
57600,
72000,
86400,
172800,
259200,
345600,
432000,
691200,
1382400,
2073600,
2678400,
5356800,
16070400,
31536000
).required()
}).required()
}, {
callee: 'zoneSettingsBrowserCacheTTLUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/browser_cache_ttl',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update browser check setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-browser-check-setting
*/
zoneSettingsBrowserCheckUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsBrowserCheckUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/browser_check',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update cache level setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-cache-level-setting
*/
zoneSettingsCacheLevelUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('aggressive', 'basic', 'simplified').required()
}).required()
}, {
callee: 'zoneSettingsCacheLevelUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/cache_level',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update challenge TTL setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-challenge-ttl-setting
*/
zoneSettingsChallengeTTLUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.number().valid(
300,
900,
1800,
2700,
3600,
7200,
10800,
14400,
28800,
57600,
86400,
604800,
2592000,
31536000
).required()
}).required()
}, {
callee: 'zoneSettingsChallengeTTLUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/challenge_ttl',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update development mode setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-development-mode-setting
*/
zoneSettingsDevelopmentModeUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsDevelopmentModeUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/development_mode',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update email obfuscation setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-email-obfuscation-setting
*/
zoneSettingsEmailObfuscationUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsEmailObfuscationUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/email_obfuscation',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update origin error page pass thru setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-enable-error-pages-on-setting
*/
zoneSettingsOriginErrorPagePassThruUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsOriginErrorPagePassThruUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/origin_error_page_pass_thru',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update hotlink protection setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-hotlink-protection-setting
*/
zoneSettingsHotlinkProtectionUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsHotlinkProtectionUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/hotlink_protection',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update IP geolocation setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-ip-geolocation-setting
*/
zoneSettingsIPGeolocationUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsIPGeolocationUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/ip_geolocation',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update ipv6 setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-ipv6-setting
*/
zoneSettingsIPv6Update: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsIPv6Update',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/ipv6',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update minify setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-minify-setting
*/
zoneSettingsMinifyUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.object({
css: Joi.string().valid('on', 'off'),
html: Joi.string().valid('on', 'off'),
js: Joi.string().valid('on', 'off')
}).min(1).required()
}).required()
}, {
callee: 'zoneSettingsMinifyUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/minify',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update mobile redirect setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-mobile-redirect-setting
*/
zoneSettingsMobileRedirectUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.object({
status: Joi.string().valid('on', 'off').required(),
mobile_subdomain: Joi.string().required(),
strip_uri: Joi.boolean().required()
}).required()
}).required()
}, {
callee: 'zoneSettingsMobileRedirectUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/mobile_redirect',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update mirage setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-mirage-setting
*/
zoneSettingsMirageUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsMirageUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/mirage',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update polish setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-polish-setting
*/
zoneSettingsPolishUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('off', 'lossless', 'lossy').required()
}).required()
}, {
callee: 'zoneSettingsPolishUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/polish',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update prefetch preload setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-prefetch-preload-setting
*/
zoneSettingsPrefetchPreloadUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required()
},
body: Joi.object({
value: Joi.string().valid('on', 'off').required()
}).required()
}, {
callee: 'zoneSettingsPrefetchPreloadUpdate',
method: 'PATCH',
path: 'zones/:zone_identifier/settings/prefetch_preload',
required: 'result',
params: {
zone_identifier: zone_identifier
},
body: body
}, raw));
},
/**
* Update response buffering setting for zone
*
* https://api.cloudflare.com/#zone-settings-change-response-buffering-setting
*/
zoneSettingsResponseBufferingUpdate: function($deferred, zone_identifier, body, raw) {
$deferred.resolve(this._request({
params: {
zone_identifier: Joi.string().length(32).required