Socket
Socket
Sign inDemoInstall

nordnet-next-api

Package Overview
Dependencies
Maintainers
1
Versions
29
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nordnet-next-api - npm Package Compare versions

Comparing version 2.1.0 to 2.2.0

7

lib/__tests__/index.test.js

@@ -35,7 +35,6 @@ 'use strict';

function initResponses() {
sandbox.server.respondWith('/next/2/accounts', JSON.stringify([{ accno: 123 }]));
sandbox.server.respondWith('/next/2/accounts/123', JSON.stringify({ accno: 123 }));
sandbox.server.respondWith('/next/2/accounts', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, JSON.stringify([{ accno: 123 }])]);
sandbox.server.respondWith('/next/2/accounts/123', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, JSON.stringify({ accno: 123 })]);
sandbox.server.respondWith('/next/2/accounts/456', [401, {}, '']);
sandbox.server.respondWith('/next/2/instruments/123?positions=456,789&accno=987', JSON.stringify({ instrument_id: 123 }));
sandbox.server.respondWith('/next/2/accounts/123', JSON.stringify({ accno: 123 }));
sandbox.server.respondWith('GET', '/next/2/user/settings/foo', [204, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, '']);

@@ -45,3 +44,3 @@ sandbox.server.respondWith('POST', '/next/2/user/settings/bar', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, JSON.stringify([{ key: 'bar', value: { bar: 'bar' } }])]);

sandbox.server.respondWith('DELETE', '/next/2/user/settings/bar', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, '']);
sandbox.server.respondWith('/next/2/news?days=0', JSON.stringify([{ news_id: 1 }]));
sandbox.server.respondWith('/next/2/news?days=0', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, JSON.stringify([{ news_id: 1 }])]);
}

@@ -48,0 +47,0 @@

@@ -19,8 +19,28 @@ 'use strict';

var _lodash = require('lodash');
var _lodashObjectMerge = require('lodash/object/merge');
var _lodash2 = _interopRequireDefault(_lodash);
var _lodashObjectMerge2 = _interopRequireDefault(_lodashObjectMerge);
var _lodashObjectOmit = require('lodash/object/omit');
var _lodashObjectOmit2 = _interopRequireDefault(_lodashObjectOmit);
var _lodashObjectKeys = require('lodash/object/keys');
var _lodashObjectKeys2 = _interopRequireDefault(_lodashObjectKeys);
var _lodashCollectionFind = require('lodash/collection/find');
var _lodashCollectionFind2 = _interopRequireDefault(_lodashCollectionFind);
var _lodashLangIsPlainObject = require('lodash/lang/isPlainObject');
var _lodashLangIsPlainObject2 = _interopRequireDefault(_lodashLangIsPlainObject);
_es6Promise2['default'].polyfill();
var HTTP_NO_CONTENT = 204;
var HTTP_BAD_REQUEST = 400;
var HTTP_OK = 200;
var defaultHeaders = {

@@ -30,3 +50,3 @@ Accept: 'application/json'

var postDefaultHeaders = _lodash2['default'].merge({
var postDefaultHeaders = (0, _lodashObjectMerge2['default'])({
'Content-type': 'application/x-www-form-urlencoded'

@@ -108,7 +128,7 @@ }, defaultHeaders);

var path = buildPath(options.url, options.params);
var params = buildParams(_lodash2['default'].omit(options.params, getPathParams(options.url)));
var params = buildParams((0, _lodashObjectOmit2['default'])(options.params, getPathParams(options.url)));
var query = hasQuery(options.method) ? params : undefined;
var body = hasBody(options.method) ? params.join('&') : undefined;
var headers = buildHeaders(options.method, options.headers);
var body = buildBody(options.method, params, headers);

@@ -124,13 +144,19 @@ var fetchUrl = buildUrl(path, query);

return fetch(fetchUrl, fetchParams).then(validateStatus).then(saveNTag).then(toJSON);
return fetch(fetchUrl, fetchParams).then(validateStatus).then(saveNTag).then(processResponse);
}
function validateStatus(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response);
if (response.status < HTTP_BAD_REQUEST) {
return response;
}
return Promise.reject(response);
return toErrorResponse(response);
}
function toErrorResponse(response) {
return parseContent(response).then(function (response) {
return Promise.reject(response);
});
}
function saveNTag(response) {

@@ -141,12 +167,23 @@ state.nTag = response.headers.get('ntag') || state.nTag;

function toJSON(response) {
if (response.status === 204) {
function processResponse(response) {
if (response.status === HTTP_NO_CONTENT) {
return { status: response.status };
}
return response.json().then(function (json) {
return { status: response.status, data: json };
return parseContent(response);
}
function parseContent(response) {
var contentType = response.headers.get('Content-type');
var method = isJSON(contentType) ? 'json' : 'text';
return response[method]().then(function (data) {
return { data: data, status: response.status };
});
}
function isJSON(contentType) {
return contains('application/json')(contentType);
}
function validateUrl(url) {

@@ -205,10 +242,23 @@ if (!url) {

if (method === 'post' || method === 'put') {
return _lodash2['default'].merge({ ntag: state.nTag }, postDefaultHeaders, headers);
return (0, _lodashObjectMerge2['default'])({ ntag: state.nTag }, postDefaultHeaders, headers);
} else if (method === 'delete') {
return _lodash2['default'].merge({ ntag: state.nTag }, defaultHeaders, headers);
return (0, _lodashObjectMerge2['default'])({ ntag: state.nTag }, defaultHeaders, headers);
}
return _lodash2['default'].merge({}, headers, defaultHeaders);
return (0, _lodashObjectMerge2['default'])({}, headers, defaultHeaders);
}
function buildBody(method, params, headers) {
if (!hasBody(method)) {
return;
}
return isJsonContentType(headers) ? JSON.stringify(params) : params.join('&');
}
function isJsonContentType(headers) {
var contentType = (0, _lodashCollectionFind2['default'])((0, _lodashObjectKeys2['default'])(headers), contains('content-type'));
return isJSON(headers[contentType]);
}
function uriEncode(value) {

@@ -218,3 +268,3 @@ var encoded = undefined;

encoded = value.join(',');
} else if (_lodash2['default'].isPlainObject(value)) {
} else if ((0, _lodashLangIsPlainObject2['default'])(value)) {
encoded = JSON.stringify(value);

@@ -234,2 +284,8 @@ } else {

return method === 'post' || method === 'put';
}
function contains(string) {
return function (value) {
return !!value && value.toLowerCase().indexOf(string) !== -1;
};
}
{
"name": "nordnet-next-api",
"version": "2.1.0",
"version": "2.2.0",
"description": "Nordnet nExt API Javascript client",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

@@ -29,7 +29,6 @@ import 'test-helper';

function initResponses() {
sandbox.server.respondWith('/next/2/accounts', JSON.stringify([{ accno: 123 }]));
sandbox.server.respondWith('/next/2/accounts/123', JSON.stringify({ accno: 123 }));
sandbox.server.respondWith('/next/2/accounts', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, JSON.stringify([{ accno: 123 }])]);
sandbox.server.respondWith('/next/2/accounts/123', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, JSON.stringify({ accno: 123 })]);
sandbox.server.respondWith('/next/2/accounts/456', [401, {}, '']);
sandbox.server.respondWith('/next/2/instruments/123?positions=456,789&accno=987', JSON.stringify({ instrument_id: 123 }));
sandbox.server.respondWith('/next/2/accounts/123', JSON.stringify({ accno: 123 }));
sandbox.server.respondWith('GET', '/next/2/user/settings/foo',

@@ -43,3 +42,3 @@ [204, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, '']);

[200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, '']);
sandbox.server.respondWith('/next/2/news?days=0', JSON.stringify([{ news_id: 1 }]));
sandbox.server.respondWith('/next/2/news?days=0', [200, { 'Content-Type': 'application/json; charset=UTF-8', ntag: ntag }, JSON.stringify([{ news_id: 1 }])]);
}

@@ -46,0 +45,0 @@

@@ -6,4 +6,13 @@ import es6Promise from 'es6-promise';

import 'isomorphic-fetch';
import _ from 'lodash';
import merge from 'lodash/object/merge';
import omit from 'lodash/object/omit';
import keys from 'lodash/object/keys';
import find from 'lodash/collection/find';
import isPlainObject from 'lodash/lang/isPlainObject';
const HTTP_NO_CONTENT = 204;
const HTTP_BAD_REQUEST = 400;
const HTTP_OK = 200;
const defaultHeaders = {

@@ -13,3 +22,3 @@ Accept: 'application/json',

const postDefaultHeaders = _.merge({
const postDefaultHeaders = merge({
'Content-type': 'application/x-www-form-urlencoded',

@@ -79,7 +88,7 @@ }, defaultHeaders);

const path = buildPath(options.url, options.params);
const params = buildParams(_.omit(options.params, getPathParams(options.url)));
const params = buildParams(omit(options.params, getPathParams(options.url)));
const query = hasQuery(options.method) ? params : undefined;
const body = hasBody(options.method) ? params.join('&') : undefined;
const headers = buildHeaders(options.method, options.headers);
const body = buildBody(options.method, params, headers);

@@ -98,13 +107,17 @@ const fetchUrl = buildUrl(path, query);

.then(saveNTag)
.then(toJSON);
.then(processResponse);
}
function validateStatus(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response);
if (response.status < HTTP_BAD_REQUEST) {
return response;
}
return Promise.reject(response);
return toErrorResponse(response);
}
function toErrorResponse(response) {
return parseContent(response).then(response => Promise.reject(response));
}
function saveNTag(response) {

@@ -115,12 +128,21 @@ state.nTag = response.headers.get('ntag') || state.nTag;

function toJSON(response) {
if (response.status === 204) {
function processResponse(response) {
if (response.status === HTTP_NO_CONTENT) {
return { status: response.status };
}
return response.json().then(json => {
return { status: response.status, data: json };
});
return parseContent(response);
}
function parseContent(response) {
const contentType = response.headers.get('Content-type');
const method = isJSON(contentType) ? 'json' : 'text';
return response[method]().then(data => ({ data, status: response.status }));
}
function isJSON(contentType) {
return contains('application/json')(contentType);
}
function validateUrl(url) {

@@ -171,10 +193,23 @@ if (!url) {

if (method === 'post' || method === 'put') {
return _.merge({ ntag: state.nTag }, postDefaultHeaders, headers);
return merge({ ntag: state.nTag }, postDefaultHeaders, headers);
} else if (method === 'delete') {
return _.merge({ ntag: state.nTag }, defaultHeaders, headers);
return merge({ ntag: state.nTag }, defaultHeaders, headers);
}
return _.merge({}, headers, defaultHeaders);
return merge({}, headers, defaultHeaders);
}
function buildBody(method, params, headers) {
if (!hasBody(method)) {
return;
}
return isJsonContentType(headers) ? JSON.stringify(params) : params.join('&');
}
function isJsonContentType(headers) {
const contentType = find(keys(headers), contains('content-type'));
return isJSON(headers[contentType]);
}
function uriEncode(value) {

@@ -184,3 +219,3 @@ let encoded;

encoded = value.join(',');
} else if (_.isPlainObject(value)) {
} else if (isPlainObject(value)) {
encoded = JSON.stringify(value);

@@ -201,1 +236,7 @@ } else {

}
function contains(string) {
return function(value) {
return !!value && value.toLowerCase().indexOf(string) !== -1;
};
}
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