cosmicjs
Version:
The official client module for Cosmic JS. This module helps you easily add dynamic content to your website or application.
219 lines (206 loc) • 6.5 kB
JavaScript
require('es6-promise').polyfill();
require('isomorphic-fetch');
var _ = require('lodash');
var superagent = require('superagent');
var api_url = 'https://api.cosmicjs.com';
var api_version = 'v1';
module.exports = {
getBucket: function(config, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/?read_key=' + config.bucket.read_key;
fetch(endpoint)
.then(function(response){
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
return callback(false, response);
});
},
getObjects: function(config, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/objects?read_key=' + config.bucket.read_key;
fetch(endpoint)
.then(function(response){
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
// Constructor
var cosmic = {};
var objects = response.objects;
cosmic.objects = {};
cosmic.objects.all = objects;
cosmic.objects.type = _.groupBy(objects, 'type_slug');
cosmic.object = _.map(objects, keyMetafields);
cosmic.object = _.keyBy(cosmic.object, 'slug');
return callback(false, cosmic);
});
},
getObjectType: function(config, object, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/object-type/' + object.type_slug + '?read_key=' + config.bucket.read_key;
if (object.limit) endpoint += '&limit=' + object.limit;
if (object.skip) endpoint += '&skip=' + object.skip;
fetch(endpoint)
.then(function(response){
if (response.status >= 400) {
var err = {
"message" : "There was an error with this request."
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
// Constructor
var cosmic = {};
var objects = response.objects;
cosmic.objects = {};
cosmic.objects.all = objects;
cosmic.object = _.map(objects, keyMetafields);
cosmic.object = _.keyBy(cosmic.object, "slug");
cosmic.total = response.total;
return callback(false, cosmic);
});
},
getObject: function(config, object, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/object/' + object.slug + '?read_key=' + config.bucket.read_key;
if (object._id) {
endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/object-by-id/' + object._id + '?read_key=' + config.bucket.read_key;
}
fetch(endpoint)
.then(function(response){
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
// Constructor
var cosmic = {};
var object = response.object;
var metafields = object.metafields;
if(metafields){
object.metafield = _.keyBy(metafields, "key");
}
cosmic.object = object;
return callback(false, cosmic);
});
},
getMedia: function(config, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/media?read_key=' + config.bucket.read_key;
fetch(endpoint)
.then(function(response){
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
return callback(false, response);
});
},
addObject: function(config, object, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/add-object';
fetch(endpoint, {
method: 'post',
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify(object)
})
.then(function(response){
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
return callback(false, response);
});
},
editObject: function(config, object, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/edit-object';
fetch(endpoint, {
method: 'put',
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify(object)
})
.then(function(response){
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
return callback(false, response);
});
},
deleteObject: function(config, object, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/delete-object';
fetch(endpoint, {
method: 'post',
headers: {
'Content-type': 'application/json'
},
body: JSON.stringify(object)
})
.then(function(response){
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return response.json()
})
.then(function(response){
return callback(false, response);
});
},
addMedia: function(config, media, callback){
var endpoint = api_url + '/' + api_version + '/' + config.bucket.slug + '/media';
superagent.field('write_key', config.bucket.write_key)
superagent.post(endpoint)
.attach('media', media)
.end(function(err, response) {
if (response.status >= 400) {
var err = {
'message': 'There was an error with this request.'
}
return callback(err, false);
}
return callback(false, response);
});
}
};
// Functions
function keyMetafields(object){
var metafields = object.metafields;
if(metafields){
object.metafield = _.keyBy(metafields, 'key');
}
return object;
}