Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const casual = require('casual');
const config = require('./config');
const VERSION = 'v1';

const organization = config.data.organization || {};
const organization = config.get('user.organization', {});

let authToken;

Expand All @@ -18,7 +18,7 @@ function request(options) {
return Promise.reject('[API] You must log in first with: fliplet login');
}

if (!organization) {
if (!organization.id) {
return Promise.reject('You must set your organization: fliplet organization');
}

Expand Down
5 changes: 3 additions & 2 deletions lib/config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const configstore = require('./configstore');
const _ = require('lodash');

// Get the already stored environment if any
const envStored = configstore.get('env');
Expand All @@ -21,8 +22,8 @@ config.set = function(key, value) {
configstore.set(currentEnvironment, config.data);
};

config.get = function(key) {
return config.data[key];
config.get = function(key, defaultValue) {
return _.get(config.data, key, defaultValue);
};

module.exports = config;
83 changes: 83 additions & 0 deletions lib/errors.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Parses an undetermined error type to a string
*/
function parseError(error, defaultError) {
let errorObject;

if (!error) {
return defaultError;
}

if (typeof error === 'string') {
try {
errorObject = JSON.parse(error);

return parseError(errorObject, defaultError);
} catch (e) {
return error || defaultError;
}
}

if (typeof error !== 'object') {
// Number, Boolean etc.
return error;
}

if (Array.isArray(error) && error.length === 1) {
// Single element array
return parseError(error[0], defaultError);
}

if (error.error) {
return parseError(error.error);
}

if (error.body) {
return parseError(error.body, defaultError);
}

if (error.responseJSON) {
return parseError(error.responseJSON, defaultError);
}

if (error.description) {
return parseError(error.description, defaultError);
}

if (error.message) {
// Includes try...catch and thrown errors
let message = error.message;

// Adds list of errors where possible. Useful for model validation errors.
if (Array.isArray(error.errors) && error.errors.length) {
message += ': ';
error.errors.forEach((e, i) => {
if (i !== 0) {
message += '; ';
}

message += parseError(e);
});
}

return message;
}

if (error.responseText) {
// XHR object
return parseError(error.responseText, defaultError);
}

if (error.status === 0) {
return 'Error connecting to server';
}

if (Object.keys(error).length === 1) {
// Object only contains one key, feeling lucky?
return parseError(error[Object.keys(error)[0]], defaultError);
}

return JSON.stringify(error) || defaultError;
}

module.exports.parseError = parseError;
3 changes: 2 additions & 1 deletion lib/publish.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const fs = require('fs');
const Spinner = require('cli-spinner').Spinner;
const archiver = require('archiver');
const temp = require('temp');
const { parseError } = require('./errors');

const config = require('./config');

Expand Down Expand Up @@ -76,7 +77,7 @@ function publish(user) {
.catch(function(result) {
spinner.stop(true);

const error = result.error && result.error.error;
const error = parseError(result);

if (error === 'organizationId is not set') {
return reject('You must set an organization you belong to with: fliplet organization <id>');
Expand Down
Loading