New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

myob

Package Overview
Dependencies
Maintainers
1
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

myob - npm Package Compare versions

Comparing version 0.3.13 to 0.3.14

56

lib/authentication.js

@@ -14,9 +14,7 @@ 'use strict';

function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
function authentication(clientId, secret, logger) {
var credentials = {
const credentials = {
client: {
id: clientId,
secret: secret
secret
},

@@ -29,9 +27,9 @@ auth: {

};
var instance = _simpleOauth2.default.create(credentials);
const instance = _simpleOauth2.default.create(credentials);
return {
credentials: credentials,
instance: instance,
credentials,
instance,
getAccessCodeUri: function getAccessCodeUri(redirectUri) {
var authorizationUri = this.instance.authorizationCode.authorizeURL({
getAccessCodeUri(redirectUri) {
const authorizationUri = this.instance.authorizationCode.authorizeURL({
redirect_uri: redirectUri,

@@ -43,34 +41,14 @@ scope: 'CompanyFile'

},
refresh: function refresh(currentToken) {
var _this = this;
return _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
var token, result;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
logger.info('refreshing token', currentToken);
async refresh(currentToken) {
logger.info('refreshing token', currentToken);
token = _this.instance.accessToken.create(currentToken);
_context.next = 4;
return token.refresh();
case 4:
result = _context.sent;
return _context.abrupt('return', result.token);
case 6:
case 'end':
return _context.stop();
}
}
}, _callee, _this);
}))();
const token = this.instance.accessToken.create(currentToken);
const result = await token.refresh();
return result.token;
},
getToken: function getToken(code, redirectUri) {
var _this2 = this;
var params = {
code: code,
getToken(code, redirectUri) {
const params = {
code,
'Content-Type': 'application/x-www-form-urlencoded',

@@ -84,7 +62,5 @@ redirect_uri: redirectUri,

return this.instance.authorizationCode.getToken(params).then(function (result) {
return _this2.instance.accessToken.create(result);
});
return this.instance.authorizationCode.getToken(params).then(result => this.instance.accessToken.create(result));
}
};
}

@@ -7,4 +7,2 @@ 'use strict';

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _axios = require('axios');

@@ -14,2 +12,6 @@

var _nullLogger = require('null-logger');
var _nullLogger2 = _interopRequireDefault(_nullLogger);
var _rate_limit = require('./interceptors/rate_limit');

@@ -29,40 +31,16 @@

function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
const pack = require('../package');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
const MYOB_BASE = 'https://api.myob.com/accountright/';
var pack = require('../package');
// FIXME: /info is on the root of the host
// we really need both apiBase and companyFileUrl
var Client = function () {
function Client(_ref) {
var _this = this;
var clientId = _ref.clientId,
secret = _ref.secret,
_ref$token = _ref.token,
token = _ref$token === undefined ? {} : _ref$token,
logger = _ref.logger,
_ref$callback = _ref.callback,
callback = _ref$callback === undefined ? _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
case 'end':
return _context.stop();
}
}
}, _callee, _this);
})) : _ref$callback,
username = _ref.username,
password = _ref.password,
_ref$timeout = _ref.timeout,
timeout = _ref$timeout === undefined ? 5000 : _ref$timeout,
_ref$apiBase = _ref.apiBase,
apiBase = _ref$apiBase === undefined ? 'https://api.myob.com/accountright/' : _ref$apiBase;
_classCallCheck(this, Client);
class Client {
constructor({ clientId = null,
secret = null,
token = {}, logger = _nullLogger2.default, callback = async () => {}, username, password,
timeout = 5000, apiBase = MYOB_BASE }) {
this.apiBase = apiBase;
this.token = token;
this.token = token || {};
this.logger = logger;

@@ -80,103 +58,80 @@ this.callback = callback;

_createClass(Client, [{
key: 'getInstance',
value: function getInstance(root) {
this.logger.info('Request Headers', this.getHeaders(root));
getInstance(root) {
const headers = this.getHeaders(root);
this.logger.info('Request Headers', headers);
var instance = this.adapter.create({
baseURL: this.apiBase,
timeout: this.timeout,
responseType: 'json',
headers: this.getHeaders(root)
});
const instance = this.adapter.create({
baseURL: this.apiBase,
timeout: this.timeout,
responseType: 'json',
headers: headers
});
(0, _rate_limit2.default)(instance, 5);
(0, _rate_limit2.default)(instance, 5);
if (this.clientId) {
(0, _expired_token2.default)(instance, this, 2);
return instance;
}
}, {
key: 'getHeaders',
value: function getHeaders() {
var root = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var headers = {
'x-myobapi-key': this.clientId,
'x-myobapi-version': 'v2',
'User-Agent': 'Ordermentum MYOB Client ' + pack.version,
Authorization: 'Bearer ' + this.token.access_token
};
return instance;
}
if (!root) {
headers['x-myobapi-cftoken'] = this.getUserToken();
}
getHeaders(root = false) {
const headers = {
'x-myobapi-version': 'v2',
'User-Agent': `Ordermentum MYOB Client ${pack.version}`
};
return headers;
if (this.clientId) {
headers['x-myobapi-key'] = this.clientId;
headers.Authorization = `Bearer ${this.token.access_token}`;
}
}, {
key: 'getCompanyFiles',
value: function getCompanyFiles() {
return this.getInstance(true).get('https://api.myob.com/accountright/').then(function (response) {
return response.data;
});
}
}, {
key: 'getUserToken',
value: function getUserToken() {
return new Buffer(this.username + ':' + this.password).toString('base64');
}
}, {
key: 'get',
value: function get() {
var _instance;
return (_instance = this.instance).get.apply(_instance, arguments).then(function (r) {
return r.data;
});
if (!root) {
headers['x-myobapi-cftoken'] = this.getUserToken();
}
}, {
key: 'post',
value: function post() {
var _instance2;
return (_instance2 = this.instance).post.apply(_instance2, arguments).then(function (r) {
return r.data;
});
}
}, {
key: 'patch',
value: function patch() {
var _instance3;
return headers;
}
return (_instance3 = this.instance).patch.apply(_instance3, arguments).then(function (r) {
return r.data;
});
get authentication() {
if (!this.clientId) {
return null;
}
}, {
key: 'put',
value: function put() {
var _instance4;
return (_instance4 = this.instance).put.apply(_instance4, arguments).then(function (r) {
return r.data;
});
}
}, {
key: 'delete',
value: function _delete() {
var _instance5;
return (0, _authentication2.default)(this.clientId, this.secret, this.logger);
}
return (_instance5 = this.instance).delete.apply(_instance5, arguments).then(function (r) {
return r.data;
});
}
}, {
key: 'authentication',
get: function get() {
return (0, _authentication2.default)(this.clientId, this.secret, this.logger);
}
}]);
getCompanyFiles() {
return this.getInstance(true).get(this.apiBase).then(response => response.data);
}
return Client;
}();
getInfo() {
return this.getInstance(true).get('/info').then(response => response.data);
}
getUserToken() {
return new Buffer(`${this.username}:${this.password}`).toString('base64');
}
get(...args) {
return this.instance.get(...args).then(r => r.data);
}
post(...args) {
return this.instance.post(...args).then(r => r.data);
}
patch(...args) {
return this.instance.patch(...args).then(r => r.data);
}
put(...args) {
return this.instance.put(...args).then(r => r.data);
}
delete(...args) {
return this.instance.delete(...args).then(r => r.data);
}
}
exports.default = Client;

@@ -23,35 +23,33 @@ 'use strict';

function createClient(_ref) {
var clientId = _ref.clientId,
secret = _ref.secret,
_ref$token = _ref.token,
token = _ref$token === undefined ? {} : _ref$token,
_ref$logger = _ref.logger,
logger = _ref$logger === undefined ? _nullLogger2.default : _ref$logger,
username = _ref.username,
password = _ref.password,
_ref$timeout = _ref.timeout,
timeout = _ref$timeout === undefined ? 5000 : _ref$timeout,
_ref$apiBase = _ref.apiBase,
apiBase = _ref$apiBase === undefined ? 'https://api.myob.com/accountright/' : _ref$apiBase;
function createClient({
clientId,
secret,
token = {},
logger = _nullLogger2.default,
username,
password,
timeout = 5000,
apiBase = 'https://api.myob.com/accountright/'
}) {
const client = new _client2.default({
clientId,
username,
password,
secret,
token,
apiBase,
timeout,
logger });
var client = new _client2.default({
clientId: clientId,
username: username,
password: password,
secret: secret,
token: token,
apiBase: apiBase,
timeout: timeout,
logger: logger });
return {
client: client,
client,
accounts: _resources2.default.accounts(client),
inventoryItems: _resources2.default.inventoryItems(client),
invoiceItems: _resources2.default.invoiceItems(client),
getCompanyFiles: function getCompanyFiles() {
getCompanyFiles() {
return client.getCompanyFiles();
},
getInfo() {
return client.getInfo();
},
contactCustomers: _resources2.default.contactCustomers(client),

@@ -58,0 +56,0 @@ employees: _resources2.default.employees(client),

@@ -7,85 +7,34 @@ 'use strict';

exports.default = expiredToken;
function expiredToken(instance, client, retries = 5) {
return instance.interceptors.response.use(null, async error => {
const config = error.config;
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
if (!config) {
return Promise.reject(error);
}
function expiredToken(instance, client) {
var _this = this;
config.expiredTokenRetry = config.expiredTokenRetry || 0;
const accessDenied = error.data && error.data.Message && error.data.Message === 'Access denied';
const canTry = !config.expiredTokenRetry || config.expiredTokenRetry < retries;
var retries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 5;
if (error.code !== 'ECONNABORTED' && !accessDenied && error.response.status === 401 && canTry) {
config.expiredTokenRetry += 1;
return instance.interceptors.response.use(null, function () {
var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee(error) {
var config, accessDenied, canTry, token;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
config = error.config;
if (config) {
_context.next = 3;
break;
}
return _context.abrupt('return', Promise.reject(error));
case 3:
config.expiredTokenRetry = config.expiredTokenRetry || 0;
accessDenied = error.data && error.data.Message && error.data.Message === 'Access denied';
canTry = !config.expiredTokenRetry || config.expiredTokenRetry < retries;
if (!(error.code !== 'ECONNABORTED' && !accessDenied && error.response.status === 401 && canTry)) {
_context.next = 28;
break;
}
config.expiredTokenRetry += 1;
_context.prev = 8;
_context.next = 11;
return client.authentication.refresh(client.token);
case 11:
token = _context.sent;
_context.prev = 12;
_context.next = 15;
return client.callback(token);
case 15:
_context.next = 20;
break;
case 17:
_context.prev = 17;
_context.t0 = _context['catch'](12);
client.logger.error(_context.t0);
case 20:
config.headers.Authorization = 'Bearer ' + token.access_token;
return _context.abrupt('return', instance(config));
case 24:
_context.prev = 24;
_context.t1 = _context['catch'](8);
client.logger.error('could not refresh token', _context.t1, error);
return _context.abrupt('return', Promise.reject(_context.t1));
case 28:
return _context.abrupt('return', Promise.reject(error));
case 29:
case 'end':
return _context.stop();
}
try {
const token = await client.authentication.refresh(client.token);
try {
await client.callback(token);
} catch (e) {
client.logger.error(e);
}
}, _callee, _this, [[8, 24], [12, 17]]);
}));
config.headers.Authorization = `Bearer ${token.access_token}`;
return instance(config);
} catch (e) {
client.logger.error('could not refresh token', e, error);
return Promise.reject(e);
}
}
return function (_x2) {
return _ref.apply(this, arguments);
};
}());
return Promise.reject(error);
});
}

@@ -14,9 +14,6 @@ 'use strict';

function rateLimit(instance) {
var retries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;
var wait = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;
function rateLimit(instance, retries = 5, wait = 1000) {
return instance.interceptors.response.use(null, error => {
const config = error.config;
return instance.interceptors.response.use(null, function (error) {
var config = error.config;
if (!config) {

@@ -27,3 +24,3 @@ return Promise.reject(error);

config.rateRetryRequest = config.rateRetryRequest || 0;
var canTry = !config.rateRetryRequest || config.rateRetryRequest < retries;
const canTry = !config.rateRetryRequest || config.rateRetryRequest < retries;

@@ -43,4 +40,4 @@ if (error.code !== 'ECONNABORTED' && error.response.status === 403 && canTry) {

return new Promise(function (resolve) {
setTimeout(function () {
return new Promise(resolve => {
setTimeout(() => {
resolve(instance(config));

@@ -47,0 +44,0 @@ }, wait);

@@ -16,2 +16,5 @@ 'use strict';

invoiceItems: (0, _resource2.default)('/Sale/Invoice/Item', 'Items'),
invoiceServices: (0, _resource2.default)('/Sale/Invoice/Service', 'Items'),
orderItems: (0, _resource2.default)('/Sale/Order/Item', 'Items'),
orderServices: (0, _resource2.default)('/Sale/Order/Service', 'Items'),
contactCustomers: (0, _resource2.default)('/Contact/Customer', 'Items'),

@@ -18,0 +21,0 @@ employees: (0, _resource2.default)('/Contact/Employee', 'Items'),

@@ -8,54 +8,41 @@ 'use strict';

function resource(path, name) {
return function (client) {
return {
path: path,
client: client,
name: name,
return client => ({
path,
client,
name,
findAll: function findAll() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$filter = _ref.filter,
filter = _ref$filter === undefined ? null : _ref$filter,
_ref$orderBy = _ref.orderBy,
orderBy = _ref$orderBy === undefined ? null : _ref$orderBy,
_ref$top = _ref.top,
top = _ref$top === undefined ? 400 : _ref$top,
_ref$skip = _ref.skip,
skip = _ref$skip === undefined ? 0 : _ref$skip;
findAll({ filter = null,
orderBy = null, top = 400, skip = 0 } = {}) {
client.logger.info('findAll', { path: this.path, filter, orderBy, top, skip });
return client.get(this.path, { params: { $filter: filter, $orderby: orderBy, $top: top, $skip: skip } }).then(response => response[name]);
},
client.logger.info('findAll', { path: this.path, filter: filter, orderBy: orderBy, top: top, skip: skip });
return client.get(this.path, { params: { $filter: filter, $orderby: orderBy, $top: top, $skip: skip } }).then(function (response) {
return response[name];
});
},
findOne: function findOne() {
return this.findAll.apply(this, arguments).then(function (items) {
return items[0];
});
},
findById: function findById(id) {
client.logger.info('findById', { path: this.path, id: id });
return client.get(this.path + '/' + id);
},
get: function get() {
return this.findbyId.apply(this, arguments);
},
create: function create() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
findOne(...args) {
return this.findAll(...args).then(items => items[0]);
},
client.logger.info('create', { path: this.path, params: params });
return client.post(this.path, params);
},
destroy: function destroy(id) {
client.logger.info('destory', { path: this.path, id: id });
return client.delete(this.path + '/' + id);
},
update: function update(id) {
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
findById(id) {
client.logger.info('findById', { path: this.path, id });
return client.get(`${this.path}/${id}`);
},
client.logger.info('update', { path: this.path, id: id, params: params });
return client.put(this.path + '/' + id, params);
}
};
};
get(...args) {
return this.findbyId(...args);
},
create(params = {}) {
client.logger.info('create', { path: this.path, params });
return client.post(this.path, params);
},
destroy(id) {
client.logger.info('destory', { path: this.path, id });
return client.delete(`${this.path}/${id}`);
},
update(id, params = {}) {
client.logger.info('update', { path: this.path, id, params });
return client.put(`${this.path}/${id}`, params);
}
});
}
{
"name": "myob",
"version": "0.3.13",
"version": "0.3.14",
"main": "lib/index.js",

@@ -38,3 +38,5 @@ "repository": "git@github.com:ordermentum/myob-javascript-sdk.git",

"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.4.0",
"babel-preset-es2015": "^6.22.0",
"babel-preset-flow": "^6.23.0",
"babel-preset-stage-1": "^6.22.0",

@@ -51,4 +53,4 @@ "babel-register": "^6.22.0",

"nyc": "^10.1.2",
"sinon": "^1.17.7"
"sinon": "^2.1.0"
}
}
# MYOB AccountRight 2.0 Javascript SDK
[![npm version](https://badge.fury.io/js/myob.svg)](https://badge.fury.io/js/myob)
[![Build Status](https://travis-ci.org/ordermentum/myob-javascript-sdk.svg?branch=master)](https://travis-ci.org/ordermentum/myob-javascript-sdk)
[![dependencies Status](https://david-dm.org/ordermentum/myob-javascript-sdk/status.svg)](https://david-dm.org/ordermentum/myob-javascript-sdk)
[![devDependencies Status](https://david-dm.org/ordermentum/steveo/dev-status.svg)](https://david-dm.org/ordermentum/myob-javascript-sdk?type=dev)
[![npm](https://img.shields.io/npm/l/myob.svg)](https://www.npmjs.com/package/myob)
[![npm](https://img.shields.io/npm/dt/myob.svg)](https://www.npmjs.com/package/myob)

@@ -11,2 +17,5 @@ MYOB AccountRight 2.0 SDK (unofficial) for Node.js.

* /Sale/Invoice/Item
* /Sale/Invoice/Service
* /Sale/Order/Item
* /Sale/Order/Service
* /Contact/Customer

@@ -13,0 +22,0 @@ * /Contact/Employee

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc